我需要对C *表中相对较大的分区进行实时过滤和排序~20亿行,每行超过一百列。应该可以对列的任何组合进行筛选和排序。我们尝试了Apache Solr(DataStax Enterprise 4.8)来完成这项工作,但遇到了下一个问题:
所以现在我们寻找另一种方法。我们现在正在尝试Apache Spark 1.4。但看起来排序性能并不令人满意 - 对于2亿行(我们的目标~1-2秒)约为1.5分钟。也许我们正在做错事,因为我们正处于Spark学习的最初阶段。我也理解,使用更多的处理器内核和内存可能会带来更好的性能。
今天我已经阅读了有关内存索引的Apache Inginte。可能它对我们的案例来说是更好的工具?
所以现在我只是想找一个工具来执行这样的工作。
感谢。
p.s。:DataStax Enterprise 4.8,Apache Cassandra 2.1.9.791,Apache Solr 4.10.3.1.172,Apache Spark 1.4.1.1。
答案 0 :(得分:1)
我认为您的方法是最好的。 Spark(例如SparkSQL)或内存数据网格(如Ignite)。两者都将执行相同的操作-将整个内容推送到内存中,并对数据进行随机整理和切块。 http://velvia.github.io/Subsecond-Joins-in-Spark-Cassandra/ Flink是另一个可以考虑的选择,但与Spark并没有什么真正的区别。
另一方面,应该有23亿行适合Postgres DB或类似的行。检查是否还不够。
在Hadoop世界中,您再次拥有Hive(缓慢且稳定)或Impala(更快且内存更多)或Spark。但是这些对Cassandra来说效果不佳。而且我不认为您的数据足够考虑Hadoop环境(维护成本)。
答案 1 :(得分:0)
很抱歉,但是在2秒内在2bln行上排序超过一百列。我认为这将是一个很大的挑战。我的意思是你有200bln列。建议每个分区密钥最多为2bln。我认为2bln每个分区太多了。如果你想要更好的火花性能,你必须找到瓶颈。你能写一些关于你的设置吗?你有几个cassandra节点?多少个Spark节点?硬件规格?
答案 2 :(得分:0)
Apache Ignite具有索引的完整SQL支持,您可以使用这些索引来提高案例的性能。我肯定会尝试。
有关详细信息,请参阅此页:https://apacheignite.readme.io/docs/sql-queries