哪个NoSQL数据库最适合统计报表应用

Posted

技术标签:

【中文标题】哪个NoSQL数据库最适合统计报表应用【英文标题】:Which NoSQL database is the best for statistical report application 【发布时间】:2017-05-08 03:34:20 【问题描述】:

我们正在创建一个接收 JSON 消息的应用程序,如下所示, orderId: "00e8da9b", 创建时间:2016 年 12 月 22 日, 行项目:[ 项目名称:项目 1 数量:1 价格:20.0 项目名称:项目 2 数量:3 价格:80.0 ] 价钱: 零售:110, 实际:100, 节省:10, , 该应用程序主要用于生成统计报告。系统将执行的主要操作是, 插入订单详情 更新订单状态 按月和年对所有订单中特定商品的总价格求和 在所有订单中按商品名称搜索(也像部分文本搜索),并显示包含订单号、商品和价格的所有记录

我们审查了一些 NoSQL DB 的 MongoDB、Cassandra 和 Elastic Search。 在查看以下 URL 时,看起来 Elastic Search 是比 MongoDB 进行搜索和求和操作的更好选择。但在 Elastic Search 中存在数据丢失的可能性。 http://blog.quarkslab.com/mongodb-vs-elasticsearch-the-quest-of-the-holy-performances.html

请建议最适合该要求的 NoSQL DB。

谢谢。

【问题讨论】:

【参考方案1】:

我认为不可能根据给定的信息正确地建议 NoSQL 解决方案。

相反,我会尝试告诉您特定解决方案的最佳点在哪里。然后基于一些假设它是否适合您。

Cassandra: 适用于海量数据/请求,每秒数千个请求,每天数百万次插入;适用于面向列表的数据模型、时间序列数据,例如来自物联网设备、用户等的事件。可扩展性有一些缺点,例如分析和搜索功能非常有限。您只能通过分区/集群关键字段访问数据。如果您需要分析和搜索功能,则需要探索/学习其他工具,例如 Apache Spark、SOLR、Elasticsearch。 --> 只要您不必处理大规模数据,对您来说可能不是最佳选择。

Elasticsearch:实时全文搜索和分析解决方案的索引。如果您没有全文搜索要求并且不需要对数百万个数据点进行实时分析的能力,那么可能也不是您的首选。此外,在大多数用例中,仅用作主数据库的附加索引。 --> 您的搜索要求听起来更像是可以使用普通 SQL“LIKE”运算符来完成的。您的搜索和报告要求听起来更像是在月末/年末完成的传统报告。因此,额外的搜索引擎似乎是您不需要的开销。

MongoDB:对于面向文档的数据,用于使用 RDBMS 系统但需要灵活模式等的用例。 --> 从数据建模的角度来看,可能不是最适合您的选择,因为您必须对产品和订单之间的关系进行建模,并且您可能需要在关系的两侧发现和添加数据。

结论:如果您不必处理大量数据,用于统计报告的数据库对我来说听起来很像 RDBMS(即使我不是 RDBMS 人;))。

【讨论】:

Philip 带来了一个经常被遗忘但基本的观点,我自己的回答没有涉及到:不要使用 NoSQL,因为它很时髦。使用它是因为它带来了 RDBMS 无法提供的价值。【参考方案2】:

我最熟悉 Cassandra,所以我可以回答这部分:Cassandra 非常适合 INSERT、UPDATE 和查找(查找有一个警告,您必须使用整个分区键查询以获得良好的性能。分区键实际上是什么数据在内部被索引,并且可以松散地被认为是主键或复合主键)。

Cassandra 需要通过第三方索引引擎(例如 SOLR,它集成在 Cassandra 的 Datastax Enterprise Platform 中,或者您可以复制到 ElasticSearch 以进行索引)来处理不包括您的全部内容的查询分区键。如果没有一些帮助,聚合操作并不是完全可能的。索引引擎(SOLR,又是 Elasticsearch)可以通过查询使这成为可能,但如果您拥有所有需要求和的完整分区键,我更喜欢获取记录并处理聚合客户端(我们使用 SOLR,并且有发现配置错误的 SOLR 或过于复杂的 SOLR 查询会对您的集群造成不良影响)。

因此,总结一下您的用例,Cassandra 可以提供: 插入 = 好 更新 = 好 SUM = 可以使用外部索引引擎或执行客户端,只要按月/年分区。 搜索 = 只能以您描述的方式使用外部索引引擎。

对于外部索引引擎,我的项目使用 SOLR,但我听说了将 Cassandra 复制到 ElasticSearch 以进行搜索和聚合以及同时使用两者的积极建议。

我对 Mongo 知之甚少,所以我不能说太多。

【讨论】:

Wil Elassandra 是否会帮助我们提高所有运营的绩效? 这在很大程度上取决于对您来说最重要的是什么。 Cassandra 对您正在查看的任何内容都具有出色的写入可扩展性和性能,并且如果您主要通过主键查询,则速度非常快。由于您需要搜索,我的理解是 SOLR 是更快的搜索索引引擎,但从操作的角度来看,ElasticSearch 更可靠并且更易于设置。 This answer may be relevant

以上是关于哪个NoSQL数据库最适合统计报表应用的主要内容,如果未能解决你的问题,请参考以下文章

一文读懂NoSQL数据库

为什么选择使用NoSQL数据库开发如此困难?

对比云端NoSQL数据库类型

Redis简介

究竟哪种NoSQL数据库适合你?

什么类型的nosql数据库比较适合应用在物联网应用系统中?