【发布时间】:2014-06-20 18:53:31
【问题描述】:
我的应用程序功能与 Cassandra 集成时遇到了一点问题。我正在尝试为我的users 创建内容提要。用户可以创建帖子,这些帖子又具有user_id 字段。我将 Redis 用于整个社交图,并将 Cassandra 列仅用于对象。在 Redis 中,用户 1 有一个名为 user:1:followers 的集合,其中包含他/她的所有关注者 ID。这些 follower id 对应于 users 表中的 Cassandra ids 和 posts 表中的 user_ids。
我的目标最初是简单地将这个 Redis 集中的所有 user_ids 插入一个查询中,该查询将使用 FROM posts WHERE user_id IN (user_ids here) 并从二级索引 user_id 中获取所有帖子。问题是 Cassandra 故意不在二级索引中使用 support IN 运算符,因为该索引会强制 Cassandra 在其所有节点中搜索该值。我只能看到两个选项:为帖子 ID 创建一个 user:1:follow_feed 的 Redis 列表,然后在单个查询中搜索 Cassandra 的主索引以查找这些帖子,或者保持我现在拥有的方式并运行user:1:follower 集合中每个 user_id 的单独查询。
我非常反对第一个选项,因为我在 Redis 中已经拥有大量的图形数据,而这个选项会为每个用户添加一个新列表。第二种方式更糟糕。我会在 Cassandra 上放置大量读取负载,并且需要很长时间才能为一组 id 运行单独的查询。就我所见,我有点卡在岩石和坚硬的地方之间。有没有办法查询具有多个值的二级索引?如果没有,与更多 Redis 列表或多个 Cassandra 查询的选项相比,是否有更有效的方式来加载这些内容提要(RAM 和速度方面)?提前致谢。
【问题讨论】: