在Azure表服务中建模简单的社交网络

时间:2015-01-24 20:25:15

标签: azure-storage social-networking nosql

使用Azure Table Service的简单社交网站的最佳表格设计是什么?

  1. 该网站可能拥有数百万用户。
  2. 用户需要能够查看系统中所有其他用户的列表,并按相互连接的数量排序。
  3. 用户必须能够查看其连接列表
  4. 用户必须能够查看自己发布的内容及其连接。
  5. 一个主要的设计约束是,当存在大量记录时,Azure表服务查询通常仅限于分区键和行键,否则它们会变得非常慢。另一个限制是查询结果仅按分区键排序,然后按行键排序。

1 个答案:

答案 0 :(得分:0)

试试这个设计:

UserTable


PK :GUID(PK的GUID将最大化可扩展性,每个服务器中只有一个带有单行的分区)
RK :GUID
......其他房产

UserFriendsTable


PK :UserTable.RK(每个用户与他的朋友在一个单独的服务器上)
RK :GUID
FriendWith :UserTable.Pk - UserTable.RK(将用户表中的PK和RK连接用" - ",这将帮助您在尝试访问时快速执行点查询朋友简介)

帖子广告


PK :UserTable.RK +" - " + YYYYMM +随机数(这将允许azure将任何用户的所有月度帖子放在一个单独的服务器中。随机数以防止azure按顺序自动分组。您可以使用过滤PK部分查询帖子ex:pk start with XCtghi94ktY-201411 。
RK 使用以下代码按降序生成行键。意味着最新帖子首先发布。

 long ticks = DateTimeOffset.MaxValue.UtcDateTime.Ticks - DateTimeOffset.Now.UtcDateTime.Ticks;
            string guid = Guid.NewGuid().ToString("N");
            string suffix = "-";
            string.Format("{0:d21}{1}{2}", ticks, suffix, guid);

发布:字符串