2016-04-14 89 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特別擅長的,所以可能需要一些嘗試。

至於線程數,也可能需要一些試驗和錯誤。但是每個節點有一個線程聽起來像是一個合理的起點。