不同分区键的 Cassandra 重复表?
Cassandra duplicate tables for different partition keys?
我有以下 table,称为 inbox_items:
USE zwoop_chat
CREATE TABLE IF NOT EXISTS inbox_items (
postId text,
userId text,
partnerId text,
fromUserId text,
fromNickName text,
fromAvatar text,
toUserId text,
toNickName text,
toAvatar text,
unread int static,
lastMessage text,
lastMessageDate timestamp,
PRIMARY KEY ((postId, userId), lastMessageDate)
) WITH CLUSTERING ORDER BY (lastMessageDate DESC);
这个 table 的问题是我想通过 postId 和 userId 以及仅通过 userId 来查询它。
换句话说,我每个 post 都有一个收件箱,但每个用户也有一个收件箱。
Afaik 没有很好的方法来实现这一点,因为:
- 分区键唯一确定存储数据的节点。 IE。应存在对应于 where 子句的所有分区键。
- 二级索引不适合具有高基数的键(在这种情况下,postId 具有高基数)
我目前看到的解决方案是用不同的键复制table。
不过,这感觉有点矫枉过正。
我是否缺少更好的解决方案?
假设单独按用户 ID 分区不会生成太大的分区,您按用户 ID 分区,并且在集群键中有 postid。您指定要通过 :
进行查询
The problem with this table is that I want to query it, both by postId and userId, as well as by userId only.
因此在这种情况下,您不需要分区键中的 postid,而是集群键中的 postid。唯一的问题是您是否也打算单独通过 postid 进行查询 - 但没有提到这一点。
如果按用户 ID 进行分区会导致分区过大,可以使用其他分桶技术。
我有以下 table,称为 inbox_items:
USE zwoop_chat
CREATE TABLE IF NOT EXISTS inbox_items (
postId text,
userId text,
partnerId text,
fromUserId text,
fromNickName text,
fromAvatar text,
toUserId text,
toNickName text,
toAvatar text,
unread int static,
lastMessage text,
lastMessageDate timestamp,
PRIMARY KEY ((postId, userId), lastMessageDate)
) WITH CLUSTERING ORDER BY (lastMessageDate DESC);
这个 table 的问题是我想通过 postId 和 userId 以及仅通过 userId 来查询它。
换句话说,我每个 post 都有一个收件箱,但每个用户也有一个收件箱。
Afaik 没有很好的方法来实现这一点,因为:
- 分区键唯一确定存储数据的节点。 IE。应存在对应于 where 子句的所有分区键。
- 二级索引不适合具有高基数的键(在这种情况下,postId 具有高基数)
我目前看到的解决方案是用不同的键复制table。
不过,这感觉有点矫枉过正。
我是否缺少更好的解决方案?
假设单独按用户 ID 分区不会生成太大的分区,您按用户 ID 分区,并且在集群键中有 postid。您指定要通过 :
进行查询The problem with this table is that I want to query it, both by postId and userId, as well as by userId only.
因此在这种情况下,您不需要分区键中的 postid,而是集群键中的 postid。唯一的问题是您是否也打算单独通过 postid 进行查询 - 但没有提到这一点。
如果按用户 ID 进行分区会导致分区过大,可以使用其他分桶技术。