2016-04-20 54 views
0

我正在設計卡桑德拉的密鑰空間,它將保存關於用戶組的信息。關於它的一些信息:卡桑德拉模式使用集合集合或多行

  • 只有通過請求哪些用戶包含在某個組中並更新組中包含的用戶才能訪問此數據。
  • 閱讀將比寫作更頻繁。
  • 每個組可以包含多達20,000用戶ID

我有我考慮這兩個設計。每組

  1. 多行:該表將具有TEXT類型的兩列和主鍵(組ID,用戶名),並讀取用戶的組將由select * from table where GroupID = {GroupID}完成的,並會返回儘可能多的行,被鍵入該組中有用戶。
  2. 使用Cassandra集合集合的每行一行:該表將包含兩列,即TEXT類型的第一個(GroupID)和SET [TEXT]類型的第二個(用戶標識符),並在Pimary鍵(GroupID)上鍵入。在gorup中讀取用戶將由select * from table where GroupID = {GroupID}完成,並將返回單個行,其中包含UserIDs列集中的用戶標識集。

我找不到很多關於這種情況下更好的設計的文檔。任何想法或利弊兩種情況?

回答

2

對於一組20k用戶ID,我完全避免不惜一切代價使用集合。集合是一個方便的功能,但它們幾乎不像使用傳統CQL數據模型那樣具有所有用戶在單個分區中排序的PRIMARY KEY(GroupID,UserID)。這將很容易推理,易於查詢(可以通過所有組成員查看單個分區和頁面,也可以通過SELECT ... WHERE GroupID=X and UserID=Y來確定用戶是否在組中),並且性能非常高。

0

從Datastax:

When to use collections

Using collections

看起來像你的情況下,使用集合不會碰到允許限值。每個項目UserID可能是< = 64K,並且您有< = 20K條目,它小於最大64K。但是,正如Jeff所說,使用複合鍵,GroupID(查詢列)進行分區,UserID(您從查詢中接收到的值)進行聚類,您的性能可能會好很多。