2016-04-15 60 views
0

我從datastax使用Cassandra驅動程序用於java。我知道我在一張桌子上有兩千萬行。當我使用Cassandra終止中間連接?

Select * from table 

大約800000行被提取後,進程停止。

在我的Java代碼

futureResults = session.executeAsync(statement); 
ResultSet results = futureResults.getUninterruptibly(); 
for (Row row : results) { 

} 

也許我做錯了什麼?

+0

您在此期間檢查了cassandra.log和system.log上的日誌嗎?它可以給你潛在的見解。另一個問題可能是客戶端和cassandra節點之間的網絡問題。 –

+0

程序正確終止,這意味着ResultSet中沒有更多行要繼續。我認爲你對網絡問題可能是正確的,我會嘗試增加連接重試 – Xitrum

回答

3

你在做什麼是與卡桑德拉相當常見的反模式。由於每個數據分區都位於羣集的不同部分,因此該查詢將創建一個以一個協調器爲中心的大規模分散/聚集。最終事情開始超時,協調員將發出錯誤。快速查看日誌應該可以找到它。

幾乎總是,一個選擇查詢應該包含一個局部的分區鍵。如果這是不可能的,切換到能有效掃描每個節點的批處理是最好的。 Cassandra的Spark連接器非常適合這種訪問模式。

+0

因此,這意味着我的表的數據可能散佈在羣集中的所有節點上。我試圖找到我如何得到我的表的所有分區鍵,但我找不到我能理解的答案。你知道我怎麼可以用nodetool或cqls存檔?謝謝 – Xitrum

+0

您正在尋找類似sqldump的東西來導出整個表格嗎? –

+0

我正在尋找一種方法來提取我的表的分區鍵,所以我可以按照您的建議在我的select語句中使用它。 – Xitrum