2016-04-14 92 views
1

在cassandra db中,我有一个有1000万行的表。如果我使用正常的选择查询,我只能有一个连接到cassandra来获取数据。是否可以使用行号进行选择查询?从cassandra提取数据的部分

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

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

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

回答

2

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

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

假设您有一个六节点群集。该Murmur3主令牌范围为6节点群集是这样的:

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 

如果我有一个表叫abcpkey分区键,想查询节点2上该表中的所有行,我的查询应该是这样的:

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

如果一整行的价值实在是太多了(我猜测,这将是),你可以在你的平分令牌范围,直到行的数量都是可管理的工作。请记住,选择1000万行并不是Cassandra特别擅长的,所以可能需要一些尝试。

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