数据生成的速率大约是1Gbps,...我目前正在测试MongoDB。这是一个不错的选择吗?
好的,澄清一下,您的数据速率约为每 10 秒 1 gigaBYTE。所以你每 20 分钟左右填充一个 1TB 的硬盘?
MongoDB 具有相当稳定的写入速率,但它非常适合用于 RAM 与数据比率相当低的情况。您希望至少在内存中保留主索引以及一些数据。
根据我的经验,每 5-10GB 的数据需要大约 1GB 的 RAM。超过这个数字,读取性能会急剧下降。一旦你为 100GB 的数据使用 1GB 的 RAM,即使添加新数据也会很慢,因为索引不再适合 RAM。
这里的关键是:
您计划运行哪些查询以及 MongoDB 如何使这些查询的运行更容易?
您的数据很快就会占用足够的空间,基本上每个查询都会进入磁盘。除非您有一个非常具体的索引和分片策略,否则您最终只会进行磁盘扫描。
此外,MongoDB 不支持压缩。因此,您将使用大量磁盘空间。
如果没有,我可以使用其他什么数据库系统?
您是否考虑过压缩的平面文件?或者可能是像 Hadoop 这样的大数据 Map/Reduce 系统(我知道 Hadoop 是用 Java 编写的)
如果 C 是关键要求,也许你想看看东京/京都内阁?
编辑:更多细节
MongoDB不支持全文搜索。您将不得不寻找其他工具(Sphinx/Solr)来解决这些问题。
大索引违背了使用索引的目的。
根据您的数字,您正在编写 10M 文档/20 分钟或大约 30M/小时。每个文档需要大约 16+ 字节的索引条目。12 字节用于 ObjectID + 4 字节用于指向 2GB 文件的指针 + 1 字节用于指向文件的指针 + 一些填充量。
假设每个索引条目需要大约 20 个字节,那么您的索引以 600MB/小时或 14.4GB/天的速度增长。这只是默认_id
索引。
4 天后,您的主索引将不再适合 RAM,并且您的性能将开始急剧下降。(这在 MongoDB 中有详细记录)
因此,弄清楚要运行哪些查询将非常重要。