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

时间:2016-12-22 13:28:43

标签: database nosql

我们正在创建一个接收JSON消息的应用程序,如下所示,

    {   orderId:“00e8da9b”,   创建时间:12-22-2016,   lineItems:[     {         itemName:第1项         数量:1         价格:20.0     }     {         itemName:第2项         数量:3         价格:80.0     }   ]   价钱: {     零售:110,     实际:100,     节省:10,   }, }

主要是应用程序用于生成统计报告。系统将执行的主要操作是,
INSERT订单详情
更新订单状态
按月份和年份计算所有订单中特定项目的总价格 在所有订单中按项目名称搜索(也像部分文本搜索)并显示包含订单号,项目和价格的所有记录

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

请建议NoSQL DB最适合要求的是什么。

感谢。

2 个答案:

答案 0 :(得分:3)

我认为根据给定的信息正确推荐NoSQL解决方案是不可能的。

相反,我会尝试向您说明特定解决方案的最佳位置。然后基于一些假设,如果它适合你或不适合。

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

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

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

结论:如果您不必处理大量数据,统计报告数据库对我来说就像是RDBMS(即使我不是RDBMS人员)。)

答案 1 :(得分:2)

我最熟悉Cassandra,所以我可以回答这一部分:Cassandra非常适合INSERT,UPDATE和查找(查找有一点需要注意,你必须使用整个分区键来获得良好的性能。分区键实际上是什么数据由内部索引,可以松散地被认为是主键或复合主键。

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

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

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

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