按部分从 cassandra 中获取数据

Fetch data from cassandra by portion

在 cassandra db 中,我有一个包含 1000 万行的 table。如果我使用普通的 select 查询,我只能与 cassandra 建立 1 个连接来获取数据。是否可以使用行号进行 select 查询?

E.g. Select * from abc where row = x to row = y ?

所以我可以有 10 个不同的线程,所以每个线程将负责获取 100 万行。如果可能的话,我的线程数是否应该等于集群中的节点数?

我正在使用 java datastax 驱动程序连接到我的 cassandra 集群。

Is it possible to do select query with row number ?

否,但可以根据分区键的哈希令牌值执行范围查询。

假设您有一个六节点集群。 6 节点集群的 Murmur3 主要令牌范围如下所示:

node   start range              end range
1)     9223372036854775808 to  -9223372036854775808
2)    -9223372036854775807 to  -5534023222112865485
3)    -5534023222112865484 to  -1844674407370955162
4)    -1844674407370955161 to   1844674407370955161
5)     1844674407370955162 to   5534023222112865484
6)     5534023222112865485 to   9223372036854775807

如果我有一个名为 abc 的 table,其分区键为 pkey,并且想查询节点 2 上该 table 的所有行,我的查询看起来像这样:

SELECT * FROM abc
  WHERE token(pkey) >   9223372036854775808
    AND token(pkey) <= -5534023222112865485;

如果整行的值太多(我猜会的),您可以将标记范围平分,直到行数变得易于管理。请记住,选择 1000 万行并不是 Cassandra 设计的特别擅长的事情,因此可能需要尝试几次。

至于线程数,也可能需要反复试验。但是每个节点一个线程听起来是一个合理的起点。