gpt4 book ai didi

MongoDB 在一台机器上按日期分片

转载 作者:可可西里 更新时间:2023-11-01 10:03:37 24 4
gpt4 key购买 nike

我们从一个单一的 mongodb 开始,但没有一个集合增长到 ~300GB。该集合包含具有日期字段的对象。但大多数情况下,我们只需要查询最近的对象,然后查询历史一次。所以我的问题是:是否可以按日期字段在一台服务器上分片这个集合?更明确地说,我想将较新的对象分片到一个节点中,将较旧的对象分片到另一个节点中。而不是将所有对象平均分布在 n 个分片上。

是否有关于如何将现有的单个数据库(没有任何副本集)分片成分片集群的教程?

最佳答案

从技术上讲,您不需要对内容进行分片,只需要为您的领域编制索引。是的,您可以在日期字段上创建索引,您可以通过访问查询计划 db.collection.explain("executionStats")

看到它会受到尊重

但是,选择片键非常重要。选择分片键时需要考虑的事情很少

- Write scaling (high cardinality, Randomization)
- Query Isolation. (read)

选择日期字段实际上提供了非常高的基数,但是它无法进行随机化,因此所有文档都存储在单个分片中,因此限制了系统的写入容量。出于同样的原因,不鼓励将 ObjectId 用作分片键。

http://docs.mongodb.org/manual/core/sharding-shard-key/以上链接的内容..“MongoDB 在文档创建时生成 ObjectId 值以生成对象的唯一标识符。但是,此值中数据的最高有效位表示时间戳,这意味着它们以规则且可预测的模式递增。即使这个值具有高基数,当使用这个、任何日期或其他单调递增的数字作为分片键时,所有插入操作都会将数据存储到单个 block 中,因此,单个分片。因此,写入容量这个分片将定义集群的有效写入容量。”

关于MongoDB 在一台机器上按日期分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955756/

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