2011-06-15 40 views
1

最近,我提出了從單列系列中的單排高效檢索多個色譜柱的問題。目前,我使用Pelops作爲Cassandra API。問題是如果我想從幾個範圍獲取列,該怎麼做。如果我能夠立刻從少數人那裏獲得專欄的專欄,那很容易,但我不能。高效檢索色譜柱系列

例如,我有一個家庭,列數很多。其中一些有一個共同的前綴,比如說「group/xxx」,其中xxx是一個標識符。還有幾列以「a」,「b」,「c」命名。現在,我想將這些列合併到一起,因此我必須定義兩個切片並調用getColumnsFromRow兩次。

如何解決這個問題的效率? Cassandra以某種方式緩存最近檢索到的列家族,並且第二次調用getColumnsFromRow將不會再次搜索它嗎?

回答

4

因爲您已經推出了自己的複合列名稱,所以基本上必須發出多個get_slice調用。

這不是一個非常大的交易效率明智,因爲這些列是在同一行,如果你正確地選擇你的比較器,應該是一個單一的磁盤尋道。對同一行的後續查詢應該打到操作系統磁盤緩存中的這部分表(操作系統級別,與Cassandra無關)。

行緩存設計用於經常訪問整個內容的小行(如序列化對象或類似行爲)。他們實際上會爲這樣的大型行加上大量的內存壓力。我建議爲此CF禁用行緩存。

如果你發現你需要,你可以通過作如下調整做一些額外的調整: - 向下read_repair_chance - 啓用「結果拼接」:https://github.com/apache/cassandra/blob/cassandra-0.7.0/conf/cassandra.yaml#L229-236

這將讓你的0S的文件系統緩存工作更高效,因爲相同的主機將處理相同的查詢,並且後續的片將在理想情況下在同一SSTable中並因此在FS緩存中對該行的各部分進行操作。另外,請考慮免費下載OpsCenter(http://www.datastax.com/opscenter),然後在您嘗試使用該產品時觀察列系列的指標(請參見http://datastax.com/opscenter)。不同的選擇。這將爲您提供一種專門爲您的數據構建查詢的最有效方式。

+0

詳細闡述Nate的第一點:如果您使用Cassandra的內置超級列作爲分組機制,那麼一次檢索多個組會很容易。 – jbellis 2011-06-16 14:33:31

+0

這是一個非常有用的答案。非常感謝你。 – 2011-06-17 07:42:14

1

Cassandra確實有可選的行緩存,但如果行很大,這可能會花費很多內存,所以可能不可取。

行高速緩存節省了更多的時間, 但必須:

http://wiki.apache.org/cassandra/StorageConfiguration說(行緩存,每個ColumnFamily中使用rows_cached,row_cache_save_period_in_seconds和preload_row_cache在存儲配置proeprties配置)存儲其行數的整個值,所以它極其空間密集。如果您有熱點行或 靜態行,最好只使用行緩存 。