2017-02-04 71 views
2

我有一個包含Cassandra中約500M記錄的表。我需要傳遞所有這些記錄並進行一些處理,然後將處理後的記錄插入其他表中。由於內存問題,我需要檢索這些記錄塊。有沒有辦法做到這一點? 例如,在第一個塊中,我需要獲得第一個2M,然後在第二個塊中,我需要獲取第二個2M,依此類推。從Cassandra檢索數據塊

+0

我個人不確定cassandra是否適合這些用途的數據庫.. – Andremoniy

+0

感謝您的回答,但爲什麼? –

+1

這不是一個答案,只是評論。恕我直言Cassandra旨在快速插入操作,更新計數器,並按鍵序列搜索少量的行,而不是簡單地通過數百萬行。 – Andremoniy

回答

2

如果你只是運行一個正規的execute方法,你會得到一個ResultSet。正如文檔中提到的那樣:

ResultSet的行檢索通常是分頁的(第一頁結果被提取,下一個只在第一個結果被使用後才被提取) 。頁面的大小可以通過QueryOptions.setFetchSize(int)全局配置,也可以通過Statement.setFetchSize(int)配置每個語句。雖然新頁面在需要時自動(並且透明地)被提取,但可以通過fetchMoreResults()儘早強制檢索下一頁。

因此,您可以運行查詢來詢問所有數據,並將獲取大小設置爲您的塊大小。然後遍歷你的ResultSet,直到你有大量的記錄,處理,插入,然後再次開始迭代。