我正在开发一种生物学软件,该软件会生成数百万个长度通常大于 30 个字符的字符串(由核苷酸碱基组成,AGCT)。写成C。
我需要一个数据库以足够快的速度将这些数据存储在磁盘上,以免造成整个软件变慢的瓶颈,并且不会消耗过多的 RAM。此外,我需要它在我的应用程序中完全链接。我不想强迫我的用户安装 SQL 服务器或类似的东西。
我已经尝试过 hamsterDB、SQLite、Kyoto Cabinet 和 MapDB,但都没有成功。问题是我需要至少以大约 50k 操作/秒的速度从数据库中插入或更新数据。通过一些优化,我让 SQLite 变得更快。它达到 18k 操作/秒(它使用同步关闭、journal_mode 关闭、事务、ignore_check_constraints 开启、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 main_seq=@SEQ)+1,1),(SELECT qnt_B FROM events WHERE main_seq=@SEQ))
这比简单的 INSERT INTO 慢,但如果 seq 已经存在于 DB 上,我只需要增加其中一列。
使用京都内阁我得到了非常高的速度,但它只支持字符串记录,我需要添加和更新整数来计算我有多少 A 和 B。
有谁知道另一个可以满足我对写入速度和记录灵活性的需求的好数据库?