【发布时间】:2017-10-11 18:42:34
【问题描述】:
我想使用 CosmosDB Gremlin API 构建一个社交网络,但我无法理解如何选择一个好的分区键。
为简单起见,假设我们的应用程序仅包含用户,这些用户可以关注其他用户(Instagram 风格),并且用户可以创建他们可以将其关注者放入的群组(Google Plus 圈子风格)。
假设图形数据库有这些顶点:
- 应用用户
- 追随者组
并具有以下关系:
- AppUser - 拥有 -> FollowerGroup
- AppUser - 关注 -> AppUser
- AppUser - belongsTo -> FollowerGroup
我认为 appUserId 将是分区键的理想候选者。这样,与该用户相关的所有内容(帖子、图片等)都将保存在同一个分区中。
我的困境在于关注其他用户。如果分区键是 appUserId,那么每个用户的数据将被拆分到自己的分区中。这对于满足跨分区分布写入和均匀分布数据的规则非常有用。
但是当我想查询时会发生什么,比如说用户关注的所有人,以及获取他们的状态。假设我正在关注 20 个人。获取该数据的查询必须跨越 20 个分区才能检索所有数据。这不遵循查询应从同一分区中提取以获得最佳性能的规则。
谁能给我一个更好的分区键来使用?还是更好的数据建模方式?
【问题讨论】:
-
将您的 PartitionKey 设为“PartitionKey”或“Key”之类的通用名称,并让您的应用程序在插入时对其进行设置,以便您可以优化不同的读/写模式
标签: partitioning azure-cosmosdb gremlin