定位cassandra分区节点

Locating cassandra partition node

我正在使用带有 datastax 驱动程序的 Cassandra 数据库。我需要从 Cassandra 批量读取大约 2000 行的内容。我的用例是这样的,我在请求中获得了 id 列表,这些 id 是我在 Cassandra 中的分区键。我想知道生成 2000 个线程并从 Cassandra 并行获取数据是否是个好主意(在这种情况下,读取数据将有效,因为它只进入一个节点)或者是否有可能找出一种方法来分组 ID住在同一个节点上,这样我就可以优化读取(现在在这种情况下,我需要产生更少的线程和更少的 Cassandra 开销)。请让我知道除了产生多个线程之外,我能否以有效的方式实现批量读取。谢谢! PS:从 Cassandra 返回的数据并没有大到导致 OOM。

is it possible to figure out a way to group ids which live in same node

是的,您可以 get Token Ranges for cassandra cluster and check occurrence for tokens 为范围内的 ID,然后按节点对 ID 进行分组。

另外:

不需要产生很多线程,datastax 驱动程序提供 asynchronous api,我们在项目中使用它来并行执行大量查询并且它工作得很好,但从性能角度来看并不出色查看。

需要执行数千个请求来读取数据表明数据模型不合适。您应该围绕查询实施数据模型,以最大限度地减少请求数量以获得良好的性能。

更新:

我想,你可以使用方法 Metadata.newToken to calculate token on driver side or directly get replicas with Metadata.getReplicas 对于给定的分区键。 但是在它之前 serialize the partition key 根据它的类型和协议版本