文档菜单
文档首页
/
MongoDB 手册
/ /

分片时间序列集合

本页内容

  • 先决条件
  • 步骤
  • 附加信息

新增在版本5.1.

使用本教程来分片新的或现有的时间序列集合。

重要

在完成本教程之前,请查阅时间序列集合的分片限制

要分片时间序列集合,您必须部署一个分片集群来托管包含您的时序集合的数据库。

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

使用带有时间序列选项的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运行的hostport

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选项。

返回

压缩