2013-02-26 28 views
1

我正在研究生成一些長度通常大於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我有。

有誰知道另一個好的數據庫可以滿足我對寫入速度和記錄靈活性的需求嗎?

+0

[BerkeleyDB?](http://www.oracle.com/technetwork/products/berkeleydb/overview/index-085366.html) – 2013-02-26 19:54:36

+1

所以我不太瞭解你的情況,所以我的問題可能沒有任何意義......但是您是否需要立即將結果寫入磁盤到數據庫中?僅僅以自己的基本文件格式寫入磁盤會更快嗎?然後有一個輔助進程出現並將您的中間文件移動到數據庫中? – 2013-02-26 20:00:33

+0

Mike Sherrill,是的BerkeleyDB看起來像一個選項。我更喜歡LGPL或GPL上的一些東西,但我會更好地瞭解一下BerkeleyDB。 – 2013-02-26 20:02:52

回答

3

This BerkeleyDB whitepaper表示理論限制是每秒70,000個事務。實際表現會少得多,他們的理論極限是基於一些不適用於您的情況的假設。但他們仍然聲稱BerkeleyDB比SQLite快得多。

如果你認爲這是一個單一的BDB作家測量吞吐量 約700 TPS,那麼理論極限將70,000 TPS 100 不衝突的併發執行多個線程。

+0

我只是實現BerkeleyDB,它做得很好。沒有任何優化(即使是交易)我每秒達到70k次操作。 – 2013-02-27 05:24:35

3

以下benchmarks

找到OpenLDAP MDB

,以適應提交的情況下,特別是large random writes

MDB。 13,215條目/秒
京都TreeDB。 5,860項/秒
LevelDB。 3,138個詞條/秒
SQLite3。 2,068個詞條/秒
BerkeleyDB。秒1,952項/秒

相關問題