2017-10-11 55 views
-1

我想用CosmosDB Gremlin API构建一个社交网络,但我很难理解如何选择一个好的分区键。如何使用CosmosDB gremlin API设计社交网络?

为了简单起见,我们假设我们的应用程序仅由可以关注其他用户(Instagram样式)的用户组成,用户可以创建可以将他们的关注者放入(Google Plus圈子样式)的组。

比方说,图形数据库中有这些顶点:

  • APPUSER
  • FollowerGroup

并具有以下关系:

  • APPUSER - 拥有 - > FollowerGroup
  • AppUser - 关注 - > APPUSER
  • APPUSER - 属于关联 - > FollowerGroup

我在想appUserId将是分区键一个很好的候选人。这样,与该用户(帖子,图片等)相关的所有内容都将保存在同一个分区中。

我的困境是涉及到其他用户。如果分区键是appUserId,那么每个用户的数据将被分解到它自己的分区中。这对于满足在分区间扩展写入和均匀分布数据的规则很有用。

但是当我想查询时发生什么事情,说一个用户所关注的所有人,以及获得他们的状态。假设我跟随20人。获取该数据的查询必须跨越20个分区才能检索所有数据。这不符合查询应该从同一分区获得最高性能的规则。

任何人都可以提供一个更好的分区键使用?或者更好的方式来模拟数据?

+0

使您的PartitionKey具有像“PartitionKey”或“Key”一般的通用性,让您的应用程序在插入时设置它,以便优化您的不同读/写模式 –

回答

2

这是社交网络的一个经典问题,并且被多次调出。网上有很多资源可供阅读。

在本质上,这是很难避免的查询会跨分区向外扩展的图形。

最终的设计选择将取决于 1.您计划处理的规模为 2.您的查询工作量(例如,所有查询)。如果您知道所有查询及其频率,则可以优化分区策略。

+0

感谢您的链接。我必须检查出来。 – Treyphor