Database Cassandra和Range查询中的虚拟分区键

Database Cassandra和Range查询中的虚拟分区键,database,cassandra,Database,Cassandra,我刚接触卡桑德拉,在我所有的研究中,我发现很难找到一个像样的解决方案。我的最终目标是能够对我的数据进行范围查询,但是对于我想要进行的查询类型,我没有一个好的分区键 假设我有用户、评论和他们创建的时间戳,我想搜索一个范围,就像特定日期之前的所有评论一样。我知道集群键的范围查询很容易做到,但是我不能让分区键成为用户,因为他们会有很多评论,这会导致一些问题,比如无界分区和倾斜分区 所以我发现很难找到一个合适的分区键。我发现的一个伪解决方案是伪列。如果可以的话: ((users,dummy),comme

我刚接触卡桑德拉,在我所有的研究中,我发现很难找到一个像样的解决方案。我的最终目标是能够对我的数据进行范围查询,但是对于我想要进行的查询类型,我没有一个好的分区键

假设我有用户、评论和他们创建的时间戳,我想搜索一个范围,就像特定日期之前的所有评论一样。我知道集群键的范围查询很容易做到,但是我不能让分区键成为用户,因为他们会有很多评论,这会导致一些问题,比如无界分区和倾斜分区

所以我发现很难找到一个合适的分区键。我发现的一个伪解决方案是伪列。如果可以的话:

((users,dummy),comments,timestamp)
作为我的主键,这将帮助我,但这也会导致无限分区。现在我的问题是,如果没有更好的方法来实现这一点,那么可以计算我的分区何时达到我读取的最大理想大小(100mb)并更改虚拟分区吗

如果我正确理解了这个概念,就像切分一样:我有
((用户,shard1)…)
在我的逻辑中,当我注意到shard 1达到所需的最大容量时,我开始将值放入下一个shard(shard2)中,依此类推。然后我有一个类似于(用户,碎片)的表,它给出了每个用户拥有的碎片数量


这可能吗?我在Cassandra中遇到了这个问题,我正在寻找最佳可行的解决方案,或者如果真的没有任何解决方案。

您是在试图查找时间戳范围内特定用户的所有注释,还是在时间戳范围内查找所有用户的所有注释?如果是第一个选项,一个选项可能是包含一个日期没有时间的列(例如yyyymmdd)。PK可能看起来像:((用户,dateWithoutTime)、时间戳、注释)。对于范围内的每个日期,您都会对表发出单独的查询(您也可以使用IN子句,但效率不高)。您甚至可以使用时间戳范围来缩小范围。如果你想要所有用户的所有评论,你就有更大的问题。不幸的是,我想要所有用户的所有评论。那么你的PK可能是:(dateWithoutTime,timestamp,users,comments)。在这种情况下,如果您希望参与时/分/秒,您将为每个日期触发一个查询,包括您的时间戳。不是最大的,但它会限制分区,使它们不会无限增长,并且您还可以使用时间戳的范围。您在这个范围内谈论了多少天—您正在查看的数据值是几天、几周、几个月?显然,每天都有单独的查询是痛苦的,但它是最有效的(v.s.single IN子句)。几个月,在某些情况下几乎是一年