2011-09-13 15 views
1

我寫了一個「普查」方案,通過在一列家庭和每一行中的所有行迭代計算的列,記錄的最大值和行鍵。我一直花更多時間在Hector客戶端上,但也寫了一個Pelops客戶端來測試。計數列,速度很慢CountQuery VS SliceQuery操作

基本流程是使用使用RangeSlicesQuery通過行迭代,然後在每行中,使用SliceQuery迭代通過和收集統計資料。 Pelops中的工作原理類似,只是不同的API。缺點是需要手動進行緩衝,緩衝採摘尺寸行和列...我現在的數據是1200萬行,其中最大列數〜25K,所以是需要一段時間......我目前的配置,我越來越>每秒25K行。

尋找方法來改善,並發現Hector的CountQuery(我假設,使用節儉客戶端get_count())。我以爲這會更快只是迭代鍵(使用RangeSlicesQuery.setReturnKeysOnly()),然後在每行按鍵重新使用CountQuery,我修改了代碼。

這不僅是慢,但慢30倍! (每秒處理只有900行)...

是否有更好的方法來計算列?

回答

1

不知道發生了什麼事情赫克託 - 我希望它是大約2倍速度較慢,不30X慢。

更一般地,保持使用計數器列中的非規範化數可能比一個完整的CF更好的掃描:http://www.datastax.com/dev/blog/whats-new-in-cassandra-0-8-part-2-counters

+0

我認爲計數器列跟蹤,但隨後隨着數據更新,我會檢查,看看如果列已經存在,則在更新計數之前。普查不會是一個高頻率的任務,只是偶爾使用...但我想我會避免CountQuery。 – libjack

+0

所以,雖然不理想,恕我直言,計數器列確實是更好的方式來計算。 – libjack