2013-07-11 41 views
0

所以我需要一個可以爲大約3億用戶存儲信息的數據庫。每個用戶都有兩個向量:其5種喜愛的物品,和他們的5名最相似的用戶(這些用戶也包含在用戶設定)用於多對多陣列關係的cassandra模式數據設計

例如:

preferences     users 

user | item   user | user 
--------------   -------------- 
user1 | item1   user1 | user2 
user1 | item2   user1 | user4 
user1 | item3   user2 | user8 
user2 | item3    . . . 
user2 | item4 
. . . 

所以基本上我需要兩個表,這兩個多多種關係,而且都相對較大。 我一直在探索卡桑德拉(但我打開其他解決方案),我想知道如何定義架構,以及我需要什麼類型的索引來優化和正常工作。

我需要在兩種方式查詢:當然

1.By用戶,並通過任何項目
2.在他們的名單。 (所以我可以得到一個具有相同喜歡的項目的用戶列表)

我已經設置了cassandra並開始搞亂它,但我不能甚至讓列表工作,因爲我需要'複合'主鍵?我不明白爲什麼。

任何幫助/推在正確的方向是非常感謝。

謝謝!

回答

1

我不確定你是否已經充分描述了你的用例。首先定義您的關鍵設計的訪問模式最終是用NoSQL數據庫定義您的工作負載特徵的。例如,您是否必須根據某些地理位置或沿着這些線路進行搜索,或者這很簡單,可以抓取1位用戶以及他最喜歡的商品和/或他的類似用戶。

根據您所描述的內容,您應該只需爲user_ids創建一個keyspace,然後您的值可以是「收藏項」的非規範化副本和「類似用戶標識」的列表。假設你的下一步行動是對那些類似的用戶做些什麼,你可以從ID列表中快速獲得它們。

重要的一點是您的密鑰有多大(我的意思是字符數/字節數),並且您能夠將它們放入內存中,以便獲得非常快的性能。如果你的機器的密鑰容量有限,那麼你需要規劃一些能容納給定數量密鑰的節點,並讓這些節點在不同的服務器上運行。至少這對於Oracle NoSQL數據庫(ONDB)來說是最重要的部分......我是該團隊的一員。好消息是300M仍然很小。

希望它能幫助,

- 羅伯特

+0

..uh ......讀我自己的崗位實現其有點不清楚。 ONDB具有主要 - 次要關鍵實現,因此所有小部分都集中在本地主要密鑰空間。所以你需要user_id-favorite和user_id-類似於鍵。然後,您可以高效地獲取其中一個或兩個值。重要的一點是選擇一個好的user_id keyspace來獲得良好的分配。 – greeneman

相關問題