2015-06-17 35 views
0

我想要從Cassandra中存儲和檢索50MB到100MB範圍內的值。Cassandra:存儲和檢索大尺寸值(50MB到100 MB)

根據文檔,當列值大小小於10MB時,Cassandra運行良好。參考here

我的表如下。有沒有不同的方法呢?

CREATE TABLE analysis (
    prod_id text, 
    analyzed_time timestamp, 
    analysis text, 
    PRIMARY KEY (slno, analyzed_time) 
) WITH CLUSTERING ORDER BY (analyzed_time DESC) 

回答

1

大的值可能會產生問題,如協調需要他們返回到客戶端的答案之前,緩衝上堆的每一行一個問題。無法傳輸分析文本值。

內部Cassandra也沒有優化來很好地處理這種用例,你將不得不調整很多設置以避免諸如shutty所描述的問題。

4

至於我自己的經驗,雖然理論上卡桑德拉可以處理大量的斑點,但實際上它可能是真的很痛苦。至於我過去的一個項目,我們在C *中存儲了3KB至100kb的protobuf blob,但其中一些(〜0.001%)的大小高達150MB。這造成了問題:

  • 寫超時。默認情況下,C *有10秒的寫入超時,這對於大型的blob來說實在是不夠的。
  • 閱讀超時。讀取超時,讀取修復,提示切換超時等等同樣的問題。您必須調試所有這些可能的故障並提出所有這些超時。 C *必須從緩慢的磁盤讀取整個重行到RAM。

我個人建議不要使用C *作爲大塊,因爲它不是很有效。有替代方案:

  • 分佈式文件系統,如HDFS。將C *文件的URL和文件內容存儲在HDFS中。
  • DSE(Commercial C * distro)擁有自己的分佈式FS,稱爲CFS,它可以很好地處理大型文件。
  • 重新思考你的模式,以便獲得更輕的行。但它實際上取決於你當前的任務(而且也沒有在它原來的問題足夠的信息)