mongodb - 我应该选择什么 : MongoDB/Cassandra/Redis/CouchDB?

标签 mongodb cassandra redis couchdb database

我们正在开发一个非常大的项目,我想知道是否有人可以就我们应该选择什么数据库后端给我一些建议。

我们的系统由 1100 个电子设备组成,这些电子设备向中央服务器发送信号,然后服务器存储信号信息(信号长约 35 个字节)。然而这些设备每分钟发送大约 3 个信号,所以如果我们进行数据统计,数据库中每天将有 4.752.000 条新记录,每月总共有 142.560.000 条新记录。

我们需要一个快速且可靠的数据库后端。当然,我们需要对该数据库进行一些复杂的数据挖掘。我们正在对 MongoDB/Cassandra/Redis/CouchDB 进行一些研究,但文档网站仍处于早期阶段。

有什么帮助吗?想法?

非常感谢!

最佳答案

不要让空间规模(超过 1000 台设备)在计算和/或存储规模方面误导您。每秒几十个 35 字节的插入对于任何主流 DBMS 来说都是微不足道的工作负载,即使在低端硬件上运行也是如此。同样,每月 1.42 亿条记录仅在每月 1~10 GB 的存储量级,没有任何压缩,包括索引。

在您的问题评论中,您说:

"It's all about reliability, scalability and speed. It's very important that the solution scales easily (MongoDB autosharding?) just throwing in more nodes, and the speed is also very important

可靠性?任何主流 DBMS 都可以保证这一点(假设您的意思是它不会破坏您的数据,也不会崩溃——请参阅我在此答案底部对 CAP 定理的讨论)。速度?即使是单机,10~100倍这个工作量应该不是问题。可扩展性?按照目前的速度,一整年的数据,未经压缩,甚至完全索引,都可以轻松容纳在 100 GB 的磁盘空间内(同样,我们已经确定插入速度不是问题)。

因此,我不认为需要像 NoSQL 这样的奇特解决方案,甚至是分布式数据库 - 一个普通的、旧的关系数据库,如 MySQL 就可以了。如果您担心故障转移,只需在主从配置中设置备份服务器。如果我们说的是当前规模的 100 倍或 1000 倍,只需根据数据收集设备的 ID 水平划分几个实例( {partition index} = {device id} modulo {分区数})。

请记住,离开关系数据库世界的安全和舒适范围意味着放弃其表示模型及其丰富的工具集。这将使您的“复杂数据挖掘”变得更加困难——您不仅需要将数据放入数据库,还需要将其取出。

综上所述,MongoDB 和 CouchDB 的部署和使用非常简单。它们也很有趣,并且会让你对任何人都更具吸引力(不仅仅是程序员——也包括高管!)。

普遍的看法是,在您建议的三种 NoSQL 解决方案中,Cassandra 最适合高插入量(当然,相对而言,我不认为您 具有高插入量- - 这是专为 Facebook 使用而设计的);这被更难以使用来抵消。因此,除非您有一些未提及的奇怪要求,否则我建议您不要使用它。

如果您确定要部署 NoSQL,您可能需要考虑 CAP 定理。这将帮助您在 MongoDB 和 CouchDB 之间做出选择。这是一个很好的链接:http://blog.nahurst.com/visual-guide-to-nosql-systems .这一切都归结为您所说的“可靠性”:MongoDB 以可用性换取一致性,而 CouchDB 以一致性换取可用性。 (Cassandra 允许您通过指定必须写入/读取多少台服务器才能使写入/读取成功,从而在每个查询中巧妙地权衡这种折衷;更新:现在,CouchDB 也可以使用 BigCouch!非常令人兴奋...)

祝你的项目好运。

关于mongodb - 我应该选择什么 : MongoDB/Cassandra/Redis/CouchDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478916/

相关文章:

lua - Redis lua脚本不工作

redis - 在哈希键中存储数组值会引发错误

python - 查询带有时间戳范围的cassandra表而不使用允许过滤

javascript - 将 Meteor 与 MongoDB 结合使用

mysql - 使用 MYSQL InnoDB 进行地理位置搜索

Django-nonrel vs Django 与 PyMongo/Ming 用于 MongoDB

Cassandra 安装 64 位检查失败。在 Windows 10 上重新运行以获取 32 位版本

cassandra thrift 长插入 - InvalidRequestException(为什么是 :(String didn't validate.)

django - Flask-socketio 实例不从外部进程发出 (Django)

python - 如何将异步插入到 mongodb 中的日志中?