7

我正在开发一个包含大型科学数据集的数据库。典型的使用场景是每天大约有 5GB 的新数据被写入数据库;每天还会删除 5GB。数据库总大小约为 50GB。我正在运行的服务器将无法将整个数据集存储在内存中。

我已经构建了数据库,使得主数据表只是一个键/值存储,由一个唯一的 ID 和一个值组成。

查询通常针对大约 100 个连续值,例如。SELECT Value WHERE ID BETWEEN 7000000 AND 7000100;

我目前正在使用 MySQL / MyISAM,这些查询大约需要 0.1 - 0.3 秒,但最近我开始意识到 MySQL 可能不是大型键/值存储的最佳解决方案。

在我开始安装新软件和重写整个数据库之前,我想大致了解一下在使用 NoSQL DB(例如 Tokyo Tyrant、Cassandra、MongoDB)而不是MySQL 用于这些类型的检索。

谢谢

4

3 回答 3

3

也请考虑OrientDB。它使用带有 RB+Tree 算法的索引。在我的测试中,100GB 数据库读取 100 个项目在我的笔记本电脑上花费了 0.001-0.015 秒,但这取决于键/值在索引中的分布方式。

使用它进行自己的测试应该不到 1 小时。

一个坏消息是 OrientDB 还不支持集群配置(计划于 2010 年 9 月发布)。

于 2010-08-12T16:06:10.263 回答
2

我希望 Cassandra 在数据集不适合内存的情况下比基于 b-tree 的系统(如 TC、MySQL 或 MongoDB)做得更好。当然,Cassandra 的设计也是为了如果您需要更高的性能,添加更多机器来支持您的工作负载是微不足道的。

于 2010-08-08T12:05:08.063 回答
2

我在生产环境中使用 MongoDB 进行写入密集型操作,在该操作中,我对 WRITE 和 READ 操作所指的速率都做得很好,数据库的大小约为 90GB,单个实例(amazon m1.xlarge)可以达到 100QPS告诉你一个典型的 key->value 查询在一个有 150M 条目的数据库上大约需要 1-15ms,在重负载下查询时间达到 30-50ms。无论如何,200 毫秒对于键/值存储来说太多了。

如果您只使用单个商品服务器,我建议您使用 mongoDB,因为如果您正在寻找分布式解决方案,它非常高效且易于学习,您可以尝试任何 Dynamo 克隆:Cassandra (Facebook) 或 Project Volemort (LinkedIn) 是最受欢迎的。请记住,寻找强一致性会大大降低这些系统的速度。

于 2010-08-09T09:53:39.073 回答