问题描述
我想创建一个表格,让用户关注其他用户。在此表中,我需要以下用户的用户ID和后继用户的用户ID。如果有一些用户,那么会有成千上万的用户关注,因此太大了,无法有效地将它们存储在集合中。
如何建模,单个用户的所有关注者都不会位于同一分区中?在意识到此问题之前,我想使用以下用户ID oder,然后再使用用户ID作为分区键,但是随后应该出现热分区问题。
我可以使用带有以下用户ID和后面的用户ID的复合分区键来解决热分区问题吗?还有什么可以解决这个问题?
我的2个主要查询是获取用户的所有后续用户并获取用户的所有关注用户。 如果我使用具有这两个ID的复合分区键,我什至可以查询上述内容吗?还是我需要同时查询两个ID,所以不可能吗?
谢谢您的帮助。
解决方法
这是社交图谱中的一个常见问题,其中某些人比其他人拥有数百万的追随者。我倾向于以泰勒·斯威夫特(Taylor Swift)和巴拉克·奥巴马(Barrack Obama)为例。
许多社交平台通过将它们隔离在单独的数据存储中来处理此“超级节点”问题,以便当有人穿越超级节点时主存储库不会排队。
这确实意味着您需要在应用程序中进行处理,以便您的应用程序需要根据超级用户/超级节点的参考表检查用户,以便随后在子表中进行查找,而不是在子表中进行查找主表。干杯!
,您应该查看存储桶解决方案。在存储桶中,您引入了一个附加键作为分区键的一部分。例如,您可以使用这样的数据模型
CREATE TABLE user_followers (
user_id int,bucket_id int,follower_id int,user_name text,PRIMARY KEY ((user_id,bucket_id)));
这是user_id和bucket_id是分区键。要查找所有分区,您应该事先了解bucket_ids。