Cassandra中的IN关系是否对查询不利?
给定CQL中以下选择的示例:
SELECT * FROM tickets WHERE ID IN (1,2,3,4)
给定ID是分区键,使用IN关系是否比执行多个查询更好?或者没有区别?
回答:
我记得不久后有人在Cassandra用户邮件列表中回答了这个问题,但是现在我找不到确切的消息。具有讽刺意味的是,Cassandra传播者Rebecca
Mills刚刚发表了一篇文章解决了这个问题(使用Cassandra驱动程序时应该做的事情
……要点#13和#22)。但是答案是“是”,在某些情况下,多个并行查询要比使用an更快IN
。根本原因可以在DataStax
SELECT文档中找到。
…使用IN可能会降低性能,因为通常必须查询许多节点。例如,在一个具有30个节点,复制因子为3且一致性级别为LOCAL_QUORUM的单个本地数据中心群集中,单个键查询针对两个节点,但是如果查询使用IN条件,则将被查询的节点可能更高,最多可达20个节点,具体取决于密钥在令牌范围内的位置。
因此,基于此,随着群集的扩大,这似乎将成为一个更大的问题。
因此,解决此问题的最佳方法(根本不必使用IN
)是重新考虑此查询的数据模型。在不了解您的架构太多的情况下,也许存在票证ID
1、2、3和4共享的属性(列值)。也许使用了级别或组之类的东西(如果票证用于特定的场所),甚至而是一个事件(id)。
基本上,虽然使用唯一的高基数标识符对数据进行分区 听起来
是个好主意,但实际上,以后(在Cassandra中)查询数据变得更加困难。如果您可以提出另一列来对数据进行分区,那么在这种情况下肯定会对您有所帮助。无论如何,创建一个新的特定列族(表)来处理这些行的查询将是比使用IN
或多个查询更好的方法。
以上是 Cassandra中的IN关系是否对查询不利? 的全部内容, 来源链接: utcz.com/qa/416745.html