{"id":61909,"date":"2023-11-08T07:11:12","date_gmt":"2023-11-08T10:11:12","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=61909&#038;preview=true&#038;preview_id=61909"},"modified":"2023-11-20T12:40:15","modified_gmt":"2023-11-20T15:40:15","slug":"mongodb-sharding","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/","title":{"rendered":"Guia Completo para Entender o MongoDB Sharding"},"content":{"rendered":"<p>No mundo atual, orientado por dados, em que o volume e a complexidade dos dados continuam a se expandir em um ritmo sem precedentes, a necessidade de solu\u00e7\u00f5es de bancos de dados robustas e dimension\u00e1veis tornou-se fundamental. Estima-se que <a href=\"https:\/\/www.statista.com\/statistics\/871513\/worldwide-data-created\/\" target=\"_blank\" rel=\"noopener noreferrer\">180 zettabytes de dados<\/a> ser\u00e3o criados at\u00e9 2025, um n\u00famero dif\u00edcil at\u00e9 de imaginar.<\/p>\n<p>\u00c0 medida que os dados e a demanda dos usu\u00e1rios crescem exponencialmente, confiar em um banco de dados hospedado em um \u00fanico local se torna impratic\u00e1vel. Isso faz o sistema ficar mais lento e sobrecarrega os <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-um-desenvolvedor-full-stack\/\">desenvolvedores<\/a>. Mas voc\u00ea pode adotar v\u00e1rias solu\u00e7\u00f5es para <a href=\"https:\/\/kinsta.com\/pt\/mykinsta\/\">otimizar seu banco de dados<\/a>, como o sharding \u2014 a <a href=\"https:\/\/kinsta.com\/pt\/blog\/fragmentacao-do-banco-de-dados\/\">fragmenta\u00e7\u00e3o do banco de dados<\/a>.<\/p>\n<p>Neste guia completo, exploraremos em detalhes o MongoDB Sharding. Vamos esclarecer seus benef\u00edcios, componentes, pr\u00e1ticas recomendadas e erros comuns, al\u00e9m de mostrar como voc\u00ea pode dar os primeiros passos.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>O que \u00e9 sharding de banco de dados?<\/h2>\n<p>Sharding de banco de dados \u00e9 uma t\u00e9cnica de gerenciamento de banco de dados que envolve a divis\u00e3o horizontal de um banco de dados em crescimento em unidades menores e mais gerenci\u00e1veis, conhecidas como <b>fragmentos <\/b>(shards).<\/p>\n<p>\u00c0 medida que seu banco de dados se expande, torna-se pr\u00e1tico dividi-lo em v\u00e1rias partes menores e armazenar cada parte separadamente em diferentes m\u00e1quinas. Essas partes menores, ou shards, s\u00e3o subconjuntos independentes do banco de dados total. Esse processo de dividir e distribuir dados \u00e9 o que constitui o sharding de banco de dados.<\/p>\n<figure id=\"attachment_157232\" aria-describedby=\"caption-attachment-157232\" style=\"width: 512px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Database-Sharding-Illustration.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-157232 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Database-Sharding-Illustration.png\" alt=\"Ilustra\u00e7\u00e3o do sharding de banco de dados. \" width=\"512\" height=\"185\"><\/a><figcaption id=\"caption-attachment-157232\" class=\"wp-caption-text\">Ilustra\u00e7\u00e3o do sharding de banco de dados. (Fonte da imagem: <a href=\"https:\/\/www.linkedin.com\/pulse\/intro-database-sharding-can-bad-idea-saurav-prateek\/\" target=\"_blank\" rel=\"noopener noreferrer\">LinkedIn<\/a>)<\/figcaption><\/figure>\n<p>Ao implementar um banco de dados fragmentado (sharded), existem duas abordagens principais: desenvolver uma solu\u00e7\u00e3o de sharding personalizada ou pagar por uma j\u00e1 existente. Isso levanta a quest\u00e3o de qual \u00e9 mais adequado: construir uma solu\u00e7\u00e3o fragmentada ou pagar por uma.<\/p>\n<figure id=\"attachment_157234\" aria-describedby=\"caption-attachment-157234\" style=\"width: 512px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Build-vs-Buy-for-a-Sharding-Solution.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-157234 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Build-vs-Buy-for-a-Sharding-Solution.jpg\" alt=\"Imagem do meme \"Construir vs Comprar uma solu\u00e7\u00e3o de sharding\".\" width=\"512\" height=\"205\"><\/a><figcaption id=\"caption-attachment-157234\" class=\"wp-caption-text\">Imagem do meme &#8220;Construir vs Comprar uma solu\u00e7\u00e3o de sharding&#8221;. (Fonte da imagem: <a href=\"https:\/\/www.linkedin.com\/pulse\/build-vs-buy-what-do-you-expect-see-new-normal-naidu\/\" target=\"_blank\" rel=\"noopener noreferrer\">LinkedIn<\/a>)<\/figcaption><\/figure>\n<p>Para fazer essa escolha, voc\u00ea precisa considerar o custo da integra\u00e7\u00e3o com terceiros, tendo em mente os seguintes fatores:<\/p>\n<ul>\n<li><b>Habilidades do desenvolvedor e capacidade de aprendizado<\/b>: A curva de aprendizado associada ao produto e quanto ele se alinha com as habilidades de seus desenvolvedores.<\/li>\n<li><b>O modelo de dados e a API oferecidos pelo sistema<\/b>: Cada sistema de dados tem sua pr\u00f3pria maneira de representar os dados. A conveni\u00eancia e a facilidade com que voc\u00ea pode integrar seus aplicativos ao produto \u00e9 um fator importante a ser considerado.<\/li>\n<li><b>Suporte ao cliente e documenta\u00e7\u00e3o on-line<\/b>: Nos casos em que voc\u00ea pode encontrar desafios ou precisar de assist\u00eancia durante a integra\u00e7\u00e3o, a qualidade e a disponibilidade do suporte ao cliente e uma documenta\u00e7\u00e3o on-line abrangente se tornam cruciais.<\/li>\n<li><b>Disponibilidade de implanta\u00e7\u00e3o na nuvem<\/b>: \u00c0 medida que mais empresas fazem a transi\u00e7\u00e3o para a nuvem, \u00e9 importante determinar se o produto de terceiros pode ser implantado em um ambiente de nuvem.<\/li>\n<\/ul>\n<p>Com base nesses fatores, voc\u00ea pode decidir entre criar uma solu\u00e7\u00e3o de sharding ou pagar por uma solu\u00e7\u00e3o que fa\u00e7a o trabalho pesado por voc\u00ea.<\/p>\n<p>Atualmente a maioria dos bancos de dados dispon\u00edveis no mercado suporta o sharding de banco de dados. Por exemplo, bancos de dados relacionais como o MariaDB (parte da pilha de servidores de alta performance na <a href=\"https:\/\/kinsta.com\/pt\/blog\/fragmentacao-do-banco-de-dados\/\">Kinsta<\/a>) e <a href=\"https:\/\/kinsta.com\/pt\/blog\/mongodb-vs-mysql\/\">bancos de dados NoSQL<\/a> como o MongoDB.<\/p>\n<h2>O que \u00e9 o MongoDB Sharding?<\/h2>\n<p>O principal objetivo do uso de um banco de dados NoSQL \u00e9 sua capacidade de lidar com os requisitos de computa\u00e7\u00e3o e armazenamento que envolvem os processos de consulta e armazenamento de enormes volumes de dados.<\/p>\n<p>Em geral, um banco de dados MongoDB cont\u00e9m um grande n\u00famero de cole\u00e7\u00f5es. Cada cole\u00e7\u00e3o consiste em v\u00e1rios documentos que cont\u00eam dados na forma de pares de valores-chave. Voc\u00ea pode dividir essa grande cole\u00e7\u00e3o em v\u00e1rias cole\u00e7\u00f5es menores usando o MongoDB Sharding. Isso permite que o MongoDB realize consultas sem sobrecarregar muito o servidor.<\/p>\n<p>Por exemplo, a Telef\u00f3nica Tech gerencia mais de <a href=\"https:\/\/www.mongodb.com\/customers\/telefonica\" target=\"_blank\" rel=\"noopener noreferrer\">30 milh\u00f5es de dispositivos IoT<\/a> em todo o mundo. Para acompanhar o uso cada vez maior dos dispositivos, eles precisavam de uma plataforma que pudesse ser dimensionada de forma el\u00e1stica e gerenciar um ambiente de dados em r\u00e1pido crescimento. A tecnologia do MongoDB Sharding foi a escolha certa para eles, pois era a mais adequada \u00e0s suas necessidades de custo e capacidade.<\/p>\n<p>Com o MongoDB Sharding, a Telef\u00f3nica Tech executa bem mais de 115.000 consultas por segundo. Isso equivale a 30.000 inser\u00e7\u00f5es no banco de dados por segundo, com menos de um mil\u00e9simo de segundo de lat\u00eancia!<\/p>\n<h2>Benef\u00edcios do MongoDB Sharding<\/h2>\n<p>Aqui est\u00e3o alguns benef\u00edcios do MongoDB Sharding para dados em grande escala que voc\u00ea pode aproveitar:<\/p>\n<h3>Capacidade de armazenamento<\/h3>\n<p>J\u00e1 vimos que a fragmenta\u00e7\u00e3o espalha os dados entre os fragmentos (shards) do cluster. Essa distribui\u00e7\u00e3o permite que cada fragmento contenha um peda\u00e7o dos dados totais do cluster. Fragmentos extras podem aumentar a capacidade de armazenamento do cluster sob medida para o conjunto crescente de dados.<\/p>\n<h3>Leituras\/escritas<\/h3>\n<p>O MongoDB distribui a carga de trabalho de leitura e grava\u00e7\u00e3o entre os fragmentos em um cluster fragmentado, permitindo que cada fragmento processe um subconjunto das opera\u00e7\u00f5es do cluster. Ambas as cargas de trabalho podem ser dimensionadas horizontalmente no cluster adicionando-se mais fragmentos.<\/p>\n<h3>Alta disponibilidade<\/h3>\n<p>A implanta\u00e7\u00e3o de fragmentos e servidores de configura\u00e7\u00e3o como conjuntos de r\u00e9plicas oferece maior disponibilidade. Agora, mesmo que um ou mais conjuntos de r\u00e9plicas de fragmentos fiquem completamente indispon\u00edveis, o cluster fragmentado pode executar leituras e grava\u00e7\u00f5es parciais.<\/p>\n<h3>Prote\u00e7\u00e3o contra interrup\u00e7\u00e3o<\/h3>\n<div class=\"flex-1 overflow-hidden\">\n<div class=\"react-scroll-to-bottom--css-yyihd-79elbk h-full\">\n<div class=\"react-scroll-to-bottom--css-yyihd-1n7m0yu\">\n<div class=\"flex flex-col text-sm gizmo:pb-9 dark:bg-gray-800 gizmo:dark:bg-transparent\">\n<div class=\"w-full text-token-text-primary border-b border-black\/10 gizmo:border-0 dark:border-gray-900\/50 gizmo:dark:border-0 bg-gray-50 gizmo:bg-transparent dark:bg-[#444654] gizmo:dark:bg-transparent\" data-testid=\"conversation-turn-17\">\n<div class=\"p-4 gizmo:py-2 justify-center text-base md:gap-6 md:py-6 m-auto\">\n<div class=\"flex flex-1 gap-4 text-base mx-auto md:gap-6 gizmo:gap-3 gizmo:md:px-5 gizmo:lg:px-1 gizmo:xl:px-5 md:max-w-2xl lg:max-w-[38rem] gizmo:md:max-w-3xl gizmo:lg:max-w-[40rem] gizmo:xl:max-w-[48rem] xl:max-w-3xl } group final-completion\">\n<div class=\"relative flex w-[calc(100%-50px)] flex-col gizmo:w-full lg:w-[calc(100%-115px)] agent-turn\">\n<div class=\"flex-col gap-1 md:gap-3\">\n<div class=\"flex flex-grow flex-col max-w-full gap-3 gizmo:gap-0\">\n<div class=\"min-h-[20px] text-message peer flex flex-col items-start gap-3 whitespace-pre-wrap break-words peer-[.text-message]:mt-5 overflow-x-auto\" data-message-author-role=\"assistant\" data-message-id=\"63b2c244-25b5-4c0f-8e98-9686aee48db1\">\n<div class=\"markdown prose w-full break-words dark:prose-invert dark\">\n<p>Muitos usu\u00e1rios s\u00e3o afetados se uma m\u00e1quina falha devido a uma interrup\u00e7\u00e3o n\u00e3o planejada. Em um sistema n\u00e3o fragmentado, como o banco de dados inteiro teria sa\u00eddo do ar, o impacto \u00e9 enorme. O raio de impacto de uma m\u00e1 experi\u00eancia do usu\u00e1rio pode ser contido atrav\u00e9s do MongoDB sharding.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3>Distribui\u00e7\u00e3o geogr\u00e1fica e desempenho<\/h3>\n<p>Os fragmentos replicados podem ser colocados em diferentes regi\u00f5es. Isso permite fornecer aos clientes acesso com baixa lat\u00eancia aos seus dados, ou seja, redirecionar as solicita\u00e7\u00f5es dos consumidores para o fragmento localizado na regi\u00e3o mais pr\u00f3xima deles. De acordo com a pol\u00edtica de governan\u00e7a de dados de uma regi\u00e3o espec\u00edfica, pode-se configurar fragmentos espec\u00edficos para serem alojados nessa regi\u00e3o.<\/p>\n<h2>Componentes dos clusters fragmentados do MongoDB<\/h2>\n<div class=\"flex-1 overflow-hidden\">\n<div class=\"react-scroll-to-bottom--css-ijasl-79elbk h-full\">\n<div class=\"react-scroll-to-bottom--css-ijasl-1n7m0yu\">\n<div class=\"flex flex-col text-sm gizmo:pb-9 dark:bg-gray-800 gizmo:dark:bg-transparent\">\n<div class=\"w-full text-token-text-primary border-b border-black\/10 gizmo:border-0 dark:border-gray-900\/50 gizmo:dark:border-0 bg-gray-50 gizmo:bg-transparent dark:bg-[#444654] gizmo:dark:bg-transparent\" data-testid=\"conversation-turn-11\">\n<div class=\"p-4 gizmo:py-2 justify-center text-base md:gap-6 md:py-6 m-auto\">\n<div class=\"flex flex-1 gap-4 text-base mx-auto md:gap-6 gizmo:gap-3 gizmo:md:px-5 gizmo:lg:px-1 gizmo:xl:px-5 md:max-w-3xl } group final-completion\">\n<div class=\"relative flex w-[calc(100%-50px)] flex-col gizmo:w-full lg:w-[calc(100%-115px)] agent-turn\">\n<div class=\"flex-col gap-1 md:gap-3\">\n<div class=\"flex flex-grow flex-col max-w-full gap-3 gizmo:gap-0\">\n<div class=\"min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&#038;]:mt-5 overflow-x-auto\" data-message-author-role=\"assistant\" data-message-id=\"619ab16d-5e2a-445d-b9eb-7d70816cdbbe\">\n<div class=\"markdown prose w-full break-words dark:prose-invert dark\">\n<p>Ap\u00f3s detalhar o conceito de um cluster fragmentado (sharded cluster) do MongoDB, vamos explorar mais a fundo os seus componentes essenciais.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"3\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Shard (Fragmento)<\/h3>\n<p>Cada shard possui um subconjunto dos dados fragmentados. A partir do MongoDB 3.6, os shards devem ser implantados como um conjunto de r\u00e9plicas para garantir alta disponibilidade e redund\u00e2ncia.<\/p>\n<p>Cada banco de dados no cluster fragmentado possui um shard prim\u00e1rio que conter\u00e1 todas as cole\u00e7\u00f5es n\u00e3o fragmentadas desse banco de dados. O shard prim\u00e1rio n\u00e3o est\u00e1 relacionado ao prim\u00e1rio em um conjunto de r\u00e9plicas.<\/p>\n<p>Para alterar o shard prim\u00e1rio de um banco de dados, voc\u00ea pode usar o comando <code>movePrimary<\/code>. O processo de migra\u00e7\u00e3o do shard prim\u00e1rio pode levar um tempo consider\u00e1vel para ser conclu\u00eddo.<\/p>\n<p>Durante esse tempo, n\u00e3o \u00e9 recomendado tentar acessar as cole\u00e7\u00f5es associadas ao banco de dados at\u00e9 que o processo de migra\u00e7\u00e3o seja conclu\u00eddo. Esse processo pode impactar as opera\u00e7\u00f5es gerais do cluster com base na quantidade de dados sendo migrados.<\/p>\n<p>Voc\u00ea pode usar o m\u00e9todo <code>sh.status()<\/code> no <strong>mongosh<\/strong> para obter uma vis\u00e3o geral do cluster. Este m\u00e9todo retornar\u00e1 o shard prim\u00e1rio para o banco de dados, juntamente com a distribui\u00e7\u00e3o de chunks pelos<\/p>\n<h3>2. Servidores de configura\u00e7\u00e3o<\/h3>\n<p>A implanta\u00e7\u00e3o de servidores de configura\u00e7\u00e3o para clusters fragmentados como conjuntos de r\u00e9plicas pode melhorar a consist\u00eancia no servidor de configura\u00e7\u00e3o. Isso ocorre porque o MongoDB pode aproveitar os protocolos padr\u00e3o de leitura e grava\u00e7\u00e3o do conjunto de r\u00e9plicas para os dados de configura\u00e7\u00e3o.<\/p>\n<p>Para implementar servidores de configura\u00e7\u00e3o como um conjunto de r\u00e9plicas, voc\u00ea ter\u00e1 de executar o mecanismo de armazenamento WiredTiger. O WiredTiger usa controle de simultaneidade no n\u00edvel do documento para as opera\u00e7\u00f5es de grava\u00e7\u00e3o. Assim, v\u00e1rios clientes podem modificar diferentes documentos de uma cole\u00e7\u00e3o ao mesmo tempo.<\/p>\n<p>Os servidores de configura\u00e7\u00e3o armazenam os metadados de um cluster fragmentado no banco de dados de configura\u00e7\u00e3o. Para acessar o banco de dados de configura\u00e7\u00e3o, voc\u00ea pode usar o seguinte comando no shell do MongoDB:<\/p>\n<pre><code class=\"language-bash\"><code>use config<\/code><\/code><\/pre>\n<p>Aqui est\u00e3o algumas restri\u00e7\u00f5es que voc\u00ea deve ter em mente:<\/p>\n<ul>\n<li>Uma configura\u00e7\u00e3o de conjunto de r\u00e9plicas usada para servidores de configura\u00e7\u00e3o deve ter zero \u00e1rbitro. Um \u00e1rbitro participa de uma elei\u00e7\u00e3o para o prim\u00e1rio, mas n\u00e3o tem uma c\u00f3pia do conjunto de dados e n\u00e3o pode se tornar o prim\u00e1rio.<\/li>\n<li>Esse conjunto de r\u00e9plicas n\u00e3o pode ter nenhum membro atrasado. Os membros atrasados t\u00eam c\u00f3pias do conjunto de dados do conjunto de r\u00e9plicas. Mas o conjunto de dados de um membro atrasado cont\u00e9m um estado anterior ou atrasado do conjunto de dados.<\/li>\n<li>Voc\u00ea precisa criar \u00edndices para os servidores de configura\u00e7\u00e3o. Em termos simples, nenhum membro deve ter a configura\u00e7\u00e3o <code>members[n].buildIndexes<\/code> definida como <code>false<\/code>.<\/li>\n<\/ul>\n<p>Se o conjunto de r\u00e9plicas do servidor de configura\u00e7\u00e3o perder seu membro principal e n\u00e3o puder eleger um, os metadados do cluster se tornar\u00e3o somente leitura. Voc\u00ea ainda poder\u00e1 ler e gravar nos fragmentos, mas n\u00e3o haver\u00e1 divis\u00e3o de partes ou migra\u00e7\u00e3o at\u00e9 que o conjunto de r\u00e9plicas possa eleger um prim\u00e1rio.<\/p>\n<h3>3. Roteadores de consulta<\/h3>\n<p>As inst\u00e2ncias mongos do MongoDB podem servir como roteadores de consulta, permitindo que os aplicativos clientes e os clusters fragmentados se conectem facilmente.<\/p>\n<p>A partir do MongoDB 4.4, mongos suporta consultas cobertas para diminuir as lat\u00eancias. Com isso, as inst\u00e2ncias mongos enviar\u00e3o opera\u00e7\u00f5es de leitura para dois membros do conjunto de r\u00e9plicas para cada fragmento consultado. E ent\u00e3o retornar\u00e3o os resultados do primeiro respondente por fragmento.<\/p>\n<p>Veja como os tr\u00eas componentes interagem em um cluster fragmentado:<\/p>\n<figure id=\"attachment_157236\" aria-describedby=\"caption-attachment-157236\" style=\"width: 1132px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Interaction-of-Sharded-Cluster-Components.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-157236 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Interaction-of-Sharded-Cluster-Components.png\" alt=\"Intera\u00e7\u00e3o dos componentes do cluster fragmentado. \" width=\"1132\" height=\"655\"><\/a><figcaption id=\"caption-attachment-157236\" class=\"wp-caption-text\">Intera\u00e7\u00e3o dos componentes do cluster fragmentado. (Fonte da imagem: <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/sharding\/\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB Sharding<\/a>)<\/figcaption><\/figure>\n<p>Uma inst\u00e2ncia mongos direcionar\u00e1 uma consulta a um cluster por:<\/p>\n<ol>\n<li>Verificando a lista de shards que precisam receber a consulta.<\/li>\n<li>Estabelecendo um cursor em todos os shards alvo.<\/li>\n<\/ol>\n<p>Em seguida, o mongos mesclar\u00e1 os dados de cada fragmento alvo e retornar\u00e1 o documento resultante. Alguns modificadores de consulta, como classifica\u00e7\u00e3o, s\u00e3o executados em cada fragmento antes que o mongos recupere os resultados.<\/p>\n<p>Em alguns casos, quando a chave de fragmento (shard key) ou um prefixo de chave de fragmento fizer parte da consulta, o mongos executar\u00e1 uma opera\u00e7\u00e3o pr\u00e9-planejada, apontando as consultas para uma subclasse de fragmentos no cluster.<\/p>\n<p>Para um <b>cluster de produ\u00e7\u00e3o<\/b>, garanta que os dados sejam redundantes e que seus sistemas estejam altamente dispon\u00edveis. Voc\u00ea pode escolher a seguinte configura\u00e7\u00e3o para uma implanta\u00e7\u00e3o de um cluster de produ\u00e7\u00e3o fragmentado:<\/p>\n<ul>\n<li>Implantar cada shard como um conjunto de r\u00e9plicas de 3 membros.<\/li>\n<li>Implantar servidores de configura\u00e7\u00e3o como um conjunto de r\u00e9plicas de 3 membros.<\/li>\n<li>Implantar um ou mais roteadores mongos.<\/li>\n<\/ul>\n<p>Para um <b>cluster que n\u00e3o seja de produ\u00e7\u00e3o<\/b>, voc\u00ea pode implantar um cluster fragmentado com os seguintes componentes:<\/p>\n<ul>\n<li>Um \u00fanico conjunto de r\u00e9plicas de shard.<\/li>\n<li>Um servidor de configura\u00e7\u00e3o de conjunto de r\u00e9plicas<\/li>\n<li>Uma inst\u00e2ncia mongos<\/li>\n<\/ul>\n<h2>Como funciona o Sharding no MongoDB?<\/h2>\n<p>Agora que j\u00e1 discutimos os diferentes componentes de um cluster fragmentado, \u00e9 hora de nos aprofundarmos no processo.<\/p>\n<p>Para dividir os dados em v\u00e1rios servidores, voc\u00ea usar\u00e1 &#8220;mongos&#8221;. Quando voc\u00ea se conectar para enviar as consultas ao MongoDB, o mongos procurar\u00e1 e descobrir\u00e1 onde os dados residem. Em seguida, ele os obter\u00e1 do servidor certo e mesclar\u00e1 tudo, caso tenham sido divididos em v\u00e1rios servidores.<\/p>\n<p>Como isso ser\u00e1 feito no <a href=\"https:\/\/kinsta.com\/pt\/blog\/desenvolvedor-backend\/\">backend<\/a>, voc\u00ea n\u00e3o precisar\u00e1 fazer nada no lado do aplicativo. O MongoDB agir\u00e1 como se fosse uma conex\u00e3o de consulta normal. Seu cliente se conectar\u00e1 ao mongos, e o servidor de configura\u00e7\u00e3o cuidar\u00e1 do resto.<\/p>\n<h2>Como configurar o MongoDB Sharding passo a passo?<\/h2>\n<p>Configurar o sharding no MongoDB \u00e9 um processo que envolve v\u00e1rias etapas para garantir um cluster do banco de dados est\u00e1vel e eficiente. Aqui est\u00e3o instru\u00e7\u00f5es detalhadas passo a passo sobre como configurar o sharding no MongoDB.<\/p>\n<p>Antes de come\u00e7armos, \u00e9 importante observar que para configurar o sharding no MongoDB, voc\u00ea precisar\u00e1 de pelo menos tr\u00eas servidores: um para o servidor de configura\u00e7\u00e3o, um para a inst\u00e2ncia mongos e um ou mais para os shards.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"6\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Crie um diret\u00f3rio a partir do servidor de configura\u00e7\u00e3o<\/h3>\n<p>Para come\u00e7ar, criaremos um diret\u00f3rio para os dados do servidor de configura\u00e7\u00e3o. Voc\u00ea pode fazer isso executando o seguinte comando no primeiro servidor:<\/p>\n<pre><code class=\"language-bash\"> mkdir \/data\/configdb<\/code><\/pre>\n<h3>2. Inicie o MongoDB no modo de configura\u00e7\u00e3o<\/h3>\n<p>Em seguida, iniciaremos o MongoDB no modo de configura\u00e7\u00e3o no primeiro servidor usando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">mongod --configsvr --dbpath \/data\/configdb --port 27019<\/code><\/pre>\n<p>Isso iniciar\u00e1 o servidor de configura\u00e7\u00e3o em <code>port 27019 <\/code> e armazenar\u00e1 seus dados no diret\u00f3rio <strong>\/data\/configdb<\/strong>. Observe que estamos usando o sinalizador <code>--configsvr<\/code> para indicar que esse servidor ser\u00e1 usado como um servidor de configura\u00e7\u00e3o.<\/p>\n<h3>3. Inicie a inst\u00e2ncia mongos<\/h3>\n<p>A pr\u00f3xima etapa \u00e9 iniciar a inst\u00e2ncia mongos. Esse processo encaminhar\u00e1 as consultas para os fragmentos corretos com base na chave de fragmenta\u00e7\u00e3o. Para iniciar a inst\u00e2ncia mongos, use o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">mongos --configdb &lt;config server&gt;:27019<\/code><\/pre>\n<p>Substitua <code>&lt;config server&gt;<\/code> pelo endere\u00e7o IP ou nome do host da m\u00e1quina em que o servidor de configura\u00e7\u00e3o est\u00e1 sendo executado.<\/p>\n<h3>4. Conecte \u00e0 inst\u00e2ncia mongos<\/h3>\n<p>Quando a inst\u00e2ncia mongos estiver em execu\u00e7\u00e3o, voc\u00ea poder\u00e1 se conectar a ela usando o shell do MongoDB. Voc\u00ea pode fazer isso executando o seguinte comando:<\/p>\n<pre><code class=\"language-markdown\">mongo --host &lt;mongos-server&gt; --port 27017<\/code><\/pre>\n<p>Nesse comando, <code>&lt;mongos-server&gt;<\/code> deve ser substitu\u00eddo pelo nome do host ou endere\u00e7o IP do servidor que est\u00e1 executando a inst\u00e2ncia mongos. Isso abrir\u00e1 o shell do MongoDB, permitindo que voc\u00ea interaja com a inst\u00e2ncia mongos e adicione servidores ao cluster.<\/p>\n<p>Substitua<code>&lt;mongos-server&gt;<\/code> pelo endere\u00e7o IP ou nome do host da m\u00e1quina onde a inst\u00e2ncia mongos est\u00e1 sendo executada.<\/p>\n<h3>5. Adicione servidores aos clusters<\/h3>\n<p>Agora que estamos conectados \u00e0 inst\u00e2ncia mongos, podemos adicionar servidores ao cluster executando o seguinte comando:<\/p>\n<pre><code class=\"language-markdown\">sh.addShard(\"&lt;shard-server&gt;:27017\")<\/code><\/pre>\n<p>Nesse comando, <code>&lt;shard-server&gt;<\/code> deve ser substitu\u00eddo pelo nome do host ou endere\u00e7o IP do servidor que executa o fragmento. Esse comando adicionar\u00e1 o fragmento ao cluster e o tornar\u00e1 dispon\u00edvel para uso.<\/p>\n<p>Repita essa etapa para cada fragmento que voc\u00ea deseja adicionar ao cluster.<\/p>\n<h3>6. Habilite a fragmenta\u00e7\u00e3o para o banco de dados<\/h3>\n<p>Finalmente, habilitaremos o sharding para um banco de dados executando o seguinte comando:<\/p>\n<pre><code class=\"language-markdown\">sh.enableSharding(\"&lt;database&gt;\")<\/code><\/pre>\n<p>Nesse comando, <code>&lt;database&gt;<\/code> deve ser substitu\u00eddo pelo nome do banco de dados que voc\u00ea deseja fragmentar. Isso habilitar\u00e1 o sharding para o banco de dados escolhido, permitindo distribuir seus dados por v\u00e1rios shards.<\/p>\n<p>E \u00e9 isso! Seguindo essas etapas, voc\u00ea deve ter um cluster fragmentado no MongoDB totalmente funcional, pronto para escalar horizontalmente e lidar com cargas de tr\u00e1fego elevado.<\/p>\n<h2>Melhores pr\u00e1ticas para o sharding no MongoDB<\/h2>\n<p>Embora tenhamos configurado nosso cluster fragmentado, \u00e9 essencial monitorar e manter o cluster regularmente para garantir o <a href=\"https:\/\/kinsta.com\/pt\/blog\/apm-ferramentas\/\">desempenho ideal<\/a>. Algumas das melhores pr\u00e1ticas para o sharding no MongoDB incluem:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"7\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Determine a chave de fragmento correta<\/h3>\n<p>A chave de fragmento (shard key) \u00e9 um fator cr\u00edtico na fragmenta\u00e7\u00e3o do MongoDB que determina como os dados s\u00e3o distribu\u00eddos entre os fragmentos. \u00c9 importante que voc\u00ea escolha uma chave de fragmento que distribua uniformemente os dados entre os fragmentos e ofere\u00e7a suporte \u00e0s consultas mais comuns. Voc\u00ea deve evitar escolher uma chave de fragmento que cause hotspots ou distribui\u00e7\u00e3o desigual de dados, pois isso pode levar a problemas de desempenho.<\/p>\n<p>Para escolher a chave de fragmento correta, voc\u00ea deve analisar seus dados e os tipos de consultas que realizar\u00e1 e selecionar uma chave que atenda a esses requisitos.<\/p>\n<h3>2. Planeje o crescimento dos dados<\/h3>\n<p>Ao configurar o cluster fragmentado, planeje o crescimento futuro, come\u00e7ando com fragmentos suficientes para lidar com a carga de trabalho atual e adicionando mais conforme necess\u00e1rio. Certifique-se de que sua infraestrutura de hardware e rede possa suportar o n\u00famero de fragmentos e a quantidade de dados que voc\u00ea espera ter no futuro.<\/p>\n<h3>3. Use hardware dedicado para os fragmentos<\/h3>\n<p>Use hardware dedicado para cada fragmento para obter desempenho e confiabilidade ideais. Cada fragmento deve ter seu pr\u00f3prio servidor ou m\u00e1quina virtual, para que possa utilizar todos os recursos sem nenhuma interfer\u00eancia.<\/p>\n<p>O uso de hardware compartilhado pode levar \u00e0 conten\u00e7\u00e3o de recursos e \u00e0 degrada\u00e7\u00e3o do desempenho, afetando a confiabilidade geral do sistema.<\/p>\n<h3>4. Use conjuntos de r\u00e9plicas para servidores de fragmentos<\/h3>\n<p>O uso de conjuntos de r\u00e9plicas para servidores de fragmentos fornece alta disponibilidade e toler\u00e2ncia a falhas para seu cluster de fragmentos do MongoDB. Cada conjunto de r\u00e9plicas deve ter tr\u00eas ou mais membros, e cada membro deve residir em uma m\u00e1quina f\u00edsica separada. Essa configura\u00e7\u00e3o garante que seu cluster fragmentado possa sobreviver \u00e0 falha de um \u00fanico servidor ou membro do conjunto de r\u00e9plicas.<\/p>\n<h3>5. Monitore o desempenho dos fragmentos<\/h3>\n<p>Monitorar o desempenho de seus fragmentos \u00e9 fundamental para identificar problemas antes que eles se tornem graves. Voc\u00ea deve monitorar o CPU, a mem\u00f3ria, o E\/S do disco e o E\/S da rede de cada servidor de fragmentos para garantir que o fragmento possa lidar com a carga de trabalho.<\/p>\n<p>Voc\u00ea pode usar as ferramentas de monitoramento integradas do MongoDB, como <a href=\"https:\/\/www.mongodb.com\/docs\/database-tools\/mongostat\/\" target=\"_blank\" rel=\"noopener noreferrer\">mongostat<\/a> e <a href=\"https:\/\/www.mongodb.com\/docs\/database-tools\/mongotop\/\" target=\"_blank\" rel=\"noopener noreferrer\">mongotop<\/a>, ou ferramentas de monitoramento de terceiros, como Datadog, Dynatrace e Zabbix, para rastrear o desempenho dos fragmentos.<\/p>\n<h3>6. Planeje a recupera\u00e7\u00e3o de desastres<\/h3>\n<p>Planejar a recupera\u00e7\u00e3o de desastres \u00e9 essencial para manter a confiabilidade do seu cluster fragmentado no MongoDB. Voc\u00ea deve ter um plano de recupera\u00e7\u00e3o de desastres que inclua backups regulares, testes de backups para garantir que sejam v\u00e1lidos e um plano para restaurar os backups em caso de falha.<\/p>\n<h3>7. Use o sharding baseado em hash quando for apropriado<\/h3>\n<p>Quando os aplicativos realizam consultas baseadas em intervalos, o sharding de intervalo \u00e9 ben\u00e9fico porque as opera\u00e7\u00f5es podem ser limitadas a poucos shards, na maioria das vezes um \u00fanico shard. Voc\u00ea precisa entender seus dados e os padr\u00f5es de consulta para implementar isso.<\/p>\n<p>O sharding baseado em hash garante uma distribui\u00e7\u00e3o uniforme de leituras e grava\u00e7\u00f5es. No entanto, ele n\u00e3o oferece opera\u00e7\u00f5es eficientes baseadas em intervalos.<\/p>\n<h2>Quais s\u00e3o os erros comuns que voc\u00ea deve evitar ao fragmentar seu banco de dados MongoDB?<\/h2>\n<p>O sharding no MongoDB \u00e9 uma t\u00e9cnica poderosa que pode ajud\u00e1-lo a escalar seu banco de dados horizontalmente e distribuir dados em v\u00e1rios servidores. No entanto, existem v\u00e1rios erros comuns que voc\u00ea deve evitar ao fragmentar seu banco de dados MongoDB. Abaixo est\u00e3o alguns dos erros mais comuns e como evit\u00e1-los.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"7\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Escolher a chave de fragmento errada<\/h3>\n<p>Uma das decis\u00f5es mais importantes que voc\u00ea tomar\u00e1 ao fragmentar seu banco de dados MongoDB \u00e9 escolher a chave de fragmento. Ela determina como os dados s\u00e3o distribu\u00eddos entre os fragmentos, e a escolha da chave errada pode resultar em distribui\u00e7\u00e3o desigual de dados, hotspots e desempenho ruim.<\/p>\n<p>Um erro comum \u00e9 escolher um valor de chave de fragmento que aumenta para novos documentos somente ao usar a fragmenta\u00e7\u00e3o baseada em intervalo, mas n\u00e3o para a fragmenta\u00e7\u00e3o com hash. Por exemplo, um timestamp (naturalmente), ou qualquer coisa que tenha um componente de tempo como seu componente mais importante, como ObjectID (os primeiros quatro bytes s\u00e3o um timestamp).<\/p>\n<p>Se voc\u00ea selecionar uma chave de fragmento, todas as inser\u00e7\u00f5es ir\u00e3o para o bloco com o maior intervalo. Mesmo que voc\u00ea continue adicionando novos fragmentos, sua capacidade m\u00e1xima de grava\u00e7\u00e3o nunca aumentar\u00e1.<\/p>\n<p>Se voc\u00ea planeja escalonar a capacidade de grava\u00e7\u00e3o, tente usar uma chave de fragmento baseada em hash, o que permitir\u00e1 o uso do mesmo campo e, ao mesmo tempo, proporcionar\u00e1 uma boa escalabilidade de grava\u00e7\u00e3o.<\/p>\n<h3>2. Tentativa de alterar o valor da chave de fragmento<\/h3>\n<p>As chaves de fragmento s\u00e3o imut\u00e1veis para um documento existente, o que significa que voc\u00ea n\u00e3o pode alterar a chave. Voc\u00ea pode fazer determinadas atualiza\u00e7\u00f5es antes da fragmenta\u00e7\u00e3o, mas n\u00e3o depois. Se tentar modificar a chave de fragmento de um documento existente, ocorrer\u00e1 uma falha com o seguinte erro:<\/p>\n<pre><code class=\"language-markdown\">cannot modify shard key's value fieldid for collection: collectionname<\/code><\/pre>\n<p>Voc\u00ea pode remover e reinserir o documento para renovar a chave de fragmento, em vez de tentar alter\u00e1-la.<\/p>\n<h3>3. Falha ao monitorar o cluster<\/h3>\n<p>O sharding introduz complexidade adicional ao ambiente de banco de dados, tornando essencial o monitoramento cuidadoso do cluster. A falha em monitorar o cluster pode levar a problemas de desempenho, perda de dados e outros problemas.<\/p>\n<p>Para evitar esse erro, voc\u00ea deve configurar ferramentas de monitoramento para rastrear as principais m\u00e9tricas, como uso do CPU, uso da mem\u00f3ria, espa\u00e7o em disco e tr\u00e1fego de rede. Tamb\u00e9m configure alertas para quando determinados limites forem excedidos.<\/p>\n<h3>4. Esperar demais para adicionar um novo shard (Sobrecarregado)<\/h3>\n<p>Um erro comum a evitar ao fragmentar seu banco de dados MongoDB \u00e9 esperar demais para adicionar um novo shard. Quando um shard fica sobrecarregado com dados ou consultas, isso pode levar a problemas de desempenho e desacelerar todo o cluster.<\/p>\n<p>Suponha que voc\u00ea tenha um cluster imagin\u00e1rio consistindo de 2 shards, com 20000 chunks (5000 considerados &#8220;ativos&#8221;), e precisamos adicionar um 3\u00ba shard. Este 3\u00ba shard eventualmente armazenar\u00e1 um ter\u00e7o dos chunks ativos (e do total de chunks).<\/p>\n<p>O desafio \u00e9 descobrir quando o shard deixa de adicionar sobrecarga e se torna um ativo. Seria necess\u00e1rio calcular a carga que o sistema produziria ao migrar os chunks ativos para o novo shard e quando ela seria insignificante comparada ao ganho geral do sistema.<\/p>\n<p>Na maioria dos cen\u00e1rios, \u00e9 relativamente f\u00e1cil imaginar esse conjunto de migra\u00e7\u00f5es levando ainda mais tempo em um conjunto de shards sobrecarregado e demorando muito mais para que nosso shard rec\u00e9m-adicionado atravesse o limiar e se torne um ganho l\u00edquido. Como tal, \u00e9 melhor ser proativo e adicionar capacidade antes que se torne necess\u00e1rio.<\/p>\n<div class=\"flex-1 overflow-hidden\">\n<div class=\"react-scroll-to-bottom--css-ijasl-79elbk h-full\">\n<div class=\"react-scroll-to-bottom--css-ijasl-1n7m0yu\">\n<div class=\"flex flex-col text-sm gizmo:pb-9 dark:bg-gray-800 gizmo:dark:bg-transparent\">\n<div class=\"w-full text-token-text-primary border-b border-black\/10 gizmo:border-0 dark:border-gray-900\/50 gizmo:dark:border-0 bg-gray-50 gizmo:bg-transparent dark:bg-[#444654] gizmo:dark:bg-transparent\" data-testid=\"conversation-turn-29\">\n<div class=\"p-4 gizmo:py-2 justify-center text-base md:gap-6 md:py-6 m-auto\">\n<div class=\"flex flex-1 gap-4 text-base mx-auto md:gap-6 gizmo:gap-3 gizmo:md:px-5 gizmo:lg:px-1 gizmo:xl:px-5 md:max-w-3xl } group final-completion\">\n<div class=\"relative flex w-[calc(100%-50px)] flex-col gizmo:w-full lg:w-[calc(100%-115px)] agent-turn\">\n<div class=\"flex-col gap-1 md:gap-3\">\n<div class=\"flex flex-grow flex-col max-w-full gap-3 gizmo:gap-0\">\n<div class=\"min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&#038;]:mt-5 overflow-x-auto\" data-message-author-role=\"assistant\" data-message-id=\"765de77a-bc61-4035-9f0d-b217db7ef39a\">\n<div class=\"markdown prose w-full break-words dark:prose-invert dark\">\n<p>Estrat\u00e9gias de mitiga\u00e7\u00e3o poss\u00edveis incluem monitorar o cluster regularmente e adicionar proativamente novos shards em momentos de baixo tr\u00e1fego, para que haja menos competi\u00e7\u00e3o por recursos. Sugere-se equilibrar manualmente os chunks &#8220;quentes&#8221; direcionados (acessados mais do que outros) para mover a atividade para o novo shard mais rapidamente.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3>5. Servidores de configura\u00e7\u00e3o com provisionamento insuficiente<\/h3>\n<p>Se os servidores de configura\u00e7\u00e3o estiverem com recursos insuficientes, isso pode levar a problemas de desempenho e instabilidade. A subprovis\u00e3o pode ocorrer devido \u00e0 aloca\u00e7\u00e3o insuficiente de recursos, como CPU, mem\u00f3ria ou armazenamento.<\/p>\n<p>Isso pode resultar em desempenho lento de consultas, timeouts e at\u00e9 mesmo falhas do sistema. Para evitar isso, \u00e9 essencial alocar recursos suficientes para os servidores de configura\u00e7\u00e3o, especialmente em clusters maiores. Monitorar regularmente o uso de recursos dos servidores de configura\u00e7\u00e3o pode ajudar a identificar problemas de subprovis\u00e3o.<\/p>\n<p>Outra maneira de evitar isso \u00e9 usar hardware dedicado para os servidores de configura\u00e7\u00e3o, em vez de compartilhar recursos com outros componentes do cluster. Isso pode ajudar a garantir que os servidores de configura\u00e7\u00e3o tenham recursos suficientes para lidar com sua carga de trabalho.<\/p>\n<h3>6. Falha no backup e na restaura\u00e7\u00e3o de dados<\/h3>\n<p>Os backups s\u00e3o essenciais para garantir que os dados n\u00e3o sejam perdidos em uma falha. A perda de dados pode ocorrer por v\u00e1rios motivos, inclusive falha de hardware, erro humano e ataques mal-intencionados.<\/p>\n<p>Se voc\u00ea n\u00e3o fizer o backup e a restaura\u00e7\u00e3o dos dados, poder\u00e1 ter perda de dados e tempo de inatividade. Para evitar esse erro, voc\u00ea deve definir uma estrat\u00e9gia de <a href=\"https:\/\/kinsta.com\/pt\/blog\/mysql-backup-database\/\">backup<\/a> e restaura\u00e7\u00e3o que inclua backups regulares, backups de teste e restaura\u00e7\u00e3o de dados em um ambiente de teste.<\/p>\n<h3>7. Falha ao testar o cluster fragmentado<\/h3>\n<p>Antes de implementar o cluster fragmentado na produ\u00e7\u00e3o, voc\u00ea deve test\u00e1-lo completamente para garantir que possa lidar com a carga e as consultas esperadas. Se voc\u00ea n\u00e3o testar o cluster fragmentado, poder\u00e1 ter um desempenho ruim e falhas.<\/p>\n<h2>MongoDB Sharding vs \u00cdndices Clusterizados: Qual \u00e9 mais eficaz para grandes conjuntos de dados?<\/h2>\n<p>Tanto o MongoDB Sharding quanto os \u00edndices em cluster s\u00e3o estrat\u00e9gias eficazes para lidar com grandes conjuntos de dados. Mas eles servem a prop\u00f3sitos diferentes. A escolha da abordagem correta depende dos requisitos espec\u00edficos do seu aplicativo.<\/p>\n<p>O sharding \u00e9 uma t\u00e9cnica de escalonamento horizontal que distribui dados entre v\u00e1rios n\u00f3s, tornando-se uma solu\u00e7\u00e3o eficaz para lidar com grandes conjuntos de dados com altas taxas de escrita. \u00c9 transparente para os aplicativos, permitindo que interajam com o MongoDB como se fosse um \u00fanico servidor.<\/p>\n<p>Por outro lado, os \u00edndices agrupados melhoram o desempenho das consultas que recuperam dados de grandes conjuntos de dados, permitindo que o MongoDB localize os dados com mais efici\u00eancia quando uma consulta corresponde ao campo indexado.<\/p>\n<p>Ent\u00e3o, qual deles \u00e9 mais eficaz para conjuntos de dados maiores? A resposta depende do uso espec\u00edfico e dos requisitos da carga de trabalho.<\/p>\n<p>Se o aplicativo requer alta taxa de escrita e consulta e precisa escalar horizontalmente, ent\u00e3o o sharding do MongoDB provavelmente \u00e9 a op\u00e7\u00e3o melhor.<\/p>\n<div class=\"flex-1 overflow-hidden\">\n<div class=\"react-scroll-to-bottom--css-ijasl-79elbk h-full\">\n<div class=\"react-scroll-to-bottom--css-ijasl-1n7m0yu\">\n<div class=\"flex flex-col text-sm gizmo:pb-9 dark:bg-gray-800 gizmo:dark:bg-transparent\">\n<div class=\"w-full text-token-text-primary border-b border-black\/10 gizmo:border-0 dark:border-gray-900\/50 gizmo:dark:border-0 bg-gray-50 gizmo:bg-transparent dark:bg-[#444654] gizmo:dark:bg-transparent\" data-testid=\"conversation-turn-33\">\n<div class=\"p-4 gizmo:py-2 justify-center text-base md:gap-6 md:py-6 m-auto\">\n<div class=\"flex flex-1 gap-4 text-base mx-auto md:gap-6 gizmo:gap-3 gizmo:md:px-5 gizmo:lg:px-1 gizmo:xl:px-5 md:max-w-3xl } group final-completion\">\n<div class=\"relative flex w-[calc(100%-50px)] flex-col gizmo:w-full lg:w-[calc(100%-115px)] agent-turn\">\n<div class=\"flex-col gap-1 md:gap-3\">\n<div class=\"flex flex-grow flex-col max-w-full gap-3 gizmo:gap-0\">\n<div class=\"min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&#038;]:mt-5 overflow-x-auto\" data-message-author-role=\"assistant\" data-message-id=\"f4d2f01f-ee8e-4484-973e-801708b3833e\">\n<div class=\"markdown prose w-full break-words dark:prose-invert dark\">\n<p>No entanto, os \u00edndices clusterizados podem ser mais eficazes se o aplicativo possuir uma carga de trabalho pesada em leitura e requerer que os dados frequentemente consultados estejam organizados em uma ordem espec\u00edfica.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Tanto a fragmenta\u00e7\u00e3o quanto os \u00edndices agrupados s\u00e3o ferramentas poderosas para <a href=\"https:\/\/kinsta.com\/pt\/blog\/adminer\/\">gerenciar<\/a> grandes conjuntos de dados no MongoDB. O segredo \u00e9 avaliar cuidadosamente os requisitos do seu aplicativo e as caracter\u00edsticas da carga de trabalho para determinar a melhor abordagem para o seu uso espec\u00edfico.<\/p>\n<h2>Resumo<\/h2>\n<div class=\"flex-1 overflow-hidden\">\n<div class=\"react-scroll-to-bottom--css-ijasl-79elbk h-full\">\n<div class=\"react-scroll-to-bottom--css-ijasl-1n7m0yu\">\n<div class=\"flex flex-col text-sm gizmo:pb-9 dark:bg-gray-800 gizmo:dark:bg-transparent\">\n<div class=\"w-full text-token-text-primary border-b border-black\/10 gizmo:border-0 dark:border-gray-900\/50 gizmo:dark:border-0 bg-gray-50 gizmo:bg-transparent dark:bg-[#444654] gizmo:dark:bg-transparent\" data-testid=\"conversation-turn-35\">\n<div class=\"p-4 gizmo:py-2 justify-center text-base md:gap-6 md:py-6 m-auto\">\n<div class=\"flex flex-1 gap-4 text-base mx-auto md:gap-6 gizmo:gap-3 gizmo:md:px-5 gizmo:lg:px-1 gizmo:xl:px-5 md:max-w-3xl } group final-completion\">\n<div class=\"relative flex w-[calc(100%-50px)] flex-col gizmo:w-full lg:w-[calc(100%-115px)] agent-turn\">\n<div class=\"flex-col gap-1 md:gap-3\">\n<div class=\"flex flex-grow flex-col max-w-full gap-3 gizmo:gap-0\">\n<div class=\"min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&#038;]:mt-5 overflow-x-auto\" data-message-author-role=\"assistant\" data-message-id=\"a6a2b55a-29be-4ee2-bc69-9309099b7d46\">\n<div class=\"markdown prose w-full break-words dark:prose-invert dark\">\n<p>Um cluster fragmentado (sharded cluster) \u00e9 uma arquitetura avan\u00e7ada projetada para lidar com grandes volumes de dados e escalar horizontalmente, atendendo \u00e0s necessidades de aplicativos em crescimento. Esse cluster \u00e9 composto por shards, servidores de configura\u00e7\u00e3o, processos mongos e aplicativos clientes. Os dados s\u00e3o particionados com base em uma chave de shard cuidadosamente escolhida para assegurar uma distribui\u00e7\u00e3o e consulta eficientes.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Ao aproveitar o poder da fragmenta\u00e7\u00e3o, os aplicativos podem obter alta disponibilidade, melhor desempenho e uso eficiente dos recursos de hardware. A escolha da chave de fragmento correta \u00e9 fundamental para a distribui\u00e7\u00e3o uniforme dos dados.<\/p>\n<p><em>O que voc\u00ea acha do MongoDB e da pr\u00e1tica de fragmenta\u00e7\u00e3o do banco de dados? H\u00e1 algum aspecto da fragmenta\u00e7\u00e3o que voc\u00ea acha que dever\u00edamos ter abordado? Diga-nos nos coment\u00e1rios!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No mundo atual, orientado por dados, em que o volume e a complexidade dos dados continuam a se expandir em um ritmo sem precedentes, a necessidade &#8230;<\/p>\n","protected":false},"author":199,"featured_media":61910,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1018],"class_list":["post-61909","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-ferramentas-desenvolvimento-web"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Guia Completo para Entender o MongoDB Sharding<\/title>\n<meta name=\"description\" content=\"O Sharding no MongoDB permite que ele execute consultas sem exercer muita carga no servidor, dividindo as cole\u00e7\u00f5es.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guia Completo para Entender o MongoDB Sharding\" \/>\n<meta property=\"og:description\" content=\"O Sharding no MongoDB permite que ele execute consultas sem exercer muita carga no servidor, dividindo as cole\u00e7\u00f5es.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-08T10:11:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-20T15:40:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"O Sharding no MongoDB permite que ele execute consultas sem exercer muita carga no servidor, dividindo as cole\u00e7\u00f5es.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Guia Completo para Entender o MongoDB Sharding\",\"datePublished\":\"2023-11-08T10:11:12+00:00\",\"dateModified\":\"2023-11-20T15:40:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/\"},\"wordCount\":4539,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/\",\"name\":\"Guia Completo para Entender o MongoDB Sharding\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg\",\"datePublished\":\"2023-11-08T10:11:12+00:00\",\"dateModified\":\"2023-11-20T15:40:15+00:00\",\"description\":\"O Sharding no MongoDB permite que ele execute consultas sem exercer muita carga no servidor, dividindo as cole\u00e7\u00f5es.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ferramentas de Desenvolvimento Web\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/ferramentas-desenvolvimento-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Guia Completo para Entender o MongoDB Sharding\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Guia Completo para Entender o MongoDB Sharding","description":"O Sharding no MongoDB permite que ele execute consultas sem exercer muita carga no servidor, dividindo as cole\u00e7\u00f5es.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/","og_locale":"pt_PT","og_type":"article","og_title":"Guia Completo para Entender o MongoDB Sharding","og_description":"O Sharding no MongoDB permite que ele execute consultas sem exercer muita carga no servidor, dividindo as cole\u00e7\u00f5es.","og_url":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-11-08T10:11:12+00:00","article_modified_time":"2023-11-20T15:40:15+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"O Sharding no MongoDB permite que ele execute consultas sem exercer muita carga no servidor, dividindo as cole\u00e7\u00f5es.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tempo estimado de leitura":"20 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Guia Completo para Entender o MongoDB Sharding","datePublished":"2023-11-08T10:11:12+00:00","dateModified":"2023-11-20T15:40:15+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/"},"wordCount":4539,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/","url":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/","name":"Guia Completo para Entender o MongoDB Sharding","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg","datePublished":"2023-11-08T10:11:12+00:00","dateModified":"2023-11-20T15:40:15+00:00","description":"O Sharding no MongoDB permite que ele execute consultas sem exercer muita carga no servidor, dividindo as cole\u00e7\u00f5es.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/mongodb-sharding.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/mongodb-sharding\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Ferramentas de Desenvolvimento Web","item":"https:\/\/kinsta.com\/pt\/topicos\/ferramentas-desenvolvimento-web\/"},{"@type":"ListItem","position":3,"name":"Guia Completo para Entender o MongoDB Sharding"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/61909","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=61909"}],"version-history":[{"count":12,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/61909\/revisions"}],"predecessor-version":[{"id":65015,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/61909\/revisions\/65015"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61909\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61909\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61909\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61909\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61909\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61909\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61909\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61909\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61909\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/61910"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=61909"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=61909"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=61909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}