查看完整版本 : 編寫 database

darigold 2017-1-16 02:00

繼 debugger 之後又一新嘗試。一直想寫 B+ tree,但係都冇郁手,而家開始郁手了。

計劃先從 in memory B+ tree (fix size key/value)開始,再寫 memory - disk serialization ,buffer manager 等等。

因為唔熟悉,慢慢黎 ……

Andylaubobby 2017-1-16 03:15

[quote]原帖由 [i]darigold[/i] 於 2017-1-16 02:00 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=454872068&ptid=26384058][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
繼 debugger 之後又一新嘗試。一直想寫 B+ tree,但係都冇郁手,而家開始郁手了。

計劃先從 in memory B+ tree (fix size key/value)開始,再寫 memory - disk serialization ,buffer manager 等等。

因為唔熟 ... [/quote]


I always find embedded database interesting. Is it sql or nosql? They said Kyoto cabinet license fee is 15000.

http://stackoverflow.com/questions/2403174/is-there-any-nosql-database-as-simple-as-sqlite

煙民母親生賤種

*** 作者被禁止或刪除 內容自動屏蔽 ***

darigold 2017-1-16 03:56

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2017-1-16 03:19 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=454873600&ptid=26384058][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
多口問句, 係咪俾人炒左! :fst_013:
[/quote]


當然冇 …… 你俾人抄左會手痕寫 open source ?

darigold 2017-1-16 03:58

之前冇 post code link ,project 係呢度︰

[url]https://github.com/cshung/MiscLab/tree/master/MingDatabase[/url]

從零開始,岩岩先開始寫 btree insertion ……

darigold 2017-1-16 09:39

寫好了 b+ tree 的 insert。

現在明白為甚麼我們總是 split 向右,方便啊 …… !

Susan﹏汪汪 2017-1-16 10:22

memory - disk serialization打算點做?

darigold 2017-1-16 11:05

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-1-16 10:22 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=454881314&ptid=26384058][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
memory - disk serialization打算點做?
[/quote]

fread() / fwrite()

話時話,bool select(int key, int* result) 已經寫好 push 左。

[[i] 本帖最後由 darigold 於 2017-1-16 11:07 AM 編輯 [/i]]

Susan﹏汪汪 2017-1-16 12:49

因為如果用mmap的話
應該要由memory allocation 寫先
std library的vector同map都冇得用

煙民母親生賤種

*** 作者被禁止或刪除 內容自動屏蔽 ***

darigold 2017-1-17 01:55

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2017-1-16 11:45 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=454917597&ptid=26384058][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
唔係邊有咁多時間? :fst_013:
[/quote]
今日放假:smile_o10:
[url=https://en.wikipedia.org/wiki/Martin_Luther_King_Jr._Day]https://en.wikipedia.org/wiki/Martin_Luther_King_Jr._Day[/url]

唔知道之前有冇 post 過呢個故事︰

[img]http://4.bp.blogspot.com/-ekYv4pNlCG4/VEaOaJUjGkI/AAAAAAAAIG4/kBx1ECJW8ow/s1600/75031_578540665539337_2092727763_n.jpg[/img]

其實某程度上,我們和這隻老鼠一樣,如果一直只想著食老本行,最終就會好似呢隻老鼠咁,坐食山空。
所以有時候花些時間去做一些其它的事,就好似買保險一樣。寫 compiler 寫多了,學下寫 database 也不錯。

煙民母親生賤種

*** 作者被禁止或刪除 內容自動屏蔽 ***

darigold 2017-1-17 02:24

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2017-1-17 02:17 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=454922440&ptid=26384058][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
真是一個很好的故事!! :fst_004:

[/quote]



哈哈,米缸裏的米當然要吃!只是別吃到跳不出去罷了。
學點別的東西,就像搭條縄子一樣,是個後備而已 ……

darigold 2017-1-17 09:22

B+ tree delete 真係好鬼難寫 …… :smile_o16:

darigold 2017-1-18 13:32

終於寫到 B+ tree deletion。
比 insertion 複雜好多 ……

stupidsing 2017-1-18 16:43

寫過。

https://github.com/stupidsing/suite/blob/df552e8a1efd58317fd8459542ef1dbff0f198ed/src/main/java/suite/btree/impl/B_TreeImpl.java

deletion 時不平衡是向左右找兄弟做合併,然後向上一層 傳遞。
反而我唔理解紅黑樹,雖然兩者 (vs 2-3 tree) 好似係對應的。
都唔知咩人會諗到紅色黑色咁多 rules 出黎既。

得閒寫埋 persistent 版本,不過唔知點樣有效 gc unused pages.

煙民母親生賤種

*** 作者被禁止或刪除 內容自動屏蔽 ***

darigold 2017-1-19 12:18

[quote]原帖由 [i]stupidsing[/i] 於 2017-1-18 04:43 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455001836&ptid=26384058][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
寫過。

[url=https://github.com/stupidsing/suite/blob/df552e8a1efd58317fd8459542ef1dbff0f198ed/src/main/java/suite/btree/impl/B_TreeImpl.java]https://github.com/stupidsing/suite/blob/df552e8a1efd58317fd8459542ef1dbff0f198ed/src/main/java/suite/btree/impl/B_TreeImpl.java[/url]

deletion 時不平衡是向左右找兄弟做合併,然後向上一層 傳遞。 ...
[/quote]

你的實現和我想寫的很類似。我才剛起步寫B+ tree,你這個連 page manager 都有了。
我的 deletion 也是左右找 key 借,沒有的話再 merge 。

C++ 的確比 Java 麻煩 …… 我寫了快 700 行才剛寫好 select/insert/delete into B+ tree
不過我應該有不少 duplicated code 。

darigold 2017-1-19 12:21

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2017-1-19 03:07 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455029313&ptid=26384058][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
請問上面堆野寫左幾耐?
(in hours please) :fst_007:
[/quote]

Stupidsing 兄用左幾多時間寫我唔知,但係我就用左三日 ……
當然斷斷續續又番工又睇電視,得閒諗起先 commit/push 一次,有時候諗到 idea 寫句 comment 又 commit ……

stupidsing 2017-1-19 20:27

點會記得呢,同埋係斷斷續續放工寫少少,得閒又 refactor 少少。

寫果時唔明個原理,幾星期都有,而家明左再寫會快好多。

darigold 2017-1-20 08:44

[quote]原帖由 [i]stupidsing[/i] 於 2017-1-19 08:27 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455067915&ptid=26384058][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
點會記得呢,同埋係斷斷續續放工寫少少,得閒又 refactor 少少。

寫果時唔明個原理,幾星期都有,而家明左再寫會快好多。
[/quote]
再寫就冇乜意義了。哈哈,個人來說,只為享受「終於想通」個殺那既興奮 ……

做已經識做既野好大程度上只係工作,番工要做咪做囉,私人,當然唔做啦,做黎做乜?

block 左一個問題諗幾星期我諗我冇咁既耐性 ……

話時話,我又向前走左一小步,岩岩 push 左個 change 去 maintain right sibling pointer。
下一步打算做 randomized testing 。

Susan﹏汪汪 2017-1-20 09:14

[quote]原帖由 [i]darigold[/i] 於 2017-1-20 08:44 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=455088183&ptid=26384058][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]

再寫就冇乜意義了。哈哈,個人來說,只為享受「終於想通」個殺那既興奮 ……

做已經識做既野好大程度上只係工作,番工要做咪做囉,私人,當然唔做啦,做黎做乜?

block 左一個問題諗幾星期我諗我冇咁既耐性  ... [/quote]

汪汪斷斷續續咁寫左一年Weiler Atherton algorithm
到而家都仲寫緊、呢排有新突破
琴日終於寫到卡左好耐嘅位

darigold 2017-1-20 11:15

[quote]原帖由 [i]darigold[/i] 於 2017-1-20 08:44 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455088183&ptid=26384058][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
……
話時話,我又向前走左一小步,岩岩 push 左個 change 去 maintain right sibling pointer。
下一步打算做 randomized testing 。
[/quote]
randomized testing 真係正,又搵到 bug 。尤其係寫 data structure , 呢招非常方便有效 !
個 program 唔係好大,應該唔難 debug 。

darigold 2017-1-20 12:28

[quote]原帖由 [i]darigold[/i] 於 2017-1-20 11:15 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455094919&ptid=26384058][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]

randomized testing 真係正,又搵到 bug 。尤其係寫 data structure , 呢招非常方便有效 !
個 program 唔係好大,應該唔難 debug 。
[/quote]

簡單 bug ,fixed ,oh yeah !
:smile_o10:

stupidsing 2017-1-20 21:20

寫左段 code 一排之後睇返,見到唔順眼的地方執返佢,行得唔快 tune 下佢,都好有趣。愈黎愈精煉。
日久又會有其他發現,又或者引用人地的寫法黎改,原來咁寫好D喎。

反而做習題咁寫完就扔,唔係好鍾意。

darigold 2017-1-21 13:02

OT 一下自己先 …… TypeScript 好似好好玩 …

煙民母親生賤種

*** 作者被禁止或刪除 內容自動屏蔽 ***

stupidsing 2017-1-22 09:38

我覺得 rdbms 戲玉係個 transaction manager, 點樣做 read committed / repeatable
read / serializable.
有D似寫 STM, 不過係磁碟上做 locking.

幾萬種 js variant 撈到亂晒 @_@

darigold 2017-1-23 23:05

搞掂 TypeScript 後,番黎砌 database 。

下一步既目標係 serialize to disk ,我希望 btree 可以直接 access page memory 而不用 copy to vector ,所以最近搞左 d refactoring ,希望可以簡化。

同時我想支持 variable size key / value , 好 challenging ……

darigold 2017-1-26 13:14

最近很忙,很勉強做了一點點 refactoring ...
頁: [1] 2
查看完整版本: 編寫 database