2

我有一个分片的 mongodb 数据库设置,我在其中使用分片标签将某些数据约束到某些分片。

我想做的是为分片标签提供动态范围。我希望过去 5 天的数据始终在一个分片标签中,而其他数据在另一个分片标签中。我不能在这里指定一个固定的日期,因为它每天都在变化。

一个例子是

从过去 5 天到今天的分片标签“LATEST”数据 从最少到最近 5 天的分片标签“OLD”数据

我如何在分片标签上定义这样的范围,而不是每天更改分片标签范围。

提前致谢

4

2 回答 2

1

在您的示例中,通过您的分片密钥分配,具有“最新”数据的分片将获得所有新写入,因为进一步的“最新”数据将被注入其中。问题是,您需要手动将旧数据移动到另一个分片。

假设您有一个timestamp-like 分片键或ObjectID. (ObjectID使用时间戳组件自动构建。)这些是单调递增的,因此每次将数据插入相应的集合时,线性平衡的卡盘都会变得不平衡。

我不会将旧数据或新数据强制到一个特定的分片,因为分片(主要是)用于负载平衡,在这种情况下你会避免这种情况。您可以使用单调键类型很好地分布数据,因为 MongoDB 版本 2.4 带有Hashed Sharding

了解如何使用散列分片键对集合进行分片

例子:sh.shardCollection( "records.active", { a: "hashed" } )

wherea应该是单调递增的字段类型。

于 2013-09-04T00:22:41.457 回答
0

尝试使分片标记动态化的问题是标记仅在插入时才被尊重。在您的情况下,所有新数据都将在一组标记的分片中结束,因为所有数据在插入时开始时不到五天。插入后五天后,将不会发生任何事情。它不提供从标记的分片中删除超过五天的文档并将它们分发到另一组未标记的分片中的神奇功能。

于 2013-11-12T01:31:18.280 回答