Cassandra 4.0使用Java驱动程序进行多重选择。

3
尝试在单个批次中发送多个选择失败,错误消息如下:
“Invalid statement in batch: only UPDATE, INSERT and DELETE statements are allowed.”
最佳方式是发送多个不同的查询(例如id = x,id = y,id = z)。
1个回答

1

对于选择操作,这是无法实现的,而且在我看来也没有意义。您需要将每个查询作为单独的请求发送并收集结果。

如果where条件“相同”,则可以使用IN运算符,尽管可能会增加协调器的负载。例如:where id IN (x, y, z)


为什么不呢?我可以使用Dynamodb(我正在尝试迁移)来完成这个任务。实际上,我只想发送一堆查询,其实是一个主键列表(分区键+一个聚簇键),并在单个调用中获取记录。 - Doron Levi
关于IN的更新请参见。但是,它在多列情况下效果不佳。此外,单独的查询将更快,因为请求将被发送到保存数据的节点。 - Alex Ott
谢谢Alex,为了明确一下,根据你的经验,是发送100个单独的请求进行单个选择更具可扩展性,还是使用id IN(id1,id2 ... id100)进行选择? - Doron Levi
是的,单个选择可能更好 - 但在实现方面更加困难。在内部,IN 的工作方式如下 - 查询被发送到随机节点(因为没有路由键),该节点将其拆分为单独的查询,这些查询被发送到相应的节点,等待所有结果,然后将数据返回给驱动程序。因此,不需要网络跳跃和等待时间。 - Alex Ott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接