分片时间序列集合
新增在版本5.1.
使用本教程来分片新的或现有的时间序列集合。
重要
在完成本教程之前,请查阅时间序列集合的分片限制。
先决条件
要分片时间序列集合,您必须部署一个分片集群来托管包含您的时序集合的数据库。
步骤
分片新的时间序列集合
1
2
确认您的数据库已启用分片。
运行sh.status()
以确认您的数据库已启用分片
sh.status()
命令返回分片信息
--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, ...
3
创建集合。
使用带有时间序列选项的sh.shardCollection()
方法。
例如
sh.shardCollection( "test.weather", { "metadata.sensorId": 1 }, { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" } } )
在这个示例中,sh.shardCollection()
:
在
test
数据库上对名为weather
的新时间序列集合进行分片。指定
metadata.sensorId
字段为分片键。指定时间粒度为小时。
以下文档包含集合的适当元数据
db.weather.insertOne( { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T00:00:00.000Z"), "temp": 12 } )
分片现有时间序列集合
1
连接到您的分片集群。
将mongosh
连接到您的分片集群的mongos
。指定mongos
运行的host
和port
mongosh --host <hostname> --port <port>
2
确认您的数据库已启用分片。
运行sh.status()
以确认您的数据库已启用分片
sh.status()
命令返回分片信息
--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, ...
3
在您的集合上创建一个哈希索引。
通过创建支持分片键的索引来启用您集合的分片。
考虑具有以下属性的时间序列集合
db.createCollection( "deliverySensor", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "minutes" } } )
该集合的一个示例文档如下
db.deliverySensor.insertOne( { "metadata": { "location": "USA", "vehicle": "truck" }, "timestamp": ISODate("2021-08-21T00:00:10.000Z"), "speed": 50 } )
运行以下命令在metadata.location
字段上创建哈希索引
db.deliverySensor.createIndex( { "metadata.location" : "hashed" } )
4
分片您的集合。
使用sh.shardCollection()
方法来分片集合。
要分片在上一步骤中描述的deliverySensor
集合,请运行以下命令
sh.shardCollection( "test.deliverySensor", { "metadata.location": "hashed" } )
在这个示例中,sh.shardCollection()
:
在
test
数据库上分片名为deliverySensor
的现有时间序列集合。指定
metadata.location
字段为分片键。《location》是集合的《metaField》子字段。
当您要分片的集合是时间序列集合时,您不需要指定timeseries选项。