在cassandra中存储列表

时间:2014-02-25 17:12:00

标签: cassandra

我想在Cassandra中保存一个朋友列表,其中一个用户可能有几百个朋友。我应该将朋友列表(电子邮件ID)存储为Cassandra中的列表或集合,还是应该创建一个单独的表,其中包含user_id和friends列,其中包括所有用户(数百万用户)以及他们的朋友。

如果我使用user_id和friends列创建一个单独的表,那么在检索用户/用户的一个朋友的整个好友列表时性能会下降,因为该表将包含许多记录/行。

1 个答案:

答案 0 :(得分:2)

值得注意的是,Cassandra中的listssets不可迭代。这意味着当您查询它们时,您将返回整个列表或整个集合。如果集合具有高基数,那么这可能会导致查询中出现问题,例如读取超时甚至是堆OOM错误。

由于听起来人们可以拥有的朋友数量没有上限,因此一个选项可能是拥有一个单独的表格,该表格在用户上分区并聚集在朋友身上。

CREATE TABLE user_friends (
  owner_user_id int,
  friend_user_id int,
  PRIMARY KEY(owner_user_id, friend_user_id)
);

这将确保friend_user_id正常,如果朋友数量非常大,将允许您进行客户端分页。它还允许快速检查某人是否是用户的朋友。