Fragmentar uma Coleção de séries temporais
Novidades na versão 5.1.
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.
Procedimentos
Fragmentar uma nova Coleção de séries temporais
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.