我有一个要分片的 mongodb 集合。此集合包含来自用户的消息,并且该集合中的文档具有以下属性
{
_id : ObjectId,
conversationId: ObjectId,
created: DateTime
}
所有查询都将通过created使用convertId属性和sorter 完成。
_id分片显然不起作用,因为我需要通过conversationId查询(加上_id是ObjectId类型,它不能很好地扩展到许多插入)
就查询隔离而言,通过conversationId 进行分片将是一个合乎逻辑的选择,但我担心它不会很好地扩展许多插入(即使我在 conversationId 上使用散列分片键,或者如果我从ObjectId更改属性的类型到其他一些不是增量的类型(如 GUID),因为某些对话可能比其他对话更活跃(即:添加了更多消息)
根据我在 mongo 文档中看到的内容,分片键是索引字段或索引复合字段,存在于集合中的每个文档中。
这是否意味着我可以在复合索引上创建分片键?
底线是:
从_id属性创建散列分片键将提供良好的数据分布
在conversationId上创建一个分片键将提供良好的查询隔离
因此,如果可以做到的话,将这两件事结合起来会很棒。
有任何想法吗?
谢谢