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
Crie uma coleção de séries temporais fragmentadas
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
weather
no banco de dadostest
.Especifica o campo
metadata.sensorId
como a chave de fragmento.Especifica uma
granularity
de 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
deliverySensor
no banco de dadostest
.Especifica o campo
metadata.location
como a chave do fragmento.location
é um subcampo dometaField
da 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.