講解:CSI 410锈玉、Database Systems赏半、JavaHaskell|R

CSI 410. Database Systems – Spring 2020Programming Assignment IThe total grade for this assignment is 100 points. The deadline for this assignment is 11:59PM, February 20, 2020. Submissions after this deadline will not be accepted. Students arerequired to enter the UAlbany Blackboard system and then upload a .zip file (in the form of [firstname] [last name].zip) that contains the Eclipse project directory and a short document describing:? any missing or incomplete elements of the code? any changes made to the original API? the amount of time spent for this assignment? suggestions or comments if anyIn this programming assignment, you need to implement a storage manager that maintains aseries of data objects in each data file. You first need to install and run Eclipse on your machineand import the “storage manager” project (see Appendix A). Please generate an API document(see Appendix B) and then take a look at that document as well as the source code to familiarizeyourself with this assignment. This assignment provides you with a set of incomplete classes (inparticular, see SlottedPage, FileManager, and BufferedFileManager which contain methodscurrently throwing an UnsupportedOperationException). You will need to write code for theseclasses. Your code will be graded by running a set of unit tests and then examining your code (seeSlottedPageTest and FileManagerTest which use JUnit1, as well as BufferedFileManagerTestwhich produces output messages). For details of running these tests, refer to Appendix A. Notethat passing unit tests does NOT necessarily guarantee that your implementation is correct andefficient. Please make sure that your code is correct and efficient so that it will not cause anyproblem in many other cases not covered by the unit tests. If you have questions, please contactthe TA(s) or the instructor. The remainder of this document describes the components that youneed to implement.Part 1. The Slotted Page Structure (50 points)The slotted page structure allows a storage manager to store variable-length records (dataobjects) within a fixed size page (an in-memory copy of a disk block). Each page is essentially abyte array that stores a header (at the beginning) and a number of data objects (at the end). Theheader of a page consists of (1) a 4-byte integer representing the number of entries in the page forstoring data objects, and (2) a series of 4-byte integers (one for each data object) each of whichrepresents where the corresponding data object is stored within the page (i.e., the location of thecorresponding data object within the page). Each page has, between its header and data objects,a free space where more data objects and header entries can be added. For further details of theslotted page structure, refer to Section 13.2.2 of the textbook. Upon a request to delete a dataobject from a page, the corresponding header entry (for storing the location of the data object)is simply set to -1 to indicate that there is no associated data object (the actual object is NOTnecessarily removed from the page).1http://junit.org1In this part, you need to implement the following methods (your code needs to pass all of the5 tests in SlottedPageTest):? add(Object o): adds the specified object o in the SlottedPage on which this method isinvoked. This method must first save the object o in the free space of the SlottedPage bycalling the save(Object o) method. This save(Object o) method returns an int valueindicating the location at which the object o is saved in the SlottedPage. That int valuemust be stored at the right header entry of the SlottedPage so that the saved object o canbe accessed in the future. For example, assume that object “123” is saved at location 2038 inthe byte array of an empty SlottedPage. Then, the first 4 bytes of the byte array (i.e., thebeginning of the header) must store an int value 1 to indicate that there is only one entry inthe header (in response to the addition of object “123”). The next 4 bytes of the byte array(i.e., the 0th entry in the header) must store 2038 (i.e., the location at which “123” is saved).When an additional object “456” is saved at location 2028 in the byte array, the first 4 bytesof the header must store 2 (to indicate that there are two entries in the header) and the 1stentry (i.e., the entry after the 0th entry) in the header must store 2028 (i.e., the location atwhich “456” is saved). To find the number of entries that the SlottedPage currently has, usethe entryCount() method. To set the number of entries in the header to an int value, usethe setEntryCount(int count) method. To save location l at the ith entry in the header,call saveLocation(i, l).? get(int index): returns the object at the specified index in the SlottedPage on which thismethod is invoked. For example, get(0) returns the object at index 0 (i.e., the object whoselocation is stored at the 0th entry in the header) and get(1) returns the object at index1. This method must first find the location of the object at the specified index by callingthe getLocation(int index) method. This getLocation(int index) method returns theint value stored at the header entry specified by index (i.e., the index-th header entry).If that location is -1, meaning that the object was removed from the SlottedPage, theget(int index) method needs to return null. Otherwise, get(int index) needs to obtainthe object by calling the toObject(byte[] b, int offset) method (with offset set tothe return value of getLocation(int index)) and then return that obtained object. If thegiven index cannot match any of the entries in the SlottedPage (e.g., get(-1)), the methodneeds to throw an IndexOutOfBoundsException.? remove(int index): removes the object at the specified index from the SlottedPage onwhich this method is invoked. This method must save -1 at the appropriate entry in theheader. This method must also return the object removed (i.e., the object previously storedat the specified index).? iterator(): returns an iterator over the objects (excluding those removed) stored in theSlottedPage on which this method is invoked. To find the number of entries in the currentSlottedPage, use entryCount(). To get the object at each index, call get(int index).Note that get(int index) returns null if there is currently no object at the specified indexdue to the deletion of the previous object. Feel free to add an auxiliary class or data structurefor this iterator() method.? compact(): reorganizes the SlottedPage on which the method is invoked (in ord代做CSI 410留學(xué)生作業(yè)、代寫Database Systems作業(yè)蔽挠、代做Java程序語言作業(yè) 幫做Haskell程序er to maximizethe free space of that SlottedPage). This method is used by the save(Object o)method when the object to save cannot fit into the current free space of the SlottedPage.This method needs to move objects at the end of the SlottedPage in a manner that eliminatesthe space previously wasted by the objects removed from the SlottedPage.2Please make sure that your code passes all of the tests in SlottedPageTest.Part 2. The Basic Storage Manager Implementation (40 points)In this part, you need to implement, in FileManager.java, a basic storage manager that maintainsa series of data objects in each data file without buffering (i.e., reading/writing SlottedPagesdirectly from/to data files). The methods to complete are as follows (your code needs to pass allof the 4 tests in FileManagerTest):? put(int fileID, Long location, Object o): puts object o at location location in thefile specified by fileID. Here, location has a long-type value, whose first half (4 bytescorresponding to an integer) represents the ID of the page (e.g., page 0, page 1, etc.) and thesecond half represents the index within the page. For example, put(10, 0x00000001L, o)stores object o in page 0 of the file specified by ID 10 (i.e., the first disk block in the file) atindex 1 within the page. On the other hand, put(10, 0x00010000L, o) stores object o inpage 1 of the file specified by ID 10 (i.e., the second disk block in the file) at index 0 withinthe page. Given a long-type argument location, use first(location) to get the ID of thepage and second(location) to get the index within the page. After finding an appropriatepage p, call put(int index, Object o) on p to put the object in that page and then callthe updated(p, fileID) method of FileManager to indicate that the page p is updated(then the updated(p, fileID) method of FileManager automatically writes the page tothe appropriate data file). If the location argument has an inappropriate value (e.g., its firsthalf refers to page -1), then put(int fileID, Long location, Object o) needs to throwan InvalidLocationException.? get(int fileID, Long location): returns the object at location location in the file specifiedby fileID.? remove(int fileID, Long location): removes the object at location location from thefile specified by fileID.? iterator(int fileID): returns an iterator over all objects stored in the the file specifiedby fileID. This method needs to use page(int fileID, int pageID) of FileManager anditerator() of SlottedPage. Make sure this method efficiently uses the memory (e.g., doesNOT put all of the objects in the memory first thereby incurring high space overhead andthen return an iterator over these objects).Please verify your code using the tests in FileManagerTest.3Part 3. Buffer Management (10 points)The FileManager class implemented in Part 2 directly accesses data files (i.e., no buffering),causing disk seeks frequently. In this part, you need to implement the BufferedFileManager classso that it extends the functionalities of FileManager in a manner that benefits from buffering(i.e., frequently used pages are kept in memory, thereby enabling fast read and write operations).Furthermore, you need to implement a page eviction policy for the cases where there are too manypages to keep in the main memory. The choice of eviction policy is up to you. It is not necessaryto do something sophisticated. Describe your policy in the document that you submit.When BufferedFileManager is implemented correctly, BufferedFileManagerTest will producesome output as follows (the exact number of reads and writes may vary depending on thebuffering strategy; however, there should in general be less reads and writes as the buffer sizeincreases):buffer size : 4 pages1000 additions % [ { name : table0 . dat , reads : 0 , writes : 3 8 } ]10 removals % [ { name : table0 . dat , reads : 1 0 , writes : 4 8 } ]iteration over 990 elements % [ { name : table0 . dat , reads : 5 2 , writes : 5 2 } ]shut down % [ { name : table0 . dat , reads : 5 2 , writes : 5 2 } ]buffer size : 16 pages1000 additions % [ { name : table0 . dat , reads : 0 , writes : 2 6 } ]10 removals % [ { name : table0 . dat , reads : 9 , writes : 3 5 } ]iteration over 990 elements % [ { name : table0 . dat , reads : 4 8 , writes : 5 1 } ]shut down % [ { name : table0 . dat , reads : 4 8 , writes : 5 1 } ]buffer size : 64 pages1000 additions % [ { name : table0 . dat , reads : 0 , writes : 0 } ]10 removals % [ { name : table0 . dat , reads : 0 , writes : 0 } ]iteration over 990 elements % [ { name : table0 . dat , reads : 0 , writes : 0 } ]shut down % [ { name : table0 . dat , reads : 0 , writes : 4 2 } ]Appendix A. Installing Eclipse and Importing a Java Project1. Visit:http://www.eclipse.org/downloads/2. From the web site, download the eclipse installer (those for Linux, Windows, and Mac OS Xare available) and then choose “Eclipse IDE for Java Developers” and install it.3. After finishing installation, start Eclipse.4. When Eclipse runs for the first time, it asks the user to choose the workspace location. Youmay use the default location.5. In the menu bar, choose “File” and then “Import”. Next, select “General” and “ExistingProjects into Workspace”. Then, click the “Browse” button and select the “storage manager.zip”file contained in this assignment package.6. Once the project is imported, you can choose one among SlottedPageTest.java, FileManagerTest.java,and BufferedFileManagerTest.java in the storage.test package and then run it by clickingthe icon highlighted in Figure 1.4Figure 1: EclipseAppendix B. Creating API documents using javadocOne nice feature of Java is its support for “documentation comments”, or “javadoc” comments,which you can use to automatically produce documentation for your code. Javadoc comments startwith “/**”. Inside a javadoc comment, there are some special symbols, like @param and @return.You can create HTML-based API documents from the source as follows:1. Click the “storage manager” project icon in the Navigator or Project Explorer window.2. Select “Generate Javadoc” from the “Project” menu.3. In the “Generate Javadoc” dialog box, press the “Finish” button.As it runs, it tells you that it’s generating various things. When it is finished, a few new foldersshould appear in your project: doc, doc.javadoc, and doc.resources. See what got generated (toopen the newly created HTML documentation files in a web browser window, just double-clickthem; you can start with “index.html”).5轉(zhuǎn)自:http://www.6daixie.com/contents/9/4920.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末住闯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子澳淑,更是在濱河造成了極大的恐慌比原,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杠巡,死亡現(xiàn)場離奇詭異量窘,居然都是意外死亡,警方通過查閱死者的電腦和手機氢拥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門蚌铜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锨侯,“玉大人,你說我怎么就攤上這事冬殃∏舫眨” “怎么了?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵审葬,是天一觀的道長深滚。 經(jīng)常有香客問我,道長耳璧,這世上最難降的妖魔是什么成箫? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮旨枯,結(jié)果婚禮上蹬昌,老公的妹妹穿的比我還像新娘。我一直安慰自己攀隔,他們只是感情好皂贩,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昆汹,像睡著了一般明刷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上满粗,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天辈末,我揣著相機與錄音,去河邊找鬼映皆。 笑死挤聘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的捅彻。 我是一名探鬼主播组去,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼步淹!你這毒婦竟也來了从隆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤缭裆,失蹤者是張志新(化名)和其女友劉穎键闺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幼驶,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡艾杏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片购桑。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡畅铭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勃蜘,到底是詐尸還是另有隱情硕噩,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布缭贡,位于F島的核電站炉擅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏阳惹。R本人自食惡果不足惜谍失,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莹汤。 院中可真熱鬧快鱼,春花似錦、人聲如沸纲岭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽止潮。三九已至窃判,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喇闸,已是汗流浹背袄琳。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留燃乍,地道東北人跨蟹。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像橘沥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子夯秃,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容

  • by Lene Nielsen The persona method has developed from bei...
    鮮核桃閱讀 1,054評論 0 0
  • 文/雷克斯 童話小鎮(zhèn)是一個神奇的地方座咆,從古至今所有的幻想人物都生活在這里,他們各自為家仓洼,其樂融融的生活在這美麗的地...
    雷克斯來了閱讀 633評論 1 1
  • [ 記者 ] 問題1: 對你影響最大的一個人是誰介陶?影響是什么? [ 書友榴蓮 ] 答: 對我影響最大的一個人是一位...
    a4ba0928273c閱讀 223評論 0 0
  • 丁若漁同學(xué)色建, 今天是你七歲的生日哺呜,生日快樂! 時間對你現(xiàn)在而言箕戳,可是一點都不快某残,因為我知道国撵,你不止一次的期待能像個...
    dreameramI閱讀 1,241評論 0 0
  • 皮一下很開心,么么噠玻墅!
    未完成_ce90閱讀 145評論 0 0