đ A CloudSEK se torna a primeira empresa de segurança cibernĂ©tica de origem indiana a receber investimentos da Estado dos EUA fundo
Leia mais

A fragmentação é um processo no MongoDB, que divide grandes conjuntos de dados em volumes menores de dados e os distribui em vårias instùncias do MongoDB. Quando os dados no MongoDB são enormes, as consultas executadas em conjuntos de dados tão grandes podem levar ao alto uso da CPU. O MongoDB usa o recurso de fragmentação para resolver isso. Durante esse processo, o grande banco de dados é dividido em fragmentos (subconjuntos de dados) que funcionam logicamente como uma coleção. Os fragmentos são implementados por meio de clusters que consistem em:


Em uma série de duas partes sobre fragmentação no MongoDB, explicamos:
Na primeira parte, fornecemos um tutorial sobre como criar um cluster fragmentado, explicando todas as noçÔes båsicas sobre fragmentação.
Para criar um cluster, precisamos esclarecer:
mondeus e mongos são dois processos diferentes no MongoDB. Embora o mongod seja o principal daemon que lida com solicitaçÔes de dados, acesse dados e execute operaçÔes de gerenciamento em segundo plano, o mongos é um utilitårio de fragmentação que processa e encaminha as consultas dos usuårios e determina a localização dos dados no cluster fragmentado. Os fragmentos e servidores de configuração executam o processo mongod, enquanto o servidor do roteador de consulta executa o processo mongos.
Para nossa ilustração, vamos pegar 4 fragmentos (a saber, a, b, c e d) e um fator de replicação de 3. Portanto, no total, haverå 12 servidores fragmentados (processos mongod). Também executaremos 4 roteadores de consulta (processos mongos) e 3 servidores de configuração (pequenos processos mongod) como se faria em um ambiente de produção; executando tudo isso em um servidor simulando um cluster.
Na verdade, esses fragmentos, juntamente com seus conjuntos de rĂ©plicas, sĂŁo executados em 12 mĂĄquinas diferentes. No entanto, os servidores de configuração sĂŁo processos leves e com apenas 4 fragmentos. Portanto, a carga serĂĄ consideravelmente baixa. Isso significa que vocĂȘ pode executar servidores de configuração em qualquer um dos servidores fragmentados. Os processos mongos podem ser executados em um servidor fragmentado ou diretamente em uma mĂĄquina de aplicativos cliente.
A vantagem de executar o mongos em uma mĂĄquina de aplicativo cliente Ă© que ele Ă© executado em uma interface local sem precisar sair da rede. No entanto, vocĂȘ deve se lembrar de ativar as opçÔes de segurança corretas. Por outro lado, se vocĂȘ executĂĄ-lo no servidor fragmentado ou em qualquer outro servidor, o cliente nĂŁo precisarĂĄ passar pelo processo de configuração do cluster.
Â
A primeira etapa do processo é criar diretórios de dados para nossos servidores fragmentados, servidores de configuração e registros.
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/a0
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/a1
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/a2
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/b0
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/b1
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/b2
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/c0
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/c1
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/c2
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/d0
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/d1
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p dados/d2
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p config/cfg0
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p config/cfg1
Ter, 27 de outubro piyushgoyal tutorial mongo $ mkdir -p config/cfg2
Ter, 27 de outubro piyushgoyal tutorial mongo $ registros do mkdirÂ
Use o comando mongod, conforme mostrado abaixo, para iniciar o servidor de configuração. Portanto, passamos o parùmetro configsvr que declara o servidor de configuração desse cluster.
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --configsvr --replSet cfg --dbpath config/cfg0 --port 26050 --fork --logpath logs/log.cfg0 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --configsvr --replSet cfg --dbpath config/cfg1 --port 26051 --fork --logpath logs/log.cfg1 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --configsvr --replSet cfg --dbpath config/cfg2 --port 26052 --fork --logpath logs/log.cfg2 --logappendAgora vamos continuar com nossos servidores fragmentados. Aqui, executamos o comando mongod para passar o parùmetro shardsvr que, por sua vez, declara que faz parte de um cluster fragmentado. Em seguida, renomeamos o conjunto de réplicas com o nome do fragmento.
Â
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replDefine um --dbpath data/a0 --port 27000 --fork --logpath logs/log.a0 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replDefine um --dbpath data/a1 --port 27001 --fork --logpath logs/log.a1 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replDefine um --dbpath data/a2 --port 27002 --fork --logpath logs/log.a2 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replSet b --dbpath data/b0 --port 27100 --fork --logpath logs/log.b0 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replSet b --dbpath data/b1 --port 27101 --fork --logpath logs/log.b1 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replSet b --dbpath data/b2 --port 27102 --fork --logpath logs/log.b2 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replSet c --dbpath data/c0 --port 27200 --fork --logpath logs/log.b0 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replSet c --dbpath data/c1 --port 27201 --fork --logpath logs/log.b1 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replSet c --dbpath data/c2 --port 27202 --fork --logpath logs/log.b2 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replSet d --dbpath data/d0 --port 27300 --fork --logpath logs/log.c0 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replSet d --dbpath data/d1 --port 27301 --fork --logpath logs/log.c1 --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongod --shardsvr --replSet d --dbpath data/d2 --port 27302 --fork --logpath logs/log.c2 --logappendÂ
Na prĂłxima etapa, executamos o comando mongos para iniciar os processos do mongos. Para saber onde estĂŁo os servidores de configuração, passamos IP dos servidores de configuração usando o parĂąmetro âconfigdb. Executaremos um Ășnico processo mongos em uma porta TCP mongo padrĂŁo para aderir Ă s melhores prĂĄticas.
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongos --configdb cfg/127.0.0. 1:26050.127.0.0. 1:26051.127 .0.0. 1:26052 --logpath logs/log.mongos0 --port 27017 --bind_ip 0.0.0.0 --fork --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongos --configdb cfg/127.0.0. 1:26050.127.0.0. 1:26051.127 .0.0. 1:26052 --logpath logs/log.mongos1 --port 26061 --bind_ip 0.0.0.0 --fork --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongos --configdb cfg/127.0.0. 1:26050.127.0.0. 1:26051.127 .0.0. 1:26052 --logpath logs/log.mongos2 --port 26062 --bind_ip 0.0.0.0 --fork --logappend
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongos --configdb cfg/127.0.0. 1:26050.127.0.0. 1:26051.127 .0.0. 1:26052 --logpath logs/log.mongos3 --port 26063 --bind_ip 0.0.0.0 --fork --logappendÂ
Observe que nunca executamos o servidor de configuração e o servidor fragmentado na mesma porta TCP padrão.
Agora, verifique se todos os processos estĂŁo funcionando sem problemas.
Ter, 27 de outubro piyushgoyal tutorial mongo $ ps -A | grep mongo
26745?? 0:00.95 mongod --configsvr --replSet cfg --dbpath config/cfg0 --port 26050 --fork --logpath logs/log.cfg0 --logappend
26748?? 0:00.90 mongod --configsvr --replSet cfg --dbpath config/cfg1 --port 26051 --fork --logpath logs/log.cfg1 --logappend
26754?? 0:00.90 mongod --configsvr --replSet cfg --dbpath config/cfg2 --port 26052 --fork --logpath logs/log.cfg2 --logappend
26757?? 0:00.77 mongod --shardsvr --replDefina um --dbpath data/a0 --port 27000 --fork --logpath logs/log.a0 --logappend
26760? 0:00.77 mongod --shardsvr --replDefina um --dbpath data/a1 --port 27001 --fork --logpath logs/log.a1 --logappend
26763?? 0:00.76 mongod --shardsvr --replDefina um --dbpath data/a2 --port 27002 --fork --logpath logs/log.a2 --logappend
26766?? 0:00.76 mongod --shardsvr --replSet b --dbpath data/b0 --port 27100 --fork --logpath logs/log.b0 --logappend
26769?? 0:00.77 mongod --shardsvr --replSet b --dbpath data/b1 --port 27101 --fork --logpath logs/log.b1 --logappend
26772?? 0:00.75 mongod --shardsvr --replSet b --dbpath data/b2 --port 27102 --fork --logpath logs/log.b2 --logappend
2675?? 0:00.73 mongod --shardsvr --replSet c --dbpath data/c0 --port 27200 --fork --logpath logs/log.b0 --logappend
26784?? 0:00.75 mongod --shardsvr --replSet c --dbpath data/c1 --port 27201 --fork --logpath logs/log.b1 --logappend
26791?? 0:00.74 mongod --shardsvr --replSet c --dbpath data/c2 --port 27202 --fork --logpath logs/log.b2 --logappend
26794?? 0:00.77 mongod --shardsvr --replSet d --dbpath data/d0 --port 27300 --fork --logpath logs/log.c0 --logappend
26797?? 0:00.75 mongod --shardsvr --replSet d --dbpath data/d1 --port 27301 --fork --logpath logs/log.c1 --logappend
26800?? 0:00.71 mongod --shardsvr --replSet d --dbpath data/d2 --port 27302 --fork --logpath logs/log.c2 --logappend
26803?? 0:00.00 mongos --configdb cfg/127.0.0. 1:26050.127 .0.0. 1:26051.127.0.0. 1:26052 --logpath logs/log.mongos0 --port 27017 --bind_ip 0.0.0.0 --fork --logappend
26804?? 0:00.24 mongos --configdb cfg/127.0.0. 1:26050.127 .0.0. 1:26051.127.0.0. 1:26052 --logpath logs/log.mongos0 --port 27017 --bind_ip 0.0.0.0 --fork --logappend
76826?? 8:58,30 /usr/local/opt/mongodb-community/bin/mongod --config /usr/local/etc/mongod.conf
26817 ttys009 0:00.00 grep mongo
26801 ttys016 0:00.01 mongos --configdb cfg/127.0.0. 1:26050,127 .0.0. 1:26051,127.0.0. 1:26052 --logpath logs/log.mongos0 --port 27017 --bind_ip 0.0.0.0 --fork --logappendÂ
Conecte-se a um dos servidores fragmentados. Por exemplo, vamos nos conectar a 0 fragmento
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongo --porta 27000Â
Execute o comando a seguir para verificar o status do conjunto de réplicas
> rs.status ()
{
âOperationTimeâ: Timestamp (0, 0),
âokâ: 0,
âerrmsgâ: ânenhuma configuração de replset foi recebidaâ,
âcĂłdigoâ: 94,
âcodeNameâ: âAinda nĂŁo inicializadoâ,
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (0, 0),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
}
}Â
O que se segue Ă© uma caixa de diĂĄlogo que diz ârun rs.initiate () ainda nĂŁo estĂĄ pronto para o conjuntoâ. Para iniciar o conjunto de rĂ©plicas, execute o seguinte comando:
> rs.initiate ()
{
âinfo2": ânenhuma configuração especificada. Usando uma configuração padrĂŁo para o conjuntoâ,
âeuâ: âlocalhost: 27000",
âokâ: 1,
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604637446, 1),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
},
âTempo de operaçãoâ: Timestamp (1604637446, 1)
}Â
Se vocĂȘ correr rs.status () mas uma vez, vocĂȘ verĂĄ que um Ășnico membro foi adicionado. Agora, vamos adicionar outros tambĂ©m a esse conjunto de rĂ©plicas.
R: PrimĂĄrio > rs.add (â127.0.0. 1:27001 â)
{
âokâ: 1,
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604637486, 1),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
},
âTempo de operaçãoâ: Timestamp (1604637486, 1)
}
R: PrimĂĄrio > rs.add (â127.0.0. 1:27002 â)
{
âokâ: 1,
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604637491, 1),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
},
âTempo de operaçãoâ: Timestamp (1604637491, 1)
}Â
Execute rs.status () para verificar o status da inicialização. Depois de iniciado, repita o mesmo processo para outros fragmentos e para o servidor de configuração.
Â
Conecte-se ao processo mongos para adicionar fragmentos ao cluster.
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongo --porta 27017Â
Execute o comando abaixo para adicionar fragmentos:
mongos> sh.addShard (âa/127.0.0. 1:27.000 â)
{
âShardAddedâ: âaâ,
âokâ: 1,
âTempo de operaçãoâ: Timestamp (1604637907, 8),
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604637907, 8),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
}
}
mongos> sh.addShard (âb/127.0.0. 1:27100 â)
{
âShardAddedâ: âbâ,
âokâ: 1,
âTempo de operaçãoâ: Timestamp (1604638045, 6),
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604638045, 6),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
}
}
mongos> sh.addShard (âc/127.0.0. 1:27200 â)
{
âShardAddedâ: âcâ,
âokâ: 1,
âTempo de operaçãoâ: Timestamp (1604638065, 4),
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604638065, 4),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
}
}
mongos> sh.addShard (âd/127.0.0. 1:27300 â)
{
âShardAddedâ: âdâ,
âokâ: 1,
âTempo de operaçãoâ: Timestamp (1604638086, 6),
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604638086, 6),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
}
}Nota: Quando vocĂȘ corre sh.addShard ('a/127.0.0. 1:27000'), se vocĂȘ obtiver uma saĂda conforme mostrado abaixo, tente correr sh.addShard ('a/127.0.0. 1:27001 ') ou sh.addShard ('a/127.0.0. 1:27002').
{
âEstĂĄ bemâ : 0,
âerrmsgâ : âna lista de sementes a/127.0.0. 1:27000, host 127.0.0. 1:27000 nĂŁo pertence ao conjunto de rĂ©plicas a; found {hosts: [\â localhost:27000\â,\ â127.0.0. 1:27001\â,\ â127.0.0. 1:27002\â], setName:\ âa\â, setVersion: 3, ismaster: true, secondary: false, primary:\ âlocalhost:27000\â, me:\ âlocalhost:27000\â, electionId: objectId ('7fffffff0000000000000001'), lastWrite: {opTime: {ts: Timestamp (1604637886, 1), t: 1}, lastWriteDate: nova data (1604637886, 1), t: 1}, lastWriteDate: nova data (1604637886, 1) 6000), majorityOpTime: {ts: Timestamp (1604637886, 1), t: 1}, majorityWriteDate: nova data (1604637886000)}, MaxBSONObjectSize: 16777216, MaxMessageSizeBytes: 48000000, MaxWriteBatchSize: 100000, LocalTime: nova data (1604637894239), LogicalSessionTimeoutMinutes: 30, ConnectionID: 21, MinWireVersion: 0, MaxWireVersion: 8, ReadOnly: false, compressĂŁo: [\ âsnappy\â,\ âzstd\â,\ âzstd\â,\ âzstd\â,\ âzstd\â,\ âzstd\â,\ âzstd lib\â], ok: 1.0, $clusterTime: {clusterTime: Timestamp (1604637886, 1), assinatura: {hash: binData (0, 0000000000000000000000000000000000) 000000000000), ID da chave: 0}}, Hora da operação: Timestamp (1604637886, 1)}â,
âcĂłdigoâ : 96,
âNome do cĂłdigoâ : âFalha na operaçãoâ,
âTempo de operaçãoâ : Carimbo de data/hora (1604637888, 1),
â$ ClusterTimeâ : {
âHora do clusterâ : Carimbo de data/hora (1604637888, 1),
âassinaturaâ : {
âhaxixeâ : Dados binĂĄrios (0,âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ : NĂșmero longo (0)
}
}
}Â
Fragmentando uma coleção
Corra sh.status () para verificar se os fragmentos foram adicionados.
Agora que configuramos o cluster, vamos testĂĄ-lo.
Ao fragmentar uma coleção, vocĂȘ deve escolher uma especĂfica chave fragmentada. Sem o qual a fragmentação Ă© impossĂvel. Isso ajuda a distribuir documentos entre os membros do cluster.
Os dados armazenados pela chave são chamados de pedaço. O tamanho do bloco só pode estar entre 1 e 1024 megabytes.
Por exemplo, vamos apoiar uma coleção dos seguintes documentos:
{
â_IDâ: ID do objeto (â5f97d97eb7a0a940f157ebc8"),
âxâ: 1
}Â
E usamos a tecla x para fragmentar a coleção. Os dados sĂŁo distribuĂdos conforme mostrado abaixo:
fragmento x_low x_high
0 1000 S2 ----> pedaço
1000 2000 S0 ----> pedaço
2000 3000 S1 ----> pedaçoÂ
Os documentos da coleção sĂŁo distribuĂdos com base na chave de fragmento atribuĂda. Os documentos de uma chave de fragmento especĂfica pertencem ao mesmo fragmento.
O processo de fragmentação pode ser dividido em dois:
Para manter este tutorial simples, preferimos a fragmentação baseada em intervalos. A fragmentação baseada em intervalo Ă© Ăștil para consultas que envolve um intervalo. No contexto desses processos, o sistema tambĂ©m realiza essas duas operaçÔes principais:
Por exemplo, se o tamanho de um bloco exceder o tamanho prescrito, o sistema, sozinho, tentarĂĄ descobrir a chave mediana apropriada para dividir o bloco em 2 ou mais partes. Isso Ă© conhecido como divisĂŁo, que Ă© uma alteração barata de metadados. No entanto, a migração Ă© responsĂĄvel por manter o equilĂbrio, por exemplo, mover um pedaço de um fragmento para outro. Essa Ă© uma operação cara que geralmente envolve a transferĂȘncia de dados no valor de ~ 1024 MB.
VocĂȘ ainda pode ler e gravar no banco de dados enquanto a migração estiver em andamento. HĂĄ uma propriedade de vivacidade nessas migraçÔes que mantĂ©m o banco de dados ativo para operaçÔes, portanto, um grande bloqueio nĂŁo ocorre.
Para nosso exemplo, estamos criando um banco de dados chamado tutorial com coleção foo e vão inserir alguns documentos.
Ter, 27 de outubro piyushgoyal tutorial mongo $ mongo --porta 27017
mongos> tutorial de uso
mongos> para (var i=0; i<999999; i++) {db.foo.insert ({x:i})}Â
Para permitir a fragmentação do banco de dados, precisamos habilitĂĄ-lo manualmente. Conecte-se Ă instĂąncia mongo e execute <dbname>sh. habilitar fragmentação (ââ).
mongos > sh.enableSharding (âtutorialâ)
{
âokâ: 1,
âTempo de operaçãoâ: Timestamp (1604638168, 21),
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604638168, 21),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: numberLong (0)
}
}
}Â
Se vocĂȘ executar sh.status () no banco de dados, ele retornarĂĄ âpartitioned = Trueâ no banco de dados do tutorial.
Agora, compartilhamos nossa coleção usando tecla x. Para fragmentar uma coleção, precisamos primeiro criar um Ăndice na chave e depois executar <db_name>Coleção Sh.Shard (â. <collection_name>â,<key>).
mongos> db.foo.ensureIndex ({x: 1})
{
âcruâ: {
âb/127.0.0. 1:27101,127.0.0. 1:27102, localhost:27100": {
âColeção criada automaticamenteâ: falso,
ânumIndexesBeforeâ: 1,
ânumIndexesAfterâ: 2,
âokâ: 1
}
},
âokâ: 1,
âTempo de operaçãoâ: Timestamp (1604638185, 9),
â$ clusterTimeâ: {
âClusterTimeâ: Timestamp (1604638185, 9),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
}
}
mongos> Coleção Sh.Shard (âtutorial.fooâ, {x: 1})
{
âcollectionshardedâ: âtutorial.fooâ,
âUUID de coleçãoâ: UUID (âb6506a90-dc0f-48d2-ba22-c15bbc94c0d6"),
âokâ: 1,
âTempo de operaçãoâ: Timestamp (1604638203, 39),
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604638203, 39),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
}
}Â
A coleção agora estĂĄ fragmentada. Para verificar a distribuição do fragmento, o nĂșmero de blocos (nchunks), execute o seguinte comando:
Mongos > tutorial de uso
mongĂłlia > db.foo.stats ()Â
Para saber a distribuição dos blocos em todos os bancos de dados, execute o comando abaixo:
mongos> sh.status ()Â
Vamos fazer algumas consultas.
Mongos > tutorial de uso
mongos> db.foo.find ({x: 55})Para visualizar o plano de consulta ou entender como o cluster consulta diferentes servidores para obter o documento, acrescente .explain () ao final da consulta.
mongos> db.foo.find ({x: 55}) .explain ()
{
âPlanejador de consultasâ: {
âVersĂŁo do Mongos Plannerâ: 1,
âPlano vencedorâ: {
âestĂĄgioâ: âSINGLE_SHARDâ,
âfragmentosâ: [
{
âShardNameâ: âbâ,
âConnectionStringâ: âb/127.0.0. 1:27101.127.0.0. 1:27102, localhost: 27100",
âInformaçÔes do servidorâ: {
âhostâ: âPiyushs-macbook-pro.localâ,
âportaâ: 27100,
âversĂŁoâ: â4.2.8",
âVersĂŁo Gitâ: â43d25964249164d76d5e04dd6cf38f6111e21f5fâ
},
âPlannerVersionâ: 1,
ânamespaceâ: âtutorial.fooâ,
âIndexFilterSetâ: falso,
âConsulta analisadaâ: {
âxâ: {
â$ eqâ: 55
}
},
âqueryHashâ: â716F281Aâ,
âPlanCacheKeyâ: â0FA0E5FDâ,
âPlano vencedorâ: {
âestĂĄgioâ: âPESQUISARâ,
âInputStageâ: {
âestĂĄgioâ: âFILTRO DE COMPARTILHAMENTOâ,
âInputStageâ: {
âestĂĄgioâ: âIXSCANâ,
âChave padrĂŁoâ: {
âxâ: 1
},
âNome do Ăndiceâ: âx_1",
âisMultiKeyâ: falso,
âCaminhos de vĂĄrias chavesâ: {
âxâ: []
},
âisUniqueâ: falso,
âisSparseâ: falso,
âisPartialâ: falso,
âVersĂŁo do Ăndiceâ: 2,
âdireçãoâ: âpara frenteâ,
âIndexBoundsâ: {
âxâ: [
â[55,0, 55,0]â
]
}
}
}
},
âPlanos rejeitadosâ: []
}
]
}
},
âInformaçÔes do servidorâ: {
âhostâ: âPiyushs-macbook-pro.localâ,
âportaâ: 27017,
âversĂŁoâ: â4.2.8",
âVersĂŁo Gitâ: â43d25964249164d76d5e04dd6cf38f6111e21f5fâ
},
âokâ: 1,
âTempo de operaçãoâ: Timestamp (1604638250, 30),
â$ clusterTimeâ: {
âClusterTimeâ: Carregamento de dados/hora (1604638255, 27),
âassinaturaâ: {
âhashâ: binData (0, âAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=â),
âID da chaveâ: NumberLong (0)
}
}
}Â
Na segunda parte desta série de duas partes, exploraremos vårios métodos pelos quais podemos selecionar uma chave fragmentada.