我是Cassandra的新手,所以我读了十几篇关于它的文章,因此我了解了基础知识。所有教程都显示了1或2列和时间范围的高效数据检索。如果您有更多条件,我找不到的是如何正确建模您的数据。
我有一个大型事件规范化数据库,有很多列,比如说:
我需要能够按所有列进行查询。所以在RDBMS中我会查询:
SELECT email FROM table WHERE time > X AND user_age BETWEEN X AND X AND user_language = 'nl'
等。
我知道我可以为每列创建一个单独的表,但是我仍然需要将结果组合起来。也许这不是一个坏方法,但我怀疑它,因为没有子查询。
我的问题显然是,如何在Cassandra中正确建模这类数据?
非常感谢!
答案 0 :(得分:5)
我需要能够按所有列进行查询。
让我在那里阻止你。在Cassandra中,您可以根据预期的查询模式创建表,通常表支持单个查询。在您的情况下,您有“很多”列,您需要将该数据复制到一个旨在支持每个可能的查询的表中。这将很快变得笨拙。
我们可以将其余的作为二级索引添加吗?在eventtype表+ merchant_id +时间选择中可能仍有数百万行。
二级索引旨在用于中间基数列。因此,极低和极高基数列都不利于二级索引。问题是,Cassandra必须选择一个节点作为协调器,扫描每个节点上的索引(产生大量网络时间),然后构建并返回结果集。这是表现不佳的处方,它与使用分布式数据库的最佳实践相悖。
简而言之,对于像这样的用例,Cassandra不是一个很好的解决方案。听起来您希望能够进行OLAP类型的查询,为此您应该使用更适合此目的的工具。