我试图迁移我们的postgres数据库包含数百万的点击(几年的点击历史)到更执行的系统。我们目前在postgres上运行的分析查询需要很长时间才能完成,这降低了整个数据库的性能。我一直在研究可能的解决方案,我决定仔细研究两个选项:
- HBase with Hadoop (mapreduce)
- Cassandra with Spark
我以前使用过NoSQL,但从未将其用于分析目的。起初,我对这些数据库提供的分析查询选项太少(缺少groupBy、count等)感到有点失望。在阅读了许多文章和演示文稿之后,我发现,我需要根据我打算读取数据的方式来设计模式,并且将存储层与查询层分开。这增加了更多的冗余数据,但是在NoSQL的世界里,这不是问题。
最后我找到了一个不错的grails插件cassandra- form,它内部封装了orderBy特性在cassandra计数器计数器中。然而,我仍然担心如何使这种设计可扩展。对于将来会出现的查询,我现在还不知道,我该如何设计我的模式来应对呢?一个选择是使用Spark,但是Spark不提供实时数据。
你能给我一些见解或建议,什么是大数据分析的最佳选择吗?我应该使用实时查询与预聚合查询的组合吗?
谢谢,
-
如果你正在寻找接近实时的数据分析,Spark + HBase组合是一个解决方案。
-
如果你想在吞吐量上妥协,可以使用来自Datastax的Solr + Cassandra组合。
我使用Solr + Cassandra从Datastax为我的用例,这不需要实时处理。这个组合的搜索选项的性能不是很好,但我对吞吐量很满意。
Spark+HBase组合似乎很有前景。取决于您的业务需求&专业,你可以选择合适的组合。
如果您希望能够近乎实时地分析数据,并且在查询结构上具有完全的灵活性,我认为您最好的选择是在您的多语言持久性组合中添加一个可扩展的索引引擎,例如Elasticsearch或Solr。你仍然可以使用Cassanra作为主数据存储,然后索引那些你感兴趣的查询和/或聚合字段。
看看Datastax Enterprise,它将Cassandra和Solr捆绑在一起。还可以看看Solr的Stats组件及其faceting功能。与索引引擎丰富的查询语言相结合,可以方便地实现许多分析用例。
如果你的数据集"仅"由几百万条记录组成,我认为你将能够在合理指定的集群上从Solr或ES获得一些良好的响应时间。