我正在为“实时绘制大数据(空间数据)”开发一个应用程序。在星火流+星火SQL + WebSocket的帮助下,我能够在仪表板上呈现预定义的查询。但是我想用交互式查询和临时查询来获取数据。
为此,我试图用“星火流+卡桑德拉”来实现它。这些查询需要对大量数据进行聚合和筛选。
我是卡桑德拉和斯派克的新手,所以我对下面的方法感到困惑,这样会更好\更快:
卡桑德拉会很快给出实时结果吗?或者我应该从Cassandra创建一个RDD来执行交互式查询。
其中一个查询是:
"SELECT * FROM PERFORMANCE.GEONAMES A INNER JOIN
(SELECT max(GEONAMEID) AS MAPINFO_ID FROM PERFORMANCE.GEONAMES
where longitude between %LL_LONG% and %UR_LONG%
and latitude between %LL_LAT% and %UR_LAT%
and %WHERE_CLAUSE% GROUP BY LEFT(QUADKEY, %QUAD_TREE_LEVEL%) )
AS B ON A.GEONAMEID = B.MAPINFO_ID"如有任何意见或建议,将不胜感激。谢谢,
感谢@doanduyhai提出的SASI二级指数,这确实产生了巨大的变化。
发布于 2016-04-13 11:50:12
卡桑德拉会很快给出实时结果吗?或者我应该从Cassandra创建一个RDD来执行交互式查询。
这取决于您预先做了多少过滤,以及集群中的机器数量。如果Cassandra表有1Tb的数据,而查询在内存中获取100 1Gb的数据,假设集群有10台机器,这意味着在内存中加载1GB是可以管理的,但查询永远不会是分分钟的。
现在,如果过滤器足够从Cassandra表中获取100 if总数,则意味着每台机器10 if,并且有可能存在秒级的延迟。
如何在卡桑德拉早期过滤数据?
发布于 2016-04-13 12:09:00
哪个会更好\更快
与往常一样,这取决于您想要运行什么样的查询。Cassandra根据如何设置表施加了一些限制;例如,不能在where子句中使用非索引列。如果在中间使用火花加载数据,则可以执行Spark允许的任何查询。
如果您使用SparkSQL/DataFrames,并执行Cassandra does允许的查询,Spark会将其推倒,从而获得与直接使用Cassandra类似的性能。否则,它将不得不从Cassandra加载所有数据,然后应用您指定的任何过滤器,这显然效率要低得多。
因此,总的来说,您可以使用Spark,但它将允许用户运行非常慢的查询。因此,您仍然应该知道如何构造Cassandra中的数据,以增加谓词向下推送原始Cassandra性能的可能性。
https://stackoverflow.com/questions/36597022
复制相似问题