不同分区键的 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 没有很好的方法来实现这一点,因为:

  1. 分区键唯一确定存储数据的节点。 IE。应存在对应于 where 子句的所有分区键。
  2. 二级索引不适合具有高基数的键(在这种情况下,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 进行分区会导致分区过大,可以使用其他分桶技术。