【问题标题】:Fetch data from cassandra by portion按部分从 cassandra 中获取数据
【发布时间】:2016-08-06 15:00:05
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java cassandra datastax


    【解决方案1】:

    是否可以使用行号进行选择查询?

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

    假设您有一个六节点集群。 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 且分区键为 pkey 的表,并且想要查询节点 2 上该表的所有行,我的查询将如下所示:

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

    如果整行的价值太多(我猜会如此),您可以将令牌范围一分为二,直到行数变得可管理。请记住,选择 1000 万行并不是 Cassandra 的设计初衷,因此可能需要尝试几次。

    至于线程数,这也可能需要一些试验和错误。但是每个节点一个线程听起来是一个合理的起点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2017-12-06
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多