database - 什么数据库在写入磁盘时真的很快?

标签 database sqlite database-design kyotocabinet

我正在开发一种生物软件,它可以生成数百万个长度通常大于 30 个字符的字符串(由核苷酸碱基 A-G-C-T 组成)。写成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 已经存在于数据库中,我只需要增加其中一列。

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

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

最佳答案

This BerkeleyDB whitepaper说理论限制是每秒 70,000 个事务。实际性能会低得多,并且它们的理论限制基于一些在您的情况下不成立的假设。但他们仍然声称 BerkeleyDB 比 SQLite 快得多。

If you consider that a single BDB writer measures a throughput of about 700 TPS, then the theoretical limit would be 70,000 TPS with 100 non-conflicting concurrently executing threads.

关于database - 什么数据库在写入磁盘时真的很快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15097955/

相关文章:

android - 返回不区分大小写的 sqlite 数据库

mysql - 不删除数据库表

php - 私有(private)消息通知 - 数据库表设计

sql-server - OLTP 中的索引 View ?

java - Vaadin:垂直表

Java SQL : Statement. hasResultSet()?

sqlite - EF CORE 中的 DbFunctions.TruncateTime LINQ 等价物

php - PHP 脚本与数据库交互的意外结果

database - 在已编译的 Visual Basic .NET 应用程序中如何链接数据源?

mysql - 应用程序的数据库架构