gpt4 book ai didi

mongodb - 选择有利于读取性能的 MongoDB 分片键

转载 作者:行者123 更新时间:2023-12-05 08:00:17 25 4
gpt4 key购买 nike

我在很多地方都读到过,选择时间戳是一个糟糕的分片键选择,因为它会在插入时创建热点。如果我向 Shard Key 添加另一个或两个属性,它会创建更均匀的分布,但唯一可能有意义的其他属性不是用于查询的属性。这对于充分发挥读取性能有多重要?

示例文档

{
_id: <ObjectId>,
user_id: <ObjectId>,
_p: <6-10 possible values>,
ts: <UNIX timestamp>,
a: 'lorem ipsum',
b: <Array of ObjectId, can be null/empty>,
...,
z: 'xyz'
}

此集合通常通过以下两种方式之一进行查询:

  1. 按 user_id(按时间戳排序)
  2. 通过 b 和时间戳 <- 几乎总是由聚合框架操作使用

如果我希望获得良好/更好的读取性能(对于我的用例而言,写入增益是次要的),像以下之一这样的分片键是否是一个不错的选择:

{
user_id: 1,
timestamp: 1
}

{
user_id: 1,
_p: 1,
timestamp: 1
}

{
_p: 1,
timestamp: 1
}

感谢您的帮助。

最佳答案

如果你的数据中的时间戳很少改变,也许分片键中的时间戳是可以的。
你可以阅读the docs for shard key .好主意——使用分片键字段“以确保 MongoDB 能够在分片之间均匀分布数据”。然后在时间戳上创建索引。如果您的时间戳字段经常更改(插入具有新时间戳的数据),则将其用于分片键是个坏主意,因为 mongo 无法正常分发您的数据。

关于mongodb - 选择有利于读取性能的 MongoDB 分片键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18501354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com