首先,請原諒我的英文。這不是我的母語。我正在將SQL數據庫移動到Cassandra,但我有一個問題,我無法解決。假設我有一個存儲歌曲的SQL表。每首歌都有一個ID作爲主鍵,它允許訪問所有相關數據,這些數據存儲在由鍵給出的行的字段中。我也有一些索引使用一些不同的標準作爲作者,性別,標題...卡桑德拉:哪個是手工索引的最佳選擇
當我想到移動到卡桑德拉模式,我工作圍繞的想法,我可以創建一個等效的列家庭,其中歌曲ID是行鍵,歌曲屬性是列。然後,我可以創建5或6個手動索引來按作者,標題,性別等進行搜索。作者,標題...將作爲列鍵(添加一些額外的數據以使它們保持唯一性,使用複合列名稱),並且該值將是靜態列族中用於搜索的歌曲ID,其中每行由歌曲ID。
但我在這裏出現我的疑問。什麼更好:每個索引CF只存儲ID還是存儲所有屬性?第一個選項允許我減少必要的內存量,但是我需要(至少)2次讀取才能獲得每首歌曲的屬性。有了第二個選項,我需要更多的內存,因爲每個索引重複一次相同的信息,但通過一次讀取,我可以獲得我需要的所有屬性。我想我可以假設需要額外的內存,如果這將是一個更快的模式,但它會更快?擁有更大的數據庫不會使其工作變慢?或者較慢的操作是由於Cassandra存儲行的方式以及由於2次讀取而搜索由索引CF給出的每一行?我使用第二個選項(在CF中存儲所有作爲「索引」的屬性)計算出我比第一個選項需要大約80%的內存(CFs真的可以作爲索引來查找歌曲的「主要」CF中的正確數據)。
任何幫助將不勝感激。
在此先感謝!
我的直覺說寬行是一種更好的方法,但我想知道一些經歷過類似情況的專家的意見。非常感謝你,Dean。我將檢查PlayOrm的wiki;) – Janbalik
寬行可以進入數百萬列。我肯定不會超過1000萬,也許不會超過幾百萬。我們做了100萬,沒有問題,PlayOrm的連接工作速度與hibernate + postgres一樣快(PlayOrm可以連接分區,分區通常不會超過數百萬行) –
當然。我們已經完成了2個設計,每個我們正在考慮的方法都有一個設計。基於寬行的(我提到的第二個選項)旨在將列數保持在100萬以下。最寬的行大約有100.000 - 200.000列,小於5MB。 – Janbalik