分析 - MongoDB 还是 Cassandra

8

今天我在使用mongodb,非常满意。我需要找到一个事件日志记录解决方案。该日志包括内容展示和点击的记录(例如广告系统)。主要是写入操作,读取操作很少(主要用于日常报告)。 看起来像Cassandra这样的解决方案比Mongodb更好,后者似乎更适合文档导向数据结构。 您有什么想法吗?


2
你可能想要查看这个领域的其他示例。可以看看 Hummingbird(http://projects.nuttnet.net/hummingbird/)。 - Scott Hernandez
蜂鸟看起来很棒! :) - Suman
4个回答

6
Cassandra的一个很好的特点是支持Hadoop map/reduce,这使得它可以访问非常强大的生态系统(例如Pig)工具、示例等等。根据数据量和用例,您可能还想利用其过期列功能(http://www.datastax.com/dev/blog/whats-new-cassandra-07-expiring-columns)。
Gemini最近也开源了其Cassandra实时日志处理工具,这可能类似于您想要的(http://www.thestreet.com/story/11030367/1/gemini-releases-real-time-log-processing-based-on-flume-and-cassandra.html, https://github.com/geminitech/logprocessing)。

Cassandra对于随机读取是否好用呢?我认为这对于实时分析系统非常重要。我认为HBase/MongoDB在实时部分会更好,特别是当您拥有动态的、由最终用户生成的查询并需要实时访问分析数据时。 - Suman

4
我们在一个分布式应用的项目中使用了mongodb来捕获事件记录。它运行得非常好,并且在存储量、分片和其他因素方面需要做一些预先计算是有意义的。
作为建议,采用有限集合并每隔24小时左右运行一次mapreduce操作,将日志减少到所需值的聚合表中。我注意到,由于“无模式”,mongodb中的文档可能会导致数据库文件大小增长得非常快。

5
更好的想法是使用计数器和 $inc 进行“预聚合”。这样就不需要使用 map/reduce,而且聚合结果始终保持最新。您可以根据时间的不同粒度创建不同的聚合结果。关键在于在收集数据时知道如何进行聚合。 - Scott Hernandez
2
在预聚合时,我通常不喜欢使用有上限的集合。我总是喜欢保留所有原始数据。这样,如果我想要开发新的指标或聚合方式,我可以返回原始数据并重新构建聚合。 - Clinton

1

Cassandra被优化为高写入吞吐量(每秒数千次写入),因此在这个标准上似乎很合适。然而,如果MongoDB的性能对于您的应用程序已经足够好,并且您熟悉它,那么Cassandra可能没有太多优势。


1
实际上,这些数据库本身并不用于分析。每当您选择NoSql解决方案时,都必须考虑数据如何被操作。 Cassandra非常适合写入大量数据并具有可预测的性能,易于在多数据中心环境中扩展。另一方面,读取性能取决于一致性因素。 MongoDB非常适合结构化数据,但在您的情况下并不是优势。MongoDB确保其数据一致,但这可能导致性能下降。此外,MongoDB不适用于多数据中心环境。
关于访问数据,它们也完全不同。 Cassandra提供了CQL(又称SQL),它不支持Join、group等操作。与Cassandra CQL相反,MongoDB使用JavaScript、Json,使用自己的map/reduce实现进行连接操作。
总之,我认为在选择其中一个数据库时,您应该考虑所有这些事实。从我的角度来看,Cassandra很适合您的任务,但在开始使用Cassandra之前,您应该仔细考虑模型和将要使用的查询类型。

附注:我建议将SQL引擎视为MongoDb的Apache Drill和Cassandra的PrestoDB,以进行分析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接