我们目前正在评估Cassandra作为分析应用程序的数据存储。计划是在Cassandra中转储原始数据,然后主要运行聚合查询。看看CQL,它似乎不支持一些传统的SQL运算符,如:
我没有找到任何有助于在文档中实现上述内容的内容。还检查是否有任何钩子提供扩展等功能。比如在Mongodb中的数据库map-reduce或关系数据库中的用户定义函数。
人们确实谈到付费的Datastax企业版,这也不是通过普通的Cassandra实现的,而是通过Hadoop-Hive-Pig-Hadoop等单独的组件实现。或者有关于在转储数据之前进行必要的预聚合的建议因为Cassandra写的很快就到了DB。
看起来太多的开销,至少对于我们需要的基本内容。我错过了一些基本的东西吗?
非常感谢您的帮助。
答案 0 :(得分:2)
在一个特定的应用程序中,我们使用Cassandra来提高写入速度,然后让应用程序将数据压缩为更加压缩,略微聚合的摘要形式。然后我们运行每小时的工作将摘要表单复制到Postgres表。这种方法在优雅方面并不高分,但它很简单,这意味着我们可以运行临时分析查询,而不必使主数据入口路径复杂化或必须在CQL应用程序中构建定制聚合
答案 1 :(得分:2)
作为CASSANDRA-4914的一部分,cassandra中提供了聚合,可在2.2.0-rc1版本中找到。
答案 2 :(得分:1)
这只是我们在案例中所做的建议。要在cassandra数据库上进行聚合,您需要使用像PIG或HIVE这样的语言,这些语言在内部生成map-reduce代码,这对代码中的大数据非常有用。为此,您需要设置Hadoop环境。处理完成后,可以将处理过的数据写入cassandra datbase或sqoop到mysql数据库。
答案 3 :(得分:1)
根据数据的性质,如果您需要对时间序列等数据执行聚合,您应该考虑使用Kdb +。
我还在评估Cassandra存储时间序列遥测数据。我认为这是一个完美的契合。但是,我发现没有聚合功能。也许这可以与Pig和Hive一起解决。但是,如果存在将数据摄取,存储和分析结合为一种语言的解决方案,为什么您不会考虑它呢?
答案 4 :(得分:1)
我将Cassandra视为一种存储引擎,它解决了分发和可用性问题,同时保持了规模和性能。当然,权衡是灵活性和功能性。它总是在数据库世界中的功能和性能之间进行权衡。
话虽如此,Cassandra与Spark等第三方软件非常相配。 Spark可能对您的用例非常有帮助。有一个开源连接器https://github.com/datastax/spark-cassandra-connector,可帮助Spark智能地查找和运行Cassandra数据分析。
SparkSQL允许您运行SELECT总和以及大多数符合hive的查询。
答案 5 :(得分:1)
您可以使用Apache Lucene插件(https://github.com/Stratio/cassandra-lucene-index)在Cassandra中创建CUSTOM INDEXES,或者您可以使用符合您目的的其他软件(搜索引擎数据存储),例如Elasticsearch(https://www.elastic.co/products/elasticsearch)&#39 ; s也是可扩展和开源的。
Elasticsearch也可以与Kibana一起用于基于汇总数据的数据可视化。
答案 6 :(得分:1)
检查出来
原生聚合
计数
count函数可用于计算查询返回的行数。 例如:
SELECT COUNT (*) FROM plays; SELECT COUNT (1) FROM plays;
它还可用于计算给定列的非空值:
SELECT COUNT (scores) FROM plays;
最大和最小
max和min函数可用于计算最大值和最小值 给定列的查询返回的最小值。例如:
SELECT MIN (players), MAX (players) FROM plays WHERE game = 'quake';
萨姆
sum函数可用于汇总a返回的所有值 查询给定列。例如:
SELECT SUM (players) FROM plays;
平均
avg函数可用于计算所有值的平均值 由给定列的查询返回。例如:
SELECT AVG (players) FROM plays;
您还可以在此处创建自己的聚合,有关聚合的更多文档:http://cassandra.apache.org/doc/latest/cql/functions.html?highlight=aggregate