文章排行榜 – 開發

13 十月 2006 / By

MemDB己把單機版和網絡版的基礎打好了, 接著就是向 "網上應用系統" 開發. 這星期自己開始編寫一個系統, 就是 "網誌文章排行榜".

之前五年的發展, 很多都不是我想行的路, 只是為了生活, 只好任由客戶要求, 他們要甚麼, 我就寫甚麼. 但那些系統, 根本不能讓人們看到 Memory Database (MemDB) 的好處.

"要讓全人類使用MemDB的產品", 是我的願望.

之前幾年的發展, 己令我不用為生活煩惱. 接著應該為自己做些事吧!

在 " 網上解決方案" 一文, 我己解說過為何要開發MemDB和MemWS和我對它們的期望, 我一直在思考, 甚麼的系統需要這技術呢? 會很短時間有很多人用呢? 需要處理很多資料庫Query呢?

在 "為何舊文章會加入排行榜?" 我己看到現時的排行榜有很多漏洞, 這不只是 SinaBlog 和 Yahoo Blog, 就算 Blogger (這些簡稱BSP) 都未有解決方案. 其實一個解決方案, 就是讓人們評分, 一人對一篇文章只能評分一次, 最高10分, 最低-10, 用平均分來排名.

這個是一個很簡單的解決方案, 但為何BSP不能提供呢?

我估計他們是用MySQL或Oracle這類的Relational Database. 例如要解決1000個會員對1000篇文章評分這個問題, 就要處理1000×1000個 Join資料, 而且資料是儲存在 Hard Disk, 如果有100個會員同時Query排行榜, 回應就會好慢 (你都遇過Sinablog多人用時Hang Hang 地啦).

好, 就試一下解決這問題, MemDB 是 Object-Oriented Database, 因為所有資料都在Memory, 而且所有關係 (Relation) 都有 Pointer 直接指住, 所以應該可以解決傳統Relational Database 解決不來的問題. 把資料庫 MemDB和Web Server (MemWS) 整合在一個系統內, 速度應該不會慢.

由星期三開始設計, 昨天開始編寫, 今日第一個版本差不多完成, 過多兩日的測試, 星期一應該可以給大家試. 到時希望大家幫幫忙!


Prev Post:
Next Post:

Category Next Post:

Comments are closed.

Blog Comments

請恕我問一些愚昧的問題, 我的知識有限。 OS的Memory夠存放嗎?假如database有幾GB或幾佰GB又怎能呢?是不是最常用的table, 才會放在memory呢? Data放在Memory, 如要update table, memory內的data會否一定可存放回hard disk? 一兩個人會好快, 但超個十個人以上query的時候, loading不會慢嗎(因為database加web server同一部機)? Access做join是非常慢或無可能, 我慣用Oracle, 它會把最近用過的data, 放在 global memory的地方。另外它有shared server mode可減低loading, 因為user request 好像connection pooling一樣, memory是共用的(不過亦有很多壞處!)。加適當index, table做compute statistic等, 都可加快query。 In-memory database是不是較適合不frequent update的data, 但要做大量query? 它可否取代傳統Relational Database嗎?

1) 32-bit OS 最大是2G Memory, 但64-bit OS 就可以有很多 Memory.  所以如果用32-bit OS, 應用的系統不能多個2G資料. 2) 所有 insert, update和delete都要放harddisk. 3) 我做過 Web Stress Test , 把database加web server同一部機 (同一個系統) 會比較快. 4) 是否適合, 就請你幫我試來跟的系統吧, 就一見證.    

1) 32-bit OS 最大是2G Memory, 但64-bit OS 就可以有很多 Memory.  所以如果用32-bit OS, 應用的系統不能多個2G資料. 2) 所有 insert, update和delete都要放harddisk. 3) 我做過 Web Stress Test , 把database加web server同一部機 (同一個系統) 會比較快. 4) 是否適合, 就請你幫我試來跟的系統吧, 見證是否可以.

我只是一個低層次的programmer, 以前寫vb, 現在寫java, 家裡用linux, 怎能幫到你! 不過in-memory database都有可能成為主流!

Hmm… Interesting but I don't know how your MemDB works. Do you have any futher information for us to reference? Will distributed relational database help? They can provide reasonable speed and load balance. Hehe… Some questions… I assume memory can provide very fast response. If you put all DDL operations in harddisk, you have to update the memory first before the harddisk or vice versa? How can you synchronize the operation in 2 media? How can you guarantee the data can persist in harddisk if power failure before it writes to harddisk from memory? If you write to harddisk before memory database, that means you need O(2n) for all operations?

Potato, there are some technique to make the write consistent with the memory database.  It is similar to the traditional database (it also needs to write data from memory to disk.

I assume you put the entire RDBMS in memory, right? If so, how to handle data more than your memory, say 10GB database?

32 bits OS only support 2G memory, need to wait until 64 bits OS.

好多OS 都有 64-bit version. 其實我唔係好明你意思, 好多DBMS internal process 時都用 pointer 做 reference, 加上index, 應該都唔會好慢. 而且你用 pointer, cpu 應該都要做足 1000 X 1000 次, 點解會怏左??

Re: 蔣雲峰 DBMS 和 Memory Database (MemDB) 有很多分別的. 第一個是DBMS不是所有的資料儲在memory, 所以要付出時間load, 當然, load 上 memory 之後的operation和 MemDB 類似. 另一個就是index, DBMS大都用B-tree做index, MemDB 就用另一個比較適合Memory Index (叫 T-Tree). 如果你有興趣, 可以到 google 查查看.

Leave a Comment