Cassandra,查询主键,跳过聚类列(timeuuid)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cassandra,查询主键,跳过聚类列(timeuuid)相关的知识,希望对你有一定的参考价值。

请使用Cassandra仍然是新的我有一个问题,我想解决但尝试但我不能。

我希望得到所有喜欢特定帖子的用户以及特定用户喜欢的所有帖子,并且我有一个喜欢和不同的按钮,当用户点击帖子上的按钮时,我将信息保存到这些表格,这是有效的但是当用户单击不同的按钮时,如何从下面的表中删除该特定行

CREATE TABLE social.post_likedby_user (
   userid bigint,
   timeuuid timestamp,
   postid bigint,
   content text,
   creation_date text,
   liked boolean,
   PRIMARY KEY (userid, timeuuid, postid)
)  WITH CLUSTERING ORDER BY (timeuuid DESC);

CREATE TABLE social.user_likeby_post (
   postid bigint,
   timeuuid timestamp,
   userid bigint,
   name text,
   username text,
   email text,
   phone text,
   birthday text,
   PRIMARY KEY (postid, timeuuid, userid)
)  WITH CLUSTERING ORDER BY (timeuuid DESC);

我已经尝试了几个查询但没有结果

DELETE FROM post_likedby_user WHERE userid = ? AND postid = ?
DELETE FROM user_likeby_post WHERE postid = ? AND userid = ?

如何在不知道timeuuid的情况下查询此表。我认为问题是timeuuid列,我不想使用ALLOW FILTERING,因为我读到它对生产不利

答案

在这种情况下,我们还需要一个表post_timeuuids:

CREATE TABLE social.post_timeuuids (
   userid bigint,
   postid bigint,
   timeuuid timestamp,
   PRIMARY KEY (userid, postid, timeuuid)
) 

因此,要查询timeuuid值,请运行以下查询:

select timeuuid from post_timeuuids where userid = ? and postid = ?;

现在您可以使用这些值来运行删除查询:

DELETE FROM post_likedby_user WHERE userid = ? AND timeuuid = ? AND postid = ? 

或者作为替代而不是删除,您只需从“post_timeuuids”表中删除即可。在应用程序端,您应该考虑“post_timeuuids”中的数据:如果没有时间戳存在,则意味着使用对该特定帖子没有“喜欢”。

下面的文章解释了为什么在没有'timeuuid'聚类键的情况下无法运行post_likedby_user的查询

https://rollerweblogger.org/roller/entry/composite_keys_in_cassandra

以上是关于Cassandra,查询主键,跳过聚类列(timeuuid)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Cassandra 不允许通过 IN 限制查询集群键?

在 BigQuery python api 中设置聚类列

在BigQuery python api中设置聚类列

不能限制聚类列“状态”(前面的列“日期时间”受非 EQ 关系限制

所有聚类列的总和太长 (65927 > 65535)

Cassandra 复合聚类键和排序查询