假设我有一个如下所示的模型类:
public class Relationship
{
public Guid PartitionKey { get; set; }
public Guid Id { get; set; }
public DateTime CreatedOn { get; set; }
}
PartitionKey
是Relationship
容器的分区键,它由被关注者的用户 ID 表示。 (接收者)Id
是容器的 id,它由关注其他用户的人的用户 id 表示。 (发件人)
该模型确保相同的Id
不能添加到相同的PartitionKey
,从而使得两个用户之间只能创建一次follower/following关系。它还使我能够轻松查找特定人员的所有关注者列表,这一点至关重要。
问题是每个逻辑分区的数据限制为 10 GB。考虑到实际的关系模型可能具有更多属性,并且在幕后发生自动索引,并且某些用户拥有数百万关注者,因此将达到此限制,并且无法允许新的关系相同的分区键。
如何在 Cosmos DB 上设计这一模型,使其真正具有可扩展性?
最佳答案
这里的标准方法是手动将数据分片到多个分区,通常使用 synthetic partition key由多个元素组合而成。
一个简单的策略是使用用户记录中的整数字段来跟踪用于存储所有关注者记录的“存储桶”数量,然后根据需要向每个存储桶分区发送查询。桶的数量可以随着数据的增长而增加。
例如,分区键将构造为[user_id]+[follower_bucket_count]
。您还可以维护每个存储桶的计数以实现更高级的负载平衡,但这可能没有必要启动。
关于c# - 是否可以在 Azure Cosmos DB 中对可扩展的关注者/关注关系进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56120694/