gpt4 book ai didi

cassandra - TokenAware 策略 Cassandra 和一个查询中的多个节点

转载 作者:行者123 更新时间:2023-12-03 08:20:36 25 4
gpt4 key购买 nike

如果我们的查询包含最终出现在不同节点上的多个 token ,会发生什么情况?客户端是否可能在节点上运行多个同步或异步查询?

示例:

//Our query
SELECT * FROM keyspace1.standard1 WHERE key = 1 or key = 2 or key = 3;

//Client change our query to multiple queries depends on the token ranges and run them sync or async.
SELECT * FROM keyspace1.standrad1 WHERE key = 1 or key = 3; //Token On node X
SELECT * FROM keyspace1.standard1 WHERE key = 3; //token On node Y

示例2:

 //Our Query
SELECT * FROM kspc.standard1;

//Client Change our query to multiple queries on the token ranges and run them sync or async.
SELECT * FROM kspc.standard1 WHERE token(key) > [start range node1] and token(key) < [end range node1];
SELECT * FROM kspc.standard1 WHERE token(key) > [start range node2] and token(key) < [end range node2];
and ...

最佳答案

正如 Manish 提到的,如果查询包含多个分区,那么 token 感知策略将不会选择任何内容,而是将查询发送到集群中的任何节点(对于未准备的查询和 DDL,行为相同)。一般来说,这是一种反模式,因为它会给节点带来更多负载,因此应该避免。但如果您确实需要,那么您可以强制驱动程序将查询发送到拥有特定分区键的节点之一。在Java驱动程序3.x中有一个函数statement.setRoutingKey,对于Java驱动程序4.x应该是类似的东西。对于其他驱动程序应该有类似的东西,但可能不是全部。

对于第二类查询 - 是相同的,默认情况下驱动程序无法找到将查询发送到哪个节点,并且应显式设置路由键。但一般来说,全表扫描可能很棘手,因为您需要处理下限和上限的条件,并且您不能期望 token 范围恰好从下限开始 - 这可能是 token 范围从上限附近开始的情况& 略高于下限 - 这是我经常看到的典型错误。如果您感兴趣,我有一个如何使用 Java 执行全表扫描的示例(它使用与 Spark Cassandra ConnectorDSBulk 相同的算法) - 主要部分是 this cycle超过可用的 token 范围。但是,如果您正在考虑自己编写全表扫描,请考虑使用 DSBulk作为 SDK 的部件 - 您需要查看 partitioner module这是专门为此设计的。

关于cassandra - TokenAware 策略 Cassandra 和一个查询中的多个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67979591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com