具有多个条件的Cassandra数据模型

时间:2016-12-30 08:46:52

标签: cassandra data-modeling cassandra-2.0 cql3 nosql

我是Cassandra的新手,所以我读了十几篇关于它的文章,因此我了解了基础知识。所有教程都显示了1或2列和时间范围的高效数据检索。如果您有更多条件,我找不到的是如何正确建模您的数据。

我有一个大型事件规范化数据库,有很多列,比如说:

  • 活动类型
  • 时间
  • 电子邮件
  • User_age
  • user_country
  • USER_LANGUAGE
  • 等等。

我需要能够按所有列进行查询。所以在RDBMS中我会查询:

SELECT email FROM table WHERE time > X AND user_age BETWEEN X AND X AND user_language = 'nl'等。

我知道我可以为每列创建一个单独的表,但是我仍然需要将结果组合起来。也许这不是一个坏方法,但我怀疑它,因为没有子查询。

我的问题显然是,如何在Cassandra中正确建模这类数据?

非常感谢!

1 个答案:

答案 0 :(得分:5)

  

我需要能够按所有列进行查询。

让我在那里阻止你。在Cassandra中,您可以根据预期的查询模式创建表,通常表支持单个查询。在您的情况下,您有“很多”列,您需要将该数据复制到一个旨在支持每个可能的查询的表中。这将很快变得笨拙。

  

我们可以将其余的作为二级索引添加吗?在eventtype表+ merchant_id +时间选择中可能仍有数百万行。

二级索引旨在用于中间基数列。因此,极低和极高基数列都不利于二级索引。问题是,Cassandra必须选择一个节点作为协调器,扫描每个节点上的索引(产生大量网络时间),然后构建并返回结果集。这是表现不佳的处方,它与使用分布式数据库的最佳实践相悖。

简而言之,对于像这样的用例,Cassandra不是一个很好的解决方案。听起来您希望能够进行OLAP类型的查询,为此您应该使用更适合此目的的工具。