{"id":4090,"date":"2023-11-04T13:23:35","date_gmt":"2023-11-04T05:23:35","guid":{"rendered":"https:\/\/white-night.club\/?p=4090"},"modified":"2024-08-23T12:04:25","modified_gmt":"2024-08-23T04:04:25","slug":"pg23","status":"publish","type":"post","link":"https:\/\/white-night.club\/index.php\/2023\/11\/04\/pg23\/","title":{"rendered":"MIT6.5830 Lab1-GoDB\u5b9e\u9a8c\u8bb0\u5f55\uff08\u516b\uff09"},"content":{"rendered":"\n<p>\u8fd8\u5269\u6700\u540e\u4e00\u4e2aexercise\uff0c\u770b\u770b\u80fd\u4e0d\u80fd\u4e00\u5929\u641e\u5b9a\uff0c\u76f4\u63a5\u7ee7\u7eedlab2\u3002<\/p>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<blockquote class=\"wp-block-quote has-luminous-vivid-amber-color has-text-color\">\n<p>\u5b9e\u9a8c\u6b65\u9aa4<\/p>\n<cite><em>\u5b8c\u6210lab1_query.go<\/em><\/cite><\/blockquote>\n\n\n\n<p>\u76f4\u63a5\u5f00\u5199\u3002\u4eceheap file\u91cc\u9762\u627e\u4e0breadcsv\u7684\u51fd\u6570\uff0c\u53c2\u8003\u4e00\u4e0b\u5c31\u4f1a\u5199\u4e86\u3002\u7f13\u51b2\u533a\u7684\u8bdd\u8981\u81ea\u5df1\u5b9a\u4e49\u4e00\u4e2a\u6587\u4ef6\uff0c\u800c\u4e14\u7528\u5b8c\u4e4b\u540e\u8bb0\u5f97\u5220\u6389\uff0c\u5145\u5f53\u6e05\u7a7a\u7f13\u51b2\u533a\u7684\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p>\u4e3b\u8981\u8fd8\u662f\u719f\u6089\u4e0b\u5b57\u6bb5\u7684\u64cd\u4f5c\uff0c\u6bd4\u5982\u600e\u4e48\u4ece\u5143\u7ec4\u91cc\u9762\u62ff\u5230value\u8fd9\u79cd\u3002<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">Go<\/span><span role=\"button\" tabindex=\"0\" data-code=\"func computeFieldSum(fileName string, td TupleDesc, sumField string) (int, error) {\n\tsum := 0\n\tlab1_bp := &quot;lab1bp.dat&quot;\n\tif _, err := os.Stat(lab1_bp); err == nil {\n\t\tos.Remove(lab1_bp)\n\t} else {\n\t\tf, err := os.OpenFile(lab1_bp, os.O_RDWR|os.O_CREATE, 0666)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tdefer f.Close()\n\t}\n\tbp := NewBufferPool(30)\n\thp, err := NewHeapFile(lab1_bp, &amp;td, bp)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tcsvFile, _ := os.Open(fileName)\n\terr = hp.LoadFromCSV(csvFile, true, &quot;,&quot;, false)\n\tif err != nil {\n\t\treturn 0, nil\n\t}\n\ttid := NewTID()\n\titer, _ := hp.Iterator(tid)\n\tfor {\n\t\tt, _ := iter()\n\t\tif t == nil {\n\t\t\tbreak\n\t\t}\n\t\tfor _, field := range t.Fields {\n\t\t\tif _, a := field.(IntField); a {\n\t\t\t\tsum = sum + (int)(field.(IntField).Value)\n\t\t\t}\n\t\t}\n\t}\n\treturn sum, nil \/\/ replace me\n}\n\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">func<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">computeFieldSum<\/span><span style=\"color: #D4D4D4\">(fileName <\/span><span style=\"color: #4EC9B0\">string<\/span><span style=\"color: #D4D4D4\">, td TupleDesc, sumField <\/span><span style=\"color: #4EC9B0\">string<\/span><span style=\"color: #D4D4D4\">) (<\/span><span style=\"color: #4EC9B0\">int<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4EC9B0\">error<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">sum<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">lab1_bp<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #CE9178\">&quot;lab1bp.dat&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">_<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">err<\/span><span style=\"color: #D4D4D4\"> := os.<\/span><span style=\"color: #DCDCAA\">Stat<\/span><span style=\"color: #D4D4D4\">(lab1_bp); err == <\/span><span style=\"color: #569CD6\">nil<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\tos.<\/span><span style=\"color: #DCDCAA\">Remove<\/span><span style=\"color: #D4D4D4\">(lab1_bp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t} <\/span><span style=\"color: #C586C0\">else<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #9CDCFE\">f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">err<\/span><span style=\"color: #D4D4D4\"> := os.<\/span><span style=\"color: #DCDCAA\">OpenFile<\/span><span style=\"color: #D4D4D4\">(lab1_bp, os.O_RDWR|os.O_CREATE, <\/span><span style=\"color: #B5CEA8\">0666<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> err != <\/span><span style=\"color: #569CD6\">nil<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\t<\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">, err<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">defer<\/span><span style=\"color: #D4D4D4\"> f.<\/span><span style=\"color: #DCDCAA\">Close<\/span><span style=\"color: #D4D4D4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">bp<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #DCDCAA\">NewBufferPool<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">30<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">hp<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">err<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #DCDCAA\">NewHeapFile<\/span><span style=\"color: #D4D4D4\">(lab1_bp, &amp;td, bp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> err != <\/span><span style=\"color: #569CD6\">nil<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">, err<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">csvFile<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">_<\/span><span style=\"color: #D4D4D4\"> := os.<\/span><span style=\"color: #DCDCAA\">Open<\/span><span style=\"color: #D4D4D4\">(fileName)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">err<\/span><span style=\"color: #D4D4D4\"> = hp.<\/span><span style=\"color: #DCDCAA\">LoadFromCSV<\/span><span style=\"color: #D4D4D4\">(csvFile, <\/span><span style=\"color: #569CD6\">true<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&quot;,&quot;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">false<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> err != <\/span><span style=\"color: #569CD6\">nil<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">nil<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">tid<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #DCDCAA\">NewTID<\/span><span style=\"color: #D4D4D4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">iter<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">_<\/span><span style=\"color: #D4D4D4\"> := hp.<\/span><span style=\"color: #DCDCAA\">Iterator<\/span><span style=\"color: #D4D4D4\">(tid)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">for<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #9CDCFE\">t<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">_<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #DCDCAA\">iter<\/span><span style=\"color: #D4D4D4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> t == <\/span><span style=\"color: #569CD6\">nil<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\t<\/span><span style=\"color: #C586C0\">break<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">for<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">_<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">field<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #C586C0\">range<\/span><span style=\"color: #D4D4D4\"> t.Fields {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\t<\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">_<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">a<\/span><span style=\"color: #D4D4D4\"> := field.(IntField); a {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\t\t<\/span><span style=\"color: #9CDCFE\">sum<\/span><span style=\"color: #D4D4D4\"> = sum + (<\/span><span style=\"color: #4EC9B0\">int<\/span><span style=\"color: #D4D4D4\">)(field.(IntField).Value)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> sum, <\/span><span style=\"color: #569CD6\">nil<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/\/ replace me<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u8dd1\u4e00\u4e0b\uff0c\u8fc7\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized has-custom-border\"><img loading=\"lazy\" decoding=\"async\" width=\"627\" height=\"750\" src=\"https:\/\/white-night.club\/wp-content\/uploads\/2023\/11\/05b20cb5def36b8f7f33534aea6d8e4.png\" alt=\"\" class=\"wp-image-4095\" style=\"border-style:none;border-width:0px;border-radius:0px;width:485px;height:auto\" srcset=\"https:\/\/white-night.club\/wp-content\/uploads\/2023\/11\/05b20cb5def36b8f7f33534aea6d8e4.png 627w, https:\/\/white-night.club\/wp-content\/uploads\/2023\/11\/05b20cb5def36b8f7f33534aea6d8e4-251x300.png 251w\" sizes=\"(max-width: 627px) 100vw, 627px\" \/><\/figure>\n\n\n\n<p>\u81f3\u6b64lab1\u5c31\u5b8c\u6210\u54af\u3002\u524d\u524d\u540e\u540e\u82b1\u4e86\u4e24\u4e2a\u661f\u671f\u7684\u65f6\u95f4&#8230;.\u867d\u7136\u5927\u90e8\u5206\u65f6\u95f4\u90fd\u5728\u5b66go\u7684\u8bed\u6cd5\u5c31\u662f\u4e86\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lab1\u5b9e\u9a8c\u8bb0\u5f55\uff1a\u5b8c\u6210lab1<\/p>\n","protected":false},"author":1,"featured_media":4095,"comment_status":"open","ping_status":"","sticky":false,"template":"base","format":"standard","meta":{"footnotes":""},"categories":[44,33],"tags":[34],"_links":{"self":[{"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/posts\/4090"}],"collection":[{"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/comments?post=4090"}],"version-history":[{"count":0,"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/posts\/4090\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/media\/4095"}],"wp:attachment":[{"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/media?parent=4090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/categories?post=4090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/white-night.club\/index.php\/wp-json\/wp\/v2\/tags?post=4090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}