列为动态时的 Cassandra 数据建模

Cassandra data modeling when columns are dynamic

我正在为 cassandra 中的数据建模而苦苦挣扎,我对不同的组织有不同的属性。由于会有任意数量的属性,我无法对模式中的动态列数进行建模。其次,当我为此使用地图时,我无法查询这些属性或为它们编制索引等。我是否遗漏了什么或者这是 cassandra 的限制?


场景

一个组织选择特定的属性来收集数据,他们可以随时更改这些属性。当它们改变时,属性的数量和属性的名称也会改变。如果以前我们收集 att1,attr2,attr3 的数据,现在我们正在收集 attr4,attr5,attr6,attr7,attr8,attr9。对于任何组织,这都可以随时更改。此外,组织将大量搜索这些属性。

  1. 我们如何在 cassandra 中模拟这种情况。
  2. 如果这是一个限制,我们有什么 cassandra 的替代品 read/write (主要是,经常是。不是update/delete) 熟练程度。
  3. 我们是否必须将任何其他框架与 cassandra 结合起来?像 lucene 等

提前致谢。

这种情况确实需要有关执行的查询等的更多信息。

在最简单的情况下,只需将属性名称作为现有的聚类列,如下所示:

create table tbl (
  id int,
  collected timestamp,
  attr_name text,
  attr_value int,
  primary key(id, collected, attr_name);

在这种情况下,您可以select任一单独的属性

select * from tbl where id = ... and collected = ... and attr_name = 'attrX';

或者您可以 select 所有属性,只需省略 attr_name:

select * from tbl where id = ... and collected = ...;

但只有当所有属性值都具有相同的数据类型时它才会起作用。如果它们可能不同,那么您可能需要为每种数据类型添加更多字段。