什么数据库写入磁盘真的很快?

时间:2013-02-26 19:48:35

标签: database sqlite database-design kyotocabinet hamsterdb

我正在开发一种生物软件,它可以产生数百万个字符串(由核苷酸碱基形成,A-G-C-T),长度通常大于30个字符。它写成了C。

我需要一个数据库来快速地将这些数据存储在磁盘上,以免产生瓶颈,从而减慢整个软件的速度并且不会占用太多RAM。而且,我需要它在我的应用程序内完全链接。我不想强迫我的用户安装SQL服务器或类似的东西。

我已经尝试过hamsterDB,SQLite,Kyoto Cabinet和MapDB但没有成功。问题是我需要至少以~50k操作/秒从数据库插入或更新数据。通过一些优化,我得到SQLite更快。它达到18k操作/秒(它使用同步关闭,关闭journal_mode,事务,忽略_check_constraints,500.000的cache_size和预编译语句)。

每个序列都被分类为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 main_seq=@SEQ)+1,1),(SELECT qnt_B FROM events WHERE main_seq=@SEQ))

这比简单的INSERT INTO慢,但是如果seq已经存在于DB上,我只需要增加其中一列。

使用Kyoto Cabinet我的速度非常快,但它只支持字符串记录,我需要添加和更新整数来计算A和B的数量。

有谁知道另一个好的数据库可以满足我对写入速度和记录灵活性的需求?

2 个答案:

答案 0 :(得分:3)

This BerkeleyDB whitepaper表示理论上的限制是每秒70,000笔交易。实际表现会更低,其理论上的限制是基于一些在您的案例中不会成立的假设。但他们仍然声称BerkeleyDB比SQLite快得多。

  

如果您认为单个BDB编写器测量的吞吐量为   大约700 TPS,那么理论上的限制将是70,000 TPS和100   非冲突的并发执行线程。

答案 1 :(得分:3)

以下benchmarks

找到OpenLDAP MDB

以适应提交的案例,尤其适用于large random writes

MDB。 13,215 条目/秒
京都TreeDB。 5,860条/秒
LevelDB。 3,138条/秒
SQLite3。 2,068条/秒
BerkeleyDB。 1,952次/秒