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

Cassandra data model with multiple conditions

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

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

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

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

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

我的问题很明显,我如何在 Cassandra 中正确建模这种数据?

非常感谢!

I would need to be able to query by all columns.

让我在这里阻止你。在 Cassandra 中,您可以根据预期的查询模式创建 table,通常 table 支持单个查询。在您的情况下,您有 "quite a few" 列,您需要将该数据复制到 table 中,旨在支持每个可能的查询。那很快就会变得又大又笨拙。

Could we just add the rest as secondary indexes? there could potentially still be millions of rows in the eventtype table + merchant_id + time selection.

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

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