Cassandra数据模型具有多种条件



我是卡桑德拉(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)正确建模这种数据?

非常感谢!

我需要能够通过所有列查询。

让我停在那里。在卡桑德拉(Cassandra),您可以根据预期的查询模式创建桌子,通常表支持单个查询。在您的情况下,您有"相当多"的列,需要将这些数据复制到旨在支持每个可能查询的表中。这将变得很大,很快。

我们可以将其余的次数添加为辅助索引吗?在EventType表 Merchant_id 时间选择中,可能仍有数百万行。

辅助索引旨在用于中间基数列。因此,两者都非常低和极高的基数柱对次级索引不利。问题在于,卡桑德拉(Cassandra)将不得不选择您的一个节点作为协调器,在每个节点上扫描索引(会产生大量网络时间),然后构建并返回结果集。这是表现不佳的处方,它是使用分布式数据库的最佳实践的范围。

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

最新更新