我正在研究生成一些長度通常大於30個字符的數百萬個字符串(由核苷酸鹼基,A-G-C-T組成)的生物學軟件。它寫成C.什麼數據庫寫入磁盤真的很快?
我需要一個數據庫來將這些數據存儲在磁盤上足夠快,不會造成減慢整個軟件和不消耗太多內存的瓶頸。而且,我需要將它完全鏈接到我的應用程序中。我不想強迫我的用戶安裝SQL服務器或類似的東西。
我已經試過hamsterDB,SQLite,Kyoto Cabinet和MapDB沒有成功。問題是我需要至少從數據庫插入或更新數據,每秒至少有50次操作。通過一些優化,我讓SQLite變得更快。它達到18k操作/秒(它使用同步關閉,journal_mode關閉,事務,ignore_check_constraints on,cache_size 500.000和預編譯語句)。
每個序列被分類爲A或B,我需要知道我有多少種每種。現在,我將序列用作關鍵字,併爲A類型和B類型添加了一個計數器。在SQLite數據庫我使用的列和命令這樣的:
INSERT OR REPLACE INTO events (main_seq,qnt_A,qnt_B) VALUES (@SEQ,COALESCE((SELECT qnt_A FROM events WHERE [email protected])+1,1),(SELECT qnt_B FROM events WHERE [email protected]))
這不是一個簡單的INSERT INTO慢,但如果序列上DB已經存在我只是需要增加的一列。
與京都內閣我得到了一個非常高的速度,但它只支持字符串記錄,我需要添加和更新整數來計算有多少A和B我有。
有誰知道另一個好的數據庫可以滿足我對寫入速度和記錄靈活性的需求嗎?
[BerkeleyDB?](http://www.oracle.com/technetwork/products/berkeleydb/overview/index-085366.html) – 2013-02-26 19:54:36
所以我不太瞭解你的情況,所以我的問題可能沒有任何意義......但是您是否需要立即將結果寫入磁盤到數據庫中?僅僅以自己的基本文件格式寫入磁盤會更快嗎?然後有一個輔助進程出現並將您的中間文件移動到數據庫中? – 2013-02-26 20:00:33
Mike Sherrill,是的BerkeleyDB看起來像一個選項。我更喜歡LGPL或GPL上的一些東西,但我會更好地瞭解一下BerkeleyDB。 – 2013-02-26 20:02:52