我正在开发一个生物软件,它可以生成数百万个长度通常大于30个字符的字符串(由核苷酸碱基A-G-C-T组成)。它是用C编写的。
我需要一个数据库来将这些数据存储在磁盘上,速度足够快,不会造成瓶颈,减慢整个软件的速度,也不会消耗太多的RAM。此外,我需要它完全链接到我的应用程序中。我不想强迫我的用户安装SQL服务器或类似的东西。
我已经尝试了hamsterDB,SQLite,京都橱柜和MapDB,但都没有成功。问题是我至少需要以大约50k次/秒的速度从数据库插入或更新数据。通过一些优化,我让SQLite变得更快。它可以达到18k操作/秒(它使用synchronization off、journal_mode off、transactions、ignore_check_constraints on、cache_size of 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 main_seq=@SEQ)+1,1),(SELECT qnt_B FROM events WHERE main_seq=@SEQ))使用京都机柜我得到了一个非常高的速度,但它只支持字符串记录,我需要添加和更新整数来计算我有多少A和B。
有没有人知道另一个好的数据库,可以满足我对写入速度和记录灵活性的需求?
发布于 2013-02-27 04:01:03
This BerkeleyDB whitepaper表示,理论上的限制是每秒70,000笔交易。实际性能会低得多,而且它们的理论极限是基于一些假设,而这些假设在您的情况下是不成立的。但他们仍然声称BerkeleyDB比SQLite快得多。
如果考虑到单个BDB编写器测量的吞吐量约为700TPS,那么理论上的限制将是具有100个无冲突并发执行线程的70,000 TPS。
发布于 2014-06-14 19:00:05
下面的benchmarks
查找OpenLDAP MDB
MDB。13,215个条目/秒
京都TreeDB。5860个条目/秒
LevelDB。每秒3,138个条目
SQLite3。2,068个条目/秒
BerkeleyDB。1,952条/秒
https://stackoverflow.com/questions/15097955
复制相似问题