c - 哪个 NoSQL 数据库适合 MoSTLy 写作

标签 c mongodb cassandra high-volume nosql

我正在开发一个可以生成大量数据并将其存储到磁盘的系统。该公司之前开发的一个系统使用普通文件来存储其数据,但由于多种原因,它变得非常难以管理。

我相信 NoSQL 数据库对我们来说是很好的解决方案。我们要存储的通常是带有一些元数据注释的文档(通常在 100K 左右,但偶尔会更大或更小)。查询性能不是重中之重。优先考虑的是以 I/O 变得尽可能小的方式编写。数据生成速率约为 1Gbps,但我们将来可能会达到 10Gbps(甚至更高)。

我的另一个要求是(最好有详细记录的)C API 的可用性。我目前正在测试 MongoDB。这是一个好的选择吗?如果没有,我可以使用什么其他数据库系统?

最佳答案

The rate of data generation is about 1Gbps,... I'm currently testing MongoDB. Is this a good choice?

好的,澄清一下,您的数据传输速率约为每 10 秒 1 GB。因此,您每 20 分钟左右就为 1TB 的硬盘驱动器装满一次?

MongoDB 具有相当稳定的写入速率,但它非常适合用于 RAM 与数据比率相当低的情况。您希望在内存中至少 保留主索引以及一些数据。

根据我的经验,每 5-10GB 的数据需要大约 1GB 的 RAM。超过这个数字,读取性能会急剧下降。一旦您为 100GB 的数据使用 1GB 的 RAM,即使添加新数据也会很慢,因为索引不再适合 RAM。

这里的关键是:

您计划运行哪些查询以及 MongoDB 如何使运行这些查询更容易?

您的数据很快就会占用足够的空间,基本上每个查询都会进入磁盘。除非您有非常具体的索引和分片策略,否则您最终只会进行磁盘扫描。

此外,MongoDB 不支持压缩。因此,您将使用大量磁盘空间。

If not, what other database system can I use?

您是否考虑过压缩平面文件?或者可能是像 Hadoop 这样的大数据 M​​ap/Reduce 系统(我知道 Hadoop 是用 Java 编写的)

如果 C 是关键要求,也许您想查看 Tokyo/Kyoto Cabinet


编辑:更多细节

MongoDB 支持全文搜索。您将不得不寻找其他工具 (Sphinx/Solr) 来解决此类问题。

Larges indices defeat the purpose of using an index.

根据您的数字,您正在编写 10M 文档/20 分钟或大约 30M/小时。每个文档需要大约 16 个字节以上的索引条目。 12 个字节用于 ObjectID + 4 个字节用于指向 2GB 文件的指针 + 1 个字节用于指向文件的指针 + 一些填充量。

假设每个索引条目需要大约 20 个字节,那么您的索引将以 600MB/小时或 14.4GB/天的速度增长。这只是默认的 _id 索引。

4 天后,您的主索引将不再适合 RAM,您的性能将开始急剧下降。 (这在 MongoDB 下有详细记录)

因此,弄清楚要运行哪些查询非常重要。

关于c - 哪个 NoSQL 数据库适合 MoSTLy 写作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10025197/

相关文章:

python - 在 mongoengine 中查询投影

python - 如何使用 pymongo 在我的 GridFS 上存储自定义元数据?

cassandra - 如何在 cassandra 中获取列数

c - 同步读写

c - 为什么仅使用此 C 程序的参数列表中声明的指针即可通过引用传递?

c - c中删除二叉树根节点的迭代方法

node.js - 配对 sails、passport 和 mongo : error: A hook (`session` ) failed to load! 对象 .... 没有方法 'assign'

c - ipconfig/all使用C编程导致命令行不完整错误

cassandra - 将多个节点添加到现有 cassandra 集群的最佳方法

java - 使用 Spark Streaming 找不到 Cassandra 类