考虑存储用户及其联系人的问题。大约有1亿用户,每个用户有几百个联系人,平均联系人的大小为1kb。可能存在一些具有太多联系人(> 5000)的用户,并且可能存在比1kb的平均值大很多(例如10倍)的一些联系人。用户主动添加联系人,而不是经常删除他们。联系人不是指向其他用户的指针,而只是一组信息。
有两种查询 -
我在考虑这样的联系人表 -
CREATE TABLE contacts {
user_name text,
contact_name text,
contact_details map<text, text>,
PRIMARY KEY ( (user_name, contact_name) )
// ^ Notice the composite primary key
}
复合主键的选择取决于每个用户的联系人数量和大小。我想要每行一个联系人。
此表可轻松解决查询给定用户和联系人姓名的联系人详细信息的问题。
我正在寻找解决第二个问题的建议。
我心中有两个选项(有相关问题) -
一般情况下,是否存在关于查找一个项目(如此处的用户)引用的许多项目(如此处的联系人)的指导原则,而不是在宽行或非最佳索引中运行?
答案 0 :(得分:0)
创建索引本身应该不是问题恕我直言。平均基数为200听起来不错。
其他选项是您维护自己的索引,如: CREATE TABLE contacts_by_user( user_name文本PRIMARY KEY, 联系人设定 )
虽然您的索引和联系人可能会不同步。