Utilizar comandos de extensão do MongoDB para gerir dados armazenados no Azure Cosmos DB para MongoDB
APLICA-SE A: MongoDB
O documento seguinte contém os comandos de ação personalizados específicos do Azure Cosmos DB para MongoDB. Estes comandos podem ser utilizados para criar e obter recursos de base de dados específicos do modelo de capacidade do Azure Cosmos DB.
Ao utilizar o Azure Cosmos DB para MongoDB, pode desfrutar das vantagens partilhadas do Azure Cosmos DB. Estes benefícios incluem, mas não se limitam a:
- Distribuição global
- Fragmentação automática
- Elevada disponibilidade
- Garantias de latência
- Encriptação de dados inativos
- Cópias de segurança
Pode usufruir destes benefícios ao mesmo tempo que preserva os seus investimentos na sua aplicação mongoDB existente[s]. Pode comunicar com o Azure Cosmos DB para MongoDB com qualquer um dos controladores de cliente do MongoDB open source. O Azure Cosmos DB para MongoDB permite a utilização de controladores de cliente existentes ao aderir ao protocolo de transmissão do MongoDB.
Suporte de protocolo do MongoDB
O Azure Cosmos DB para MongoDB é compatível com a versão 4.0, 3.6 e 3.2 do servidor MongoDB. Para obter mais informações, consulte funcionalidades e sintaxe suportadas nas versões 4.0, 3.6 e 3.2.
Os seguintes comandos de extensão criam e modificam recursos específicos do Azure Cosmos DB através de pedidos de base de dados:
- Criar base de dados
- Atualizar base de dados
- Obter base de dados
- Criar coleção
- Atualizar coleção
- Obter coleção
Criar base de dados
O comando criar extensão de base de dados cria uma nova base de dados do MongoDB. O nome da base de dados pode ser utilizado a partir do contexto da base de dados definido pelo use database
comando . A tabela seguinte descreve os parâmetros no comando :
Campo | Tipo | Description |
---|---|---|
customAction |
string |
Nome do comando personalizado. O valor tem de ser CreateDatabase . |
offerThroughput |
int |
Débito aprovisionado definido na base de dados. Este parâmetro é opcional. |
autoScaleSettings |
Object |
Necessário para o modo de Dimensionamento Automático. Este objeto contém as definições associadas ao modo de capacidade de Dimensionamento Automático. Pode configurar o maxThroughput valor, que descreve o maior número de Unidades de Pedido para o qual a coleção pode aumentar dinamicamente. |
Saída
Se o comando for bem-sucedido, devolve a seguinte resposta:
{ "ok" : 1 }
Veja a saída predefinida do comando personalizado para os parâmetros na saída.
Exemplo: Criar uma base de dados
Para criar uma base de dados com o nome "test"
que utiliza todos os valores predefinidos, utilize o seguinte comando:
use test
db.runCommand({customAction: "CreateDatabase"});
Este comando cria uma base de dados sem débito ao nível da base de dados. Esta operação significa que as coleções nesta base de dados têm de especificar a quantidade de débito que precisa de utilizar.
Exemplo: Criar uma base de dados com débito
Para criar uma base de dados com o nome "test"
e especificar um débito aprovisionado ao nível da base de dados de 1000 RUs, utilize o seguinte comando:
use test
db.runCommand({customAction: "CreateDatabase", offerThroughput: 1000 });
Este comando cria uma base de dados e define um débito para a mesma. Todas as coleções nesta base de dados partilham o débito definido, a menos que as coleções sejam criadas com um nível de débito específico.
Exemplo: Criar uma base de dados com débito de Dimensionamento Automático
Para criar uma base de dados com o nome "test"
e especificar um débito máximo de Dimensionamento Automático de 20 000 RU/s ao nível da base de dados, utilize o seguinte comando:
use test
db.runCommand({customAction: "CreateDatabase", autoScaleSettings: { maxThroughput: 20000 } });
Atualizar base de dados
O comando atualizar extensão da base de dados atualiza as propriedades associadas à base de dados especificada. A alteração do débito aprovisionado da base de dados para o dimensionamento automático e vice-versa só é suportada no portal do Azure. A tabela seguinte descreve os parâmetros no comando :
Campo | Tipo | Description |
---|---|---|
customAction |
string |
Nome do comando personalizado. O valor tem de ser UpdateDatabase . |
offerThroughput |
int |
Novo débito aprovisionado que pretende definir na base de dados se a base de dados utilizar débito ao nível da base de dados |
autoScaleSettings |
Object |
Necessário para o modo de Dimensionamento Automático. Este objeto contém as definições associadas ao modo de capacidade de Dimensionamento Automático. Pode configurar o maxThroughput valor, que descreve o maior número de Unidades de Pedido para o qual a base de dados pode ser aumentada dinamicamente. |
Este comando utiliza a base de dados especificada no contexto da sessão. Esta base de dados é a mesma que utilizou no use <database>
comando . De momento, o nome da base de dados não pode ser alterado com este comando.
Saída
Se o comando for bem-sucedido, devolve a seguinte resposta:
{ "ok" : 1 }
Veja a saída predefinida do comando personalizado para os parâmetros na saída.
Exemplo: Atualizar o débito aprovisionado associado a uma base de dados
Para atualizar o débito aprovisionado de uma base de dados com o nome "test"
para 1200 RUs, utilize o seguinte comando:
use test
db.runCommand({customAction: "UpdateDatabase", offerThroughput: 1200 });
Exemplo: Atualizar o débito de Dimensionamento Automático associado a uma base de dados
Para atualizar o débito aprovisionado de uma base de dados com o nome "test"
para 20 000 RUs ou para transformá-lo num nível de débito de Dimensionamento Automático, utilize o seguinte comando:
use test
db.runCommand({customAction: "UpdateDatabase", autoScaleSettings: { maxThroughput: 20000 } });
Obter base de dados
O comando obter extensão de base de dados devolve o objeto de base de dados. O nome da base de dados é utilizado a partir do contexto da base de dados no qual o comando é executado.
{
customAction: "GetDatabase"
}
A tabela seguinte descreve os parâmetros no comando :
Campo | Tipo | Description |
---|---|---|
customAction |
string |
Nome do comando personalizado. O valor tem de ser GetDatabase . |
Saída
Se o comando for bem-sucedido, a resposta contém um documento com os seguintes campos:
Campo | Tipo | Description |
---|---|---|
ok |
int |
Estado da resposta. 1 == êxito. 0 == falha. |
database |
string |
Nome da base de dados. |
provisionedThroughput |
int |
Débito aprovisionado definido na base de dados se a base de dados estiver a utilizar o débito manual ao nível da base de dados |
autoScaleSettings |
Object |
Este objeto contém os parâmetros de capacidade associados à base de dados se estiver a utilizar o modo de Dimensionamento Automático. O maxThroughput valor descreve o número mais elevado de Unidades de Pedido para as quais a base de dados pode ser aumentada dinamicamente. |
Se o comando falhar, é devolvida uma resposta de comando personalizada predefinida. Veja a saída predefinida do comando personalizado para os parâmetros na saída.
Exemplo: Obter a base de dados
Para obter o objeto de base de dados de uma base de dados com o nome "test"
, utilize o seguinte comando:
use test
db.runCommand({customAction: "GetDatabase"});
Se a base de dados não tiver débito associado, o resultado será:
{ "database" : "test", "ok" : 1 }
Se a base de dados tiver um débito manual ao nível da base de dados associado, a saída mostrará os provisionedThroughput
valores:
{ "database" : "test", "provisionedThroughput" : 20000, "ok" : 1 }
Se a base de dados tiver um débito de Dimensionamento Automático ao nível da base de dados associado, a saída mostrará o provisionedThroughput
, que descreve as RU/s mínimas para a base de dados e o autoScaleSettings
objeto, incluindo o maxThroughput
, que descreve as RU/s máximas para a base de dados.
{
"database" : "test",
"provisionedThroughput" : 2000,
"autoScaleSettings" : {
"maxThroughput" : 20000
},
"ok" : 1
}
Criar coleção
O comando criar extensão de coleção cria uma nova coleção do MongoDB. O nome da base de dados é utilizado a partir do contexto de bases de dados definido pelo use database
comando . O formato do comando CreateCollection é o seguinte:
{
customAction: "CreateCollection",
collection: "<Collection Name>",
shardKey: "<Shard key path>",
// Replace the line below with "autoScaleSettings: { maxThroughput: (int) }" to use Autoscale instead of Provisioned Throughput. Fill the required Autoscale max throughput setting.
offerThroughput: (int) // Provisioned Throughput enabled with required throughput amount set.
indexes: [{key: {_id: 1}, name: "_id_1"}, ... ] // Optional indexes (3.6+ accounts only).
}
A tabela seguinte descreve os parâmetros no comando :
Campo | Tipo | Necessário | Descrição |
---|---|---|---|
customAction |
string |
Obrigatório | Nome do comando personalizado. O valor tem de ser CreateCollection . |
collection |
string |
Necessário | Nome da coleção. Não são permitidos carateres ou espaços especiais. |
offerThroughput |
int |
Opcional | Débito aprovisionado a definir na base de dados. Se este parâmetro não for fornecido, a predefinição é 400 RU/s mínima. * Para especificar débito para além de 10 000 RU/s, o shardKey parâmetro é necessário. |
shardKey |
string |
Necessário para coleções com débito grande | O caminho para a Chave de Partição Horizontal para a coleção fragmentada. Este parâmetro é necessário se definir mais de 10 000 RU/s em offerThroughput . Se for especificado, todos os documentos inseridos requerem esta chave e valor. |
autoScaleSettings |
Object |
Necessário para o modo de Dimensionamento Automático | Este objeto contém as definições associadas ao modo de capacidade de Dimensionamento Automático. Pode configurar o maxThroughput valor, que descreve o maior número de Unidades de Pedido para o qual a coleção pode ser aumentada dinamicamente. |
indexes |
Array |
Opcionalmente, configure índices. Este parâmetro é suportado apenas para contas com mais de 3,6. | Quando estiver presente, é necessário um índice no _id. Cada entrada na matriz tem de incluir uma chave de um ou mais campos, um nome e pode conter opções de índice. Por exemplo, para criar um índice exclusivo composto nos campos a e b utilizar esta entrada: {key: {a: 1, b: 1}, name:"a_1_b_1", unique: true} . |
Saída
Devolve uma resposta de comando personalizada predefinida. Veja a saída predefinida do comando personalizado para os parâmetros na saída.
Exemplo: Criar uma coleção com a configuração mínima
Para criar uma nova coleção com o nome "testCollection"
e os valores predefinidos, utilize o seguinte comando:
use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection"});
Esta operação resulta numa nova coleção fixa, sem alterações, com 400RU/s e um índice no _id
campo criado automaticamente. Este tipo de configuração também se aplica ao criar novas coleções através da insert()
função . Por exemplo:
use test
db.newCollection.insert({});
Exemplo: Criar uma coleção não alterada
Para criar uma coleção não integrada com o nome "testCollection"
e o débito aprovisionado de 1000 RUs, utilize o seguinte comando:
use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", offerThroughput: 1000});
Pode criar uma coleção com até 10 000 RU/s como sem offerThroughput
ter de especificar uma chave de partição horizontal. Para coleções com débito maior, consulte a secção seguinte.
Exemplo: Criar uma coleção fragmentada
Para criar uma coleção fragmentada com o nome "testCollection"
e débito aprovisionado de 11 000 RUs e uma shardkey
propriedade "a.b", utilize o seguinte comando:
use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", offerThroughput: 11000, shardKey: "a.b" });
Este comando requer agora o shardKey
parâmetro , uma vez que mais de 10 000 RU/s especificados no offerThroughput
.
Exemplo: Criar uma coleção de Dimensionamento Automático não harded
Para criar uma coleção não definida com o nome 'testCollection'
que utiliza a capacidade de débito de Dimensionamento Automático definida como 4000 RU/s, utilize o seguinte comando:
use test
db.runCommand({
customAction: "CreateCollection", collection: "testCollection",
autoScaleSettings:{
maxThroughput: 4000
}
});
Para o autoScaleSettings.maxThroughput
valor, pode especificar um intervalo de 4000 RU/s a 10 000 RU/s sem uma chave de partição horizontal. Para um débito de dimensionamento automático mais elevado, tem de especificar o shardKey
parâmetro .
Exemplo: Criar uma coleção de Dimensionamento Automático fragmentado
Para criar uma coleção fragmentada denominada 'testCollection'
com uma chave de partição horizontal denominada 'a.b'
e que utiliza a capacidade de débito de Dimensionamento Automático definida como 20 000 RU/s, utilize o seguinte comando:
use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", shardKey: "a.b", autoScaleSettings: { maxThroughput: 20000 }});
Atualizar coleção
O comando update collection extension atualiza as propriedades associadas à coleção especificada. A alteração da coleção do débito aprovisionado para o dimensionamento automático e vice-versa só é suportada no portal do Azure.
{
customAction: "UpdateCollection",
collection: "<Name of the collection that you want to update>",
// Replace the line below with "autoScaleSettings: { maxThroughput: (int) }" if using Autoscale instead of Provisioned Throughput. Fill the required Autoscale max throughput setting. Changing between Autoscale and Provisioned throughput is only supported in the Azure Portal.
offerThroughput: (int) // Provisioned Throughput enabled with required throughput amount set.
indexes: [{key: {_id: 1}, name: "_id_1"}, ... ] // Optional indexes (3.6+ accounts only).
}
A tabela seguinte descreve os parâmetros no comando :
Campo | Tipo | Description |
---|---|---|
customAction |
string |
Nome do comando personalizado. O valor tem de ser UpdateCollection . |
collection |
string |
Nome da coleção. |
offerThroughput |
int |
Débito aprovisionado a definir na coleção. |
autoScaleSettings |
Object |
Necessário para o modo de Dimensionamento Automático. Este objeto contém as definições associadas ao modo de capacidade de Dimensionamento Automático. O maxThroughput valor descreve o número mais elevado de Unidades de Pedido para as quais a coleção pode ser aumentada dinamicamente. |
indexes |
Array |
Opcionalmente, configure índices. Este parâmetro é suportado apenas para contas com mais de 3,6. Quando estiver presente, o conjunto de índices especificados (incluindo a remoção de índices) substitui os índices existentes da coleção. É necessário um índice no _id. Cada entrada na matriz tem de incluir uma chave de um ou mais campos, um nome e pode conter opções de índice. Por exemplo, para criar um índice exclusivo composto nos campos a e b, utilize esta entrada: {key: {a: 1, b: 1}, name: "a_1_b_1", unique: true} . |
Saída
Devolve uma resposta de comando personalizada predefinida. Veja a saída predefinida do comando personalizado para os parâmetros na saída.
Exemplo: Atualizar o débito aprovisionado associado a uma coleção
Para atualizar o débito aprovisionado de uma coleção com o nome "testCollection"
para 1200 RUs, utilize o seguinte comando:
use test
db.runCommand({customAction: "UpdateCollection", collection: "testCollection", offerThroughput: 1200 });
Obter coleção
O comando get collection custom devolve o objeto de coleção.
{
customAction: "GetCollection",
collection: "<Name of the collection>"
}
A tabela seguinte descreve os parâmetros no comando :
Campo | Tipo | Description |
---|---|---|
customAction |
string |
Nome do comando personalizado. O valor tem de ser GetCollection . |
collection |
string |
Nome da coleção. |
Saída
Se o comando for bem-sucedido, a resposta contém um documento com os seguintes campos
Campo | Tipo | Description |
---|---|---|
ok |
int |
Estado da resposta. 1 == êxito. 0 == falha. |
database |
string |
Nome da base de dados. |
collection |
string |
Nome da coleção. |
shardKeyDefinition |
document |
Documento de especificação de índice utilizado como uma chave de partição horizontal. Este campo é um parâmetro de resposta opcional. |
provisionedThroughput |
int |
Débito Aprovisionado a definir na coleção. Este campo é um parâmetro de resposta opcional. |
autoScaleSettings |
Object |
Este objeto contém os parâmetros de capacidade associados à base de dados se estiver a utilizar o modo de Dimensionamento Automático. O maxThroughput valor descreve o número mais elevado de Unidades de Pedido para as quais a coleção pode ser aumentada dinamicamente. |
Se o comando falhar, é devolvida uma resposta de comando personalizada predefinida. Veja a saída predefinida do comando personalizado para os parâmetros na saída.
Exemplo: Obter a coleção
Para obter o objeto de coleção de uma coleção com o nome "testCollection"
, utilize o seguinte comando:
use test
db.runCommand({customAction: "GetCollection", collection: "testCollection"});
Se a coleção tiver uma capacidade de débito associada à mesma, inclui o provisionedThroughput
valor e a saída será:
{
"database" : "test",
"collection" : "testCollection",
"provisionedThroughput" : 400,
"ok" : 1
}
Se a coleção tiver um débito de Dimensionamento Automático associado, inclui o autoScaleSettings
objeto com o maxThroughput
parâmetro , que define o débito máximo para o qual a coleção aumenta dinamicamente. Além disso, também inclui o provisionedThroughput
valor, que define o débito mínimo para o qual esta coleção reduz se não existirem pedidos na coleção:
{
"database" : "test",
"collection" : "testCollection",
"provisionedThroughput" : 1000,
"autoScaleSettings" : {
"maxThroughput" : 10000
},
"ok" : 1
}
Se a coleção estiver a partilhar débito ao nível da base de dados, no modo de Dimensionamento Automático ou manual, a saída será:
{ "database" : "test", "collection" : "testCollection", "ok" : 1 }
{
"database" : "test",
"provisionedThroughput" : 2000,
"autoScaleSettings" : {
"maxThroughput" : 20000
},
"ok" : 1
}
Paralelizar fluxos de alteração
Ao utilizar fluxos de alteração em escala, é melhor distribuir uniformemente a carga. O comando seguinte devolve um ou mais tokens de currículo de fluxo de alterações – cada um correspondente aos dados de uma única partição/partição de partições/partições físicas físicas (podem existir várias partições/partições lógicas numa partição física). Cada token de currículo faz com que watch() devolva apenas dados dessa partição/partição de partição/partição física.
Utilize db.collection.watch()
em cada token de currículo (um thread por token), para dimensionar os fluxos de alteração de forma eficiente.
{
customAction: "GetChangeStreamTokens",
collection: "<Name of the collection>",
startAtOperationTime: "<BSON Timestamp>" // Optional. Defaults to the time the command is run.
}
Exemplo: Obter o token de fluxo
Execute o comando personalizado para obter um token de currículo para cada partição/partição horizontal física.
use test
db.runCommand({customAction: "GetChangeStreamTokens", collection: "<Name of the collection>"})
Execute um thread/processo watch() para cada token de currículo devolvido a partir do comando personalizado GetChangeStreamTokens. Eis um exemplo para um tópico.
db.test_coll.watch([{ $match: { "operationType": { $in: ["insert", "update", "replace"] } } }, { $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1 } }],
{fullDocument: "updateLookup",
resumeAfter: { "_data" : BinData(0,"eyJWIjoyLCJSaWQiOiJQeFVhQUxuMFNLRT0iLCJDb250aW51YXRpb24iOlt7IkZlZWRSYW5nZSI6eyJ0eXBlIjoiRWZmZWN0aXZlIFBhcnRpdGlvbiBLZXkgUmFuZ2UiLCJ2YWx1ZSI6eyJtaW4iOiIiLCJtYXgiOiJGRiJ9fSwiU3RhdGUiOnsidHlwZSI6ImNvbnRpbndkFLbiIsInZhbHVlIjoiXCIxODQ0XCIifX1dfQ=="), "_kind" : NumberInt(1)}})
O documento (valor) no campo resumeAfter representa o token de currículo. O comando watch()
devolve um cursor para todos os documentos que foram inseridos, atualizados ou substituídos dessa partição física, uma vez que o comando personalizado GetChangeStreamTokens foi executado. Uma amostra dos dados devolvidos está incluída aqui.
{
"_id": {
"_data": BinData(0,
"eyJWIjoyLCJSaWQiOiJQeFVhQUxuMFNLRT0iLCJDfdsfdsfdsft7IkZlZWRSYW5nZSI6eyJ0eXBlIjoiRWZmZWN0aXZlIFBhcnRpdGlvbiBLZXkgUmFuZ2UiLCJ2YWx1ZSI6eyJtaW4iOiIiLCJtYXgiOiJGRiJ9fSwiU3RhdGUiOnsidHlwZSI6ImNvbnRpbnVhdGlvbiIsInZhbHVlIjoiXCIxOTgwXCIifX1dfQ=="),
"_kind": 1
},
"fullDocument": {
"_id": ObjectId("60da41ec9d1065b9f3b238fc"),
"name": John,
"age": 6
},
"ns": {
"db": "test-db",
"coll": "test_coll"
},
"documentKey": {
"_id": ObjectId("60da41ec9d1065b9f3b238fc")
}
}
Cada documento devolvido inclui um token de currículo (são todos iguais para cada página). Este token de currículo deve ser armazenado e reutilizado se o thread/processo morrer. Este token de currículo é retomado a partir de onde ficou e recebe apenas dados dessa partição física.
Saída predefinida de um comando personalizado
Se não for especificado, uma resposta personalizada contém um documento com os seguintes campos:
Campo | Tipo | Description |
---|---|---|
ok |
int |
Estado da resposta. 1 == êxito. 0 == falha. |
code |
int |
Só foi devolvido quando o comando falhou (ou seja, ok == 0). Contém o código de erro do MongoDB. Este campo é um parâmetro de resposta opcional. |
errMsg |
string |
Só foi devolvido quando o comando falhou (ou seja, ok == 0). Contém uma mensagem de erro amigável para o utilizador. Este campo é um parâmetro de resposta opcional. |
Por exemplo:
{ "ok" : 1 }
Passos seguintes
Em seguida, pode aprender os seguintes conceitos do Azure Cosmos DB: