Use este tutorial para fragmentar uma coleção de séries temporais nova ou existente.
Importante
Antes de concluir este tutorial, revise as limitações de fragmentação para coleções de séries temporais.
Pré-requisitos
Para fragmentar uma coleção de séries temporais, você deve implantar um cluster fragmentado para hospedar o banco de dados que contém sua coleção de séries temporais.
Observação
A partir do MongoDB 8.0.10, você pode refragmentar uma coleção de séries temporais. Todos os shards na coleção de séries temporais devem executar a versão 8.0.10 ou posterior para serem refragmentados.
Procedimentos
Criar uma coleção de séries temporais fragmentada
Confirme se a fragmentação está habilitada em seu banco de dados.
Execute sh.status() para confirmar se a fragmentação está habilitada no seu banco de dados:
sh.status()
O comando retorna as informações de sharding:
--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, ...
Criar a coleção.
Use o método shardCollection() com a opção de série temporal .
Por exemplo:
sh.shardCollection( "test.weather", { "metadata.sensorId": 1 }, { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" } } )
Neste exemplo, sh.shardCollection():
Fragmenta uma nova coleção de série temporal chamada
weatherno banco de dadostest.Especifica o campo
metadata.sensorIdcomo a chave de fragmento.Especifica uma
granularityde horas.
O documento a seguir contém os metadados apropriados para a coleção:
db.weather.insertOne( { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T00:00:00.000Z"), "temp": 12 } )
Confirme se a fragmentação está habilitada em seu banco de dados.
Execute sh.status() para confirmar se a fragmentação está habilitada no seu banco de dados:
sh.status()
O comando retorna as informações de sharding:
--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, ...
Criar a coleção.
Use o método shardCollection() com a opção de série temporal .
Por exemplo:
sh.shardCollection( "test.weather", { "metadata.sensorId": 1 }, { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" } } )
Neste exemplo, sh.shardCollection():
Fragmenta uma nova coleção de série temporal chamada
weatherno banco de dadostest.Especifica o campo
metadata.sensorIdcomo a chave de fragmento.Especifica uma
granularityde horas.
O documento a seguir contém os metadados apropriados para a coleção:
db.weather.insertOne( { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T00:00:00.000Z"), "temp": 12 } )
Fragmentar uma coleção de séries temporais existente
Confirme se a fragmentação está habilitada em seu banco de dados.
Execute sh.status() para confirmar se a fragmentação está habilitada no seu banco de dados:
sh.status()
O comando retorna as informações de sharding:
--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, ...
Crie um índice com hash em sua coleção.
Habilite a fragmentação na sua coleção criando um índice compatível com a chave de fragmento.
Considere uma coleção de séries temporais com as seguintes propriedades:
db.createCollection( "deliverySensor", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "minutes" } } )
Um exemplo de documento da coleção é algo parecido com o seguinte:
db.deliverySensor.insertOne( { "metadata": { "location": "USA", "vehicle": "truck" }, "timestamp": ISODate("2021-08-21T00:00:10.000Z"), "speed": 50 } )
Execute o comando a seguir para criar um índice com hash no campo metadata.location:
db.deliverySensor.createIndex( { "metadata.location" : "hashed" } )
Fragmente sua coleção.
Use o método shardCollection() para fragmentar a coleção.
Para fragmentar a coleção deliverySensor descrita na etapa anterior, execute o seguinte comando:
sh.shardCollection( "test.deliverySensor", { "metadata.location": "hashed" } )
Neste exemplo, sh.shardCollection():
Fragmenta uma coleção de séries temporais existente chamada
deliverySensorno banco de dadostest.Especifica o campo
metadata.locationcomo a chave do fragmento.locationé um subcampo dometaFieldda coleção.
Quando a coleção que você especificar para sh.shardCollection() for uma coleção de séries temporais, não será necessário especificar a opção timeseries.