Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Cassandra排序和不断变化的聚类键_Sorting_Cassandra_Clustering Key - Fatal编程技术网

Sorting Cassandra排序和不断变化的聚类键

Sorting Cassandra排序和不断变化的聚类键,sorting,cassandra,clustering-key,Sorting,Cassandra,Clustering Key,我有一个数据建模问题,用于数据需要按可修改的键排序的情况。 假设我们有一个用户表 { dept_id text, user_id text, user_name text, mod_date timestamp PRIMARY KEY (dept_id,user_id) } 现在我可以查询cassandra,以按部门id获取所有用户 如果我想查询一个部门中的所有用户,按mod_日期排序,该怎么办 所以,一种方法就是 { dept_id text, mo

我有一个数据建模问题,用于数据需要按可修改的键排序的情况。 假设我们有一个用户表

{
   dept_id text,
   user_id text,
   user_name text,
   mod_date timestamp
   PRIMARY KEY (dept_id,user_id)
}
现在我可以查询cassandra,以按部门id获取所有用户

如果我想查询一个部门中的所有用户,按mod_日期排序,该怎么办

所以,一种方法就是

{
   dept_id text,
   mod_date timestamp,
   user_id text,
   user_name text,
   PRIMARY KEY (dept_id, mod_date,user_id)
}
但是,每次更新用户名时,mod_日期都会更改。所以它不能成为集群密钥的一部分

尝试1:
不要更新行,而是为每次更新创建新记录

假设用户foo的记录如下
{'dept_id1',timestam1','user_id1','foo'}
然后名字改成了“酒吧”,然后改成了“巴兹”。 在这种情况下,我们将另一行添加到表中,因此

{'dept_id1',TimeStamp3','user_id1','baz'}
{'dept_id1',TimeStamp2','user_id1','bar'}
{'dept_id1',TimeStamp1','user_id1','foo'}
现在,我们可以得到一个部门中的所有用户,按mod_日期排序,但它提出了一个不同的问题

返回的数据是重复的

尝试2: 添加另一列来标识head记录,非常类似于链表

{
   dept_id text,
   mod_date timestamp,
   user_id text,
   user_name text,
   next_record text
   PRIMARY KEY (dept_id,mod_date,user_id)
}
每次更新时,它都会添加一行,并添加新记录的主键

{'dept_id1',TimeStamp3','user_id1','baz','HEAD'}
{'dept_id1',TimeStamp2','user_id1','bar','dept_id1#TimeStamp3'}
{'dept_id1',TimeStamp1','user_id1','foo','dept_id1#TimeStamp2'}
并在“下一个记录”列中添加二级索引

现在,我可以支持获取一个部门中的所有用户,按日期排序

从dept\u id=':dept'和next\u record='HEAD'订单的用户中选择* 截止日期

但它看起来相当复杂的解决方案,也许我遗漏了一些东西,一个更简单的解决方案

另一个选项是删除和插入,但对于高频更改,我认为Cassandra与墓碑有问题

欢迎提出建议/反馈。
谢谢

如我所见,最简单的方法是在应用程序(客户端代码)端对用户进行排序。您使用dept作为分区键,这意味着一个dept中的所有用户都可以在一个cassandra节点上处理,因此一个dept中没有多个用户,并且可以在应用程序端对这些用户进行足够快的排序。

如我所见,最简单的方法是在应用程序(客户端代码)端对用户进行排序。您使用dept作为分区键,这意味着一个dept中的所有用户都可以在一个cassandra节点上处理,因此一个dept中没有多个用户,并且可以在应用程序端足够快地对这些用户进行排序。

您使用的是哪个cassandra版本?还有一件事,你的主键是部门id、用户id、修改日期,所以你的数据按用户id排序,然后按部门id下的修改日期排序?谢谢。我更新了问题以反映所需的排序顺序。用户id只是问题中的噪音。我希望这个问题的意图是明确的。我使用的是Cassandra 2.2.x您使用的是哪个Cassandra版本?还有一件事,你的主键是部门id、用户id、修改日期,所以你的数据按用户id排序,然后按部门id下的修改日期排序?谢谢。我更新了问题以反映所需的排序顺序。用户id只是问题中的噪音。我希望这个问题的意图是明确的。我使用的是Cassandra 2.2.x