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

标签 database cassandra nosql datastax

我还是 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

关于database - Cassandra,查询主键,跳过聚类列(timeuuid),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055455/

相关文章:

cassandra - 如何通过在 Cassandra 中设置单独的生存时间 (TTL) 属性来使集合中的每个元素过期?

windows - 在 Windows 7 上安装 Cassandra

cassandra - 在 Cassandra 中如何表示金钱?

mongodb - mongodb 的唯一 ID

mysql - 我的 SQL 连接超过 5 个表

database - 如何在3个步骤中处理多个页面以保存用户数据,其中每个步骤都是一个新界面,然后将它们保存在一起?

mysql - 将 MyISAM 转换为 InnoDB 数据库

java - 使用 NoSQL 数据库的抽象框架

database - 类似于cassandra的最终一致文档存储数据库

c# - 将对象保存到数据库?