我想用CosmosDB Gremlin API构建一个社交网络,但我很难理解如何选择一个好的分区键。如何使用CosmosDB gremlin API设计社交网络?
为了简单起见,我们假设我们的应用程序仅由可以关注其他用户(Instagram样式)的用户组成,用户可以创建可以将他们的关注者放入(Google Plus圈子样式)的组。
比方说,图形数据库中有这些顶点:
- APPUSER
- FollowerGroup
并具有以下关系:
- APPUSER - 拥有 - > FollowerGroup
- AppUser - 关注 - > APPUSER
- APPUSER - 属于关联 - > FollowerGroup
我在想appUserId将是分区键一个很好的候选人。这样,与该用户(帖子,图片等)相关的所有内容都将保存在同一个分区中。
我的困境是涉及到其他用户。如果分区键是appUserId,那么每个用户的数据将被分解到它自己的分区中。这对于满足在分区间扩展写入和均匀分布数据的规则很有用。
但是当我想查询时发生什么事情,说一个用户所关注的所有人,以及获得他们的状态。假设我跟随20人。获取该数据的查询必须跨越20个分区才能检索所有数据。这不符合查询应该从同一分区获得最高性能的规则。
任何人都可以提供一个更好的分区键使用?或者更好的方式来模拟数据?
使您的PartitionKey具有像“PartitionKey”或“Key”一般的通用性,让您的应用程序在插入时设置它,以便优化您的不同读/写模式 –