是否可以在Azure Cosmos DB中为可伸缩的关注者/关注关系建模?

时间:2019-05-13 22:36:27

标签: c# azure nosql azure-cosmosdb scalability

假设我有一个像这样的模型类:

public class Relationship
{
  public Guid PartitionKey { get; set; }

  public Guid Id { get; set; }

  public DateTime CreatedOn { get; set; }
}
  • PartitionKeyRelationship容器的分区键,它由被关注者的用户ID表示。 (接收方)

  • Id是容器的ID,并由关注另一个用户的人的用户ID表示。 (发送方)

此模型确保不能将相同的Id添加到相同的PartitionKey,以便在两个用户之间只能创建一次关注者/关注者关系。它还使我可以轻松地查找特定人员的所有关注者列表,这一点至关重要。

问题是每个逻辑分区限制为10 GB的数据。考虑到实际的Relationship模型可能具有更多的属性,并且在后台自动进行索引编制,并且某些用户拥有数百万个关注者,因此将达到此限制,并且无法为同一分区创建新的关系键。

一个人如何在Cosmos DB上设计这种模型,使其真正可扩展?

1 个答案:

答案 0 :(得分:0)

这里的标准方法是手动将数据分片到多个分区,通常使用synthetic partition key,它由多个项目组成。

一种简单的策略是在用户记录中使用一个整数字段来跟踪用于存储所有跟随者记录的“存储桶”的数量,然后根据需要将查询发送到每个存储桶分区。可以随着数据的增长增加存储桶的数量。

然后将分区键手动设置为构造为[user_id]+[follower_bucket_count]的字段。您还可以维护每个存储区的计数,以实现更高级的负载平衡,但可能不必启动。