2012-01-30 86 views
1

我目前正在努力使用與Cassandra一起使用的正確數據格式。我想這是因爲它提供的額外深度超過標準鍵值存儲。卡桑德拉的數據存儲器

我的數據格式目前定義是這樣的:

  • Keyspaces針對不同的應用。
  • 不同應用部分的列族。
  • 在這些列系列中我有數據。

大部分數據存儲在單個柱族內的格式爲:

Key: UUID-1|UUID-2|UUID-3 
Value: Array of PHP Values 

插入幾個100.000項之後(各< 1KB)我看到性能退化讀取數據時。

從我的理解中,Column家族應該正是我的數據的主要部分的存儲位置。將我的大部分數據放在一個Column Family中而不是幾個不同的數據中不應該成爲關鍵。

我應該考慮將我的數據分割成不同的列族還是方法正確,但是其他原因可能是問題的原因?


編輯回答的評論DNA的問題:

我比較需要我開始我的測試之前已插入一個鍵讀取時間。

當數據庫仍然爲空時,測試密鑰始終在< 0.0010s內始終讀取> 1.000次。寫入測試數據的結構是這樣的:

  • 包含當前Unix時間戳
由內置有5個字符+ 20個數字
  • 有一列(1個字節)一個鍵標識的行

    我添加了條目並重新運行相同的讀取測試以比較讀取時間。讀次我在這裏列出的是較低的數字:

    Entries | Read Time 
         0 | 0.0010 
        150.000 | 0.0013 
        300.000 | 0.0014 
        500.000 | 0.0016 
        750.000 | 0.0019 
    1.000.000 | 0.0022 
    

    因爲這僅僅是基本的測試,這是隻在亞馬遜單個節點(EC2實例)上運行。對於每250.000個新行,讀取時間似乎會增加約0.0003秒。

    我知道這些數字非常小,它們很棒,但讀取時間的線性增長並不是我所期望的。

    我打算將大量的小型條目移植到Cassandra上。它目前包含約750億條目,它收集的新數據集的數量非常快,讀取時間線性增加,因此讓我懷疑是否正朝着正確的方向前進。

  • +0

    你看到了什麼樣的表現,你期待什麼表現?無論您使用一個CF還是多個CF,通常取決於您要存儲的數據的結構以及所需的查詢類型。你能否詳細說明你的數據結構以及你正在讀取的查詢類型?你在使用什麼版本的Cassandra,在什麼硬件上? – DNA 2012-01-30 23:01:31

    +0

    @DNA:我正在保存的PHP值數組包含一些字符串(大約10-20,每個長度爲10-500)。我還編輯了我的問題(希望)更好地解釋我爲什麼問這個問題以及我的「擔憂」來自哪裏。我正在測試環境中使用0.7.6-2版本。 – favo 2012-01-31 19:04:32

    回答

    2

    感謝您更新問題。

    您應該閱讀這篇關於Netflix benchmarking的文章。

    行數相對較少的基準測試不會告訴您任何有關大型數據集的可伸縮性的信息。對數百萬行進行這種測試並不困難。

    如果您現在只是測試,那麼您應該升級到1.0分支(目前爲1.0.7),因爲它明顯快於0.7。

    雲服務器的性能可能並不能真正代表真正的本地硬件的性能 - 儘管雲服務器對於集羣測試來說是一個好主意。請參閱http://wiki.apache.org/cassandra/CassandraHardware

    如果讀取延遲是您的關鍵問題,那麼請確保您熟悉Cassandra中的緩存設置(keys_cached和rows_cached) - 例如,請參閱http://wiki.apache.org/cassandra/StorageConfiguration

    +1

    謝謝你的Netflix文章。我在數據庫中投入了更多的數據,並且在數百萬條記錄後似乎不再增加。大約有100,000個條目,讀取時間仍然約爲0.002秒。今天晚些時候,我升級到最新的Cassandra版本並重新運行測試。閱讀時間約在0.0016左右。線性增長似乎只是在達到「大小合適」的數據後停止。 – favo 2012-02-01 19:28:01