{"id":11378,"date":"2021-06-17T03:58:10","date_gmt":"2021-06-17T10:58:10","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=11378"},"modified":"2025-06-13T19:27:09","modified_gmt":"2025-06-14T02:27:09","slug":"how-to-use-global-secondary-index-partitioning-for-more-than-partitions","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/","title":{"rendered":"Como usar o particionamento de \u00edndice secund\u00e1rio global para mais de uma parti\u00e7\u00e3o"},"content":{"rendered":"<p>Como engenheiro de campo, trabalho com clientes e frequentemente os vejo usando <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase<\/a> recursos com uma abordagem de \"pensar fora da caixa\".<\/p>\n<p>Um desses recursos que vejo sendo usado de forma mais criativa \u00e9 <a href=\"https:\/\/docs.couchbase.com\/server\/5.1\/architecture\/global-secondary-indexes.html?ref=blog\" target=\"_blank\" rel=\"noopener\">\u00cdndice Secund\u00e1rio Global (GSI)<\/a> parti\u00e7\u00f5es. Vamos discutir primeiro o GSI e a consulta e, em seguida, o particionamento para nos atualizarmos.<\/p>\n<h2>O que \u00e9 um \u00edndice secund\u00e1rio global?<\/h2>\n<p>&nbsp;<\/p>\n<p>De acordo com a documenta\u00e7\u00e3o do Couchbase, um <em>\u00cdndice Secund\u00e1rio Global<\/em> (GSI) ap\u00f3ia as consultas feitas pelo <em>Servi\u00e7o de consulta<\/em> em atributos dentro de documentos. H\u00e1 suporte para filtragem extensiva.<\/p>\n<p><strong>Os \u00edndices secund\u00e1rios globais fornecem o seguinte:<\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li><em>Dimensionamento avan\u00e7ado:<\/em> Os GSIs podem ser atribu\u00eddos independentemente a n\u00f3s selecionados sem que as cargas de trabalho existentes sejam afetadas.<\/li>\n<li><em>Desempenho previs\u00edvel:<\/em> As opera\u00e7\u00f5es baseadas em chaves mant\u00eam uma baixa lat\u00eancia previs\u00edvel, mesmo na presen\u00e7a de um grande n\u00famero de \u00edndices. A manuten\u00e7\u00e3o de \u00edndices n\u00e3o \u00e9 competitiva com as opera\u00e7\u00f5es baseadas em chaves, mesmo quando as cargas de trabalho de muta\u00e7\u00e3o de dados s\u00e3o pesadas.<\/li>\n<li><em>Consultas de baixa lat\u00eancia:<\/em> Os GSIs s\u00e3o particionados de forma independente nos n\u00f3s do Servi\u00e7o de \u00cdndice: Eles n\u00e3o precisam seguir o particionamento de hash dos dados em vBuckets. As consultas que usam GSIs podem atingir tempos de resposta de baixa lat\u00eancia, mesmo quando o cluster \u00e9 ampliado, pois os GSIs n\u00e3o exigem um amplo fan-out para todos os n\u00f3s do Data Service.<\/li>\n<li><em>Particionamento independente:<\/em> O servi\u00e7o de \u00edndice oferece independ\u00eancia de parti\u00e7\u00e3o: Os dados e seus \u00edndices podem ter chaves de parti\u00e7\u00e3o diferentes. Cada \u00edndice pode ter sua pr\u00f3pria chave de parti\u00e7\u00e3o, portanto, cada um pode ser particionado de forma independente para corresponder \u00e0 consulta espec\u00edfica. \u00c0 medida que surgirem novos requisitos, o aplicativo tamb\u00e9m poder\u00e1 criar um novo \u00edndice com uma nova chave de parti\u00e7\u00e3o, sem afetar o desempenho das consultas existentes.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Particionamento GSI<\/h2>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-11379\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips-1024x536.png\" alt=\"See how Global Secondary Index (GSI) partitioning can be used for more than just partitioning\" width=\"900\" height=\"471\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips-1024x536.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips-300x157.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips-768x402.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png 1200w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/p>\n<p>No diagrama acima, a orquestra\u00e7\u00e3o da consulta para o \u00edndice \u00e9 tratada pelo Query Service e pelo Index Service sem problemas, n\u00e3o apenas para o desenvolvedor do aplicativo, mas tamb\u00e9m para o administrador do Couchbase.<\/p>\n<p>O particionamento de \u00edndice aumenta o desempenho da consulta ao dividir e espalhar um grande \u00edndice de documentos em v\u00e1rios n\u00f3s. Esse recurso est\u00e1 dispon\u00edvel somente no Couchbase Server Enterprise Edition. Os benef\u00edcios incluem:<\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>A capacidade de escalonar horizontalmente \u00e0 medida que o tamanho do \u00edndice aumenta.<\/li>\n<li>Transpar\u00eancia nas consultas, n\u00e3o exigindo nenhuma altera\u00e7\u00e3o nas consultas existentes.<\/li>\n<li>Redu\u00e7\u00e3o da lat\u00eancia de consulta para consultas grandes e agregadas, j\u00e1 que as parti\u00e7\u00f5es podem ser verificadas em paralelo.<\/li>\n<li>Fornecimento de uma consulta de intervalo de baixa lat\u00eancia, permitindo que os \u00edndices sejam dimensionados conforme necess\u00e1rio.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Para obter informa\u00e7\u00f5es detalhadas, consulte <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/index-partitioning.html\" target=\"_blank\" rel=\"noopener\">Documenta\u00e7\u00e3o do Couchbase sobre particionamento de \u00edndices<\/a>.<\/p>\n<p>O particionamento de \u00edndices oferece muitos recursos que facilitam o gerenciamento de \u00edndices, conforme mencionado acima, mas por que n\u00e3o usar o particionamento de \u00edndices para <em>mais<\/em> do que apenas o particionamento?<\/p>\n<h2>Mais informa\u00e7\u00f5es sobre particionamento de \u00edndices<\/h2>\n<p>&nbsp;<\/p>\n<p>Nesta postagem do blog, vamos nos concentrar em casos de uso b\u00e1sicos, mas <code>PARTI\u00c7\u00c3O POR HASH<\/code> \u00e9 um recurso muito poderoso que pode ser direcionado e quantificado para o tamanho e o desempenho do \u00edndice.<\/p>\n<p>H\u00e1 muitos recursos excelentes de particionamento de \u00edndices para personalizar seus \u00edndices a fim de gerenciar o armazenamento, o desempenho ou a escalabilidade.<\/p>\n<p>A maneira mais simples de criar um \u00edndice particionado \u00e9 usar a chave do documento como chave de parti\u00e7\u00e3o:<\/p>\n<pre>CREATE INDEX idx_pe1 ON `travel-sample`(country, airline, id) \r\nPARTITION BY HASH(META().id);\r\n\r\nSELECT airline, id\r\nFROM `travel-sample` \r\nWHERE country=\"United States\" \r\n\r\nORDER BY airline;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Com <code>meta().id<\/code> como a chave de parti\u00e7\u00e3o, as chaves de \u00edndice ser\u00e3o distribu\u00eddas igualmente entre todas as parti\u00e7\u00f5es. Cada consulta reunir\u00e1 as chaves de \u00edndice qualificadas de todas as parti\u00e7\u00f5es.<\/p>\n<h2>Escolha de chaves de parti\u00e7\u00e3o para consulta de intervalo<\/h2>\n<p>&nbsp;<\/p>\n<p>Um aplicativo tamb\u00e9m tem a op\u00e7\u00e3o de escolher a chave de parti\u00e7\u00e3o que pode minimizar a lat\u00eancia na consulta de intervalo para o \u00edndice particionado.<\/p>\n<p>Por exemplo, digamos que uma consulta tenha um predicado de igualdade com base no campo <code>aeroporto de origem<\/code> e <code>aeroporto de destino<\/code>. Se o \u00edndice tamb\u00e9m for particionado pelas chaves de \u00edndice em <code>aeroporto de origem<\/code> e <code>aeroporto de destino<\/code>ent\u00e3o a consulta s\u00f3 precisar\u00e1 ler uma \u00fanica parti\u00e7\u00e3o para o par de <code>aeroporto de origem<\/code> e <code>aeroporto de destino<\/code>.<\/p>\n<p>Nesse caso, o aplicativo pode manter uma baixa lat\u00eancia de consulta e, ao mesmo tempo, permitir que o \u00edndice particionado seja dimensionado conforme necess\u00e1rio.<\/p>\n<p>As chaves de parti\u00e7\u00e3o n\u00e3o precisam ser as chaves de \u00edndice principais para selecionar as parti\u00e7\u00f5es qualificadas. Desde que as chaves de \u00edndice principais sejam fornecidas junto com as chaves de parti\u00e7\u00e3o no predicado, a consulta ainda poder\u00e1 selecionar as parti\u00e7\u00f5es qualificadas para a varredura de \u00edndice. O exemplo a seguir far\u00e1 a varredura de uma \u00fanica parti\u00e7\u00e3o com um determinado par de <code>aeroporto de origem<\/code> e <code>aeroporto de destino<\/code>.<\/p>\n<p><strong>Cria\u00e7\u00e3o de um \u00edndice particionado com chaves de parti\u00e7\u00e3o que correspondem ao predicado de igualdade da consulta:<\/strong><\/p>\n<pre># Lookup all airlines with non-stop flights from SFO to JFK\r\nCREATE INDEX idx_pe2 ON `travel-sample` (sourceairport, destinationairport,stops, airline, id) PARTITION BY HASH (sourceairport, destinationairport);\r\n\r\nSELECT airline, id\r\nFROM `travel-sample` \r\nWHERE sourceairport=\"SFO\" AND\r\ndestinationairport=\"JFK\" AND stops == 0 ORDER BY airline;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h2>N\u00famero de parti\u00e7\u00f5es<\/h2>\n<p>&nbsp;<\/p>\n<p>O n\u00famero de parti\u00e7\u00f5es de \u00edndice \u00e9 fixado quando o \u00edndice \u00e9 criado.<\/p>\n<p>Por padr\u00e3o, cada \u00edndice ter\u00e1 oito parti\u00e7\u00f5es. O administrador pode substituir o n\u00famero de parti\u00e7\u00f5es em <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createindex.html\">cria\u00e7\u00e3o de \u00edndices<\/a> tempo.<\/p>\n<h2>Coloca\u00e7\u00e3o de parti\u00e7\u00f5es<\/h2>\n<p>&nbsp;<\/p>\n<p>Quando um \u00edndice particionado \u00e9 criado, as parti\u00e7\u00f5es s\u00e3o delineadas nos n\u00f3s de \u00edndice dispon\u00edveis. Durante o posicionamento do novo \u00edndice, o indexador assumir\u00e1 que cada parti\u00e7\u00e3o tem um tamanho igual e colocar\u00e1 as parti\u00e7\u00f5es de acordo com a disponibilidade de recursos em cada n\u00f3.<\/p>\n<p>Por exemplo, se um n\u00f3 de indexador tiver mais mem\u00f3ria livre dispon\u00edvel do que os outros n\u00f3s, ele atribuir\u00e1 mais parti\u00e7\u00f5es a esse n\u00f3 de indexador. Se o \u00edndice tiver uma r\u00e9plica, a parti\u00e7\u00e3o da r\u00e9plica n\u00e3o ser\u00e1 colocada no mesmo n\u00f3.<\/p>\n<p>Como alternativa, os usu\u00e1rios podem especificar a lista de n\u00f3s para restringir o conjunto de n\u00f3s dispon\u00edveis para coloca\u00e7\u00e3o, usando um comando semelhante ao exemplo a seguir:<\/p>\n<p><strong>Cria\u00e7\u00e3o de um \u00edndice particionado em portas espec\u00edficas de um n\u00f3:<\/strong><\/p>\n<pre>CREATE INDEX idx_pe12 ON `travel-sample`(airline, sourceairport, destinationairport) PARTITION BY KEY(airline) WITH {\"nodes\":[\"127.0.0.1:9001\", \"127.0.0.1:9002\"]};\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Como h\u00e1 casos em que os \u00edndices podem ser maiores do que o n\u00f3 pode armazenar, a inten\u00e7\u00e3o original do particionamento de \u00edndices era dimensionar \u00edndices \"grandes\" em v\u00e1rias parti\u00e7\u00f5es, ou seja, n\u00f3s, em um cluster.<\/p>\n<p>Mas alguns clientes veem as parti\u00e7\u00f5es GSI de uma maneira diferente.<\/p>\n<p>Um caso que estou vendo com mais frequ\u00eancia \u00e9 o uso do particionamento como distribui\u00e7\u00e3o da carga de trabalho entre os n\u00f3s. Os \u00edndices em si n\u00e3o s\u00e3o grandes, mas a distribui\u00e7\u00e3o de todas as parti\u00e7\u00f5es indexadas em v\u00e1rios n\u00f3s aproveita a arquitetura do particionamento, em que os \u00edndices podem ser verificados em paralelo! Isso distribuir\u00e1 uniformemente a varredura de \u00edndices em todas as parti\u00e7\u00f5es\/n\u00f3s, em vez de apenas em um \u00fanico.<\/p>\n<p>Alguns clientes chegam a colocar servi\u00e7os juntos, como dados, \u00edndice e consulta, e n\u00e3o observam degrada\u00e7\u00e3o do desempenho em compara\u00e7\u00e3o com o isolamento de servi\u00e7os como \u00edndice\/consulta em n\u00f3s separados. Uma ressalva a essa abordagem \u00e9 garantir que haja CPU, mem\u00f3ria e espa\u00e7o em disco suficientes para que todos esses servi\u00e7os sejam executados juntamente com o pr\u00f3prio sistema operacional.<\/p>\n<p>Os servi\u00e7os de dados e \u00edndices s\u00e3o vinculados \u00e0 mem\u00f3ria e as cotas s\u00e3o definidas por meio das configura\u00e7\u00f5es do cluster. O servi\u00e7o Query n\u00e3o \u00e9 vinculado \u00e0 mem\u00f3ria, mas usar\u00e1 mem\u00f3ria. O administrador do Couchbase precisaria estar ciente da mem\u00f3ria dispon\u00edvel e das cotas para os servi\u00e7os de dados e \u00edndice, al\u00e9m de reservar mem\u00f3ria livre suficiente para o servi\u00e7o de consulta e o sistema operacional.<\/p>\n<p><strong>Antes de<\/strong><br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/06\/index-partitioning-before.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11381\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/06\/index-partitioning-before.png\" alt=\"Before index partitioning\" width=\"656\" height=\"202\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partitioning-before.png 656w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partitioning-before-300x92.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partitioning-before-20x6.png 20w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/a><\/p>\n<p><strong>Depois de<\/strong><br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/06\/index-partitioning-after.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11382\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/06\/index-partitioning-after.png\" alt=\"After index partitioning\" width=\"654\" height=\"234\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partitioning-after.png 654w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partitioning-after-300x107.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partitioning-after-20x7.png 20w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/a><\/p>\n<p>O par de diagramas acima pode parecer contraintuitivo do ponto de vista do desempenho, mas do ponto de vista do custo de propriedade, \u00e9 uma m\u00e1quina a menos. \u00c0s vezes, esse \u00e9 um fator determinante.<\/p>\n<p>Quais s\u00e3o as outras estrat\u00e9gias de particionamento? Normalmente, as consultas s\u00e3o orientadas pela lat\u00eancia e pela taxa de transfer\u00eancia, mas tamb\u00e9m pelos SLAs e pelas particularidades de seu caso de uso. Por exemplo, alguns clientes executam uma consulta uma ou duas vezes por dia para gerar relat\u00f3rios. Ela precisa ser de alto desempenho? Na verdade, n\u00e3o. Qual \u00e9 a melhor estrat\u00e9gia para esse tipo de consulta?<\/p>\n<p>Digamos que haja 20 consultas com diferentes <code>ONDE<\/code> talvez uma consulta para descobrir quantas faturas s\u00e3o geradas em um determinado local por dia. \u00c9 sensato criar 20 \u00edndices diferentes para cada local para a consulta de faturas? E se houver outras consultas que usar\u00e3o os mesmos dados como um todo (tamb\u00e9m conhecidos como dados redundantes)? Talvez alguns dos dados sejam espec\u00edficos de um pa\u00eds, onde 10 dos locais est\u00e3o no mesmo pa\u00eds.<\/p>\n<p>Se essa fosse uma consulta executada com frequ\u00eancia ou uma parte cr\u00edtica do aplicativo, como exibi\u00e7\u00f5es de produtos, um \u00edndice dedicado poderia ser apropriado. Mas, nesse caso, talvez um \u00edndice grande seja mais eficiente em termos de armazenamento e recursos. Portanto, as parti\u00e7\u00f5es de \u00edndice seriam mais apropriadas.<\/p>\n<h2>Segrega\u00e7\u00e3o de responsabilidade de comando e consulta (CQRS)<\/h2>\n<p>&nbsp;<\/p>\n<p>Outro uso de parti\u00e7\u00f5es com melhor desempenho s\u00e3o as cargas de trabalho de grava\u00e7\u00e3o pesada, em que as grava\u00e7\u00f5es dominam as opera\u00e7\u00f5es. Um padr\u00e3o \u00e9 o CQRS (Segrega\u00e7\u00e3o de responsabilidade de comando e consulta).<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/06\/index-partition-for-Command-and-Query-Responsibility-Segregation-CQRS.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11383\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/06\/index-partition-for-Command-and-Query-Responsibility-Segregation-CQRS.png\" alt=\"An architecture diagram of an index partition being used for Command and Query Responsibility Segregation (CQRS)\" width=\"875\" height=\"489\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partition-for-Command-and-Query-Responsibility-Segregation-CQRS.png 875w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partition-for-Command-and-Query-Responsibility-Segregation-CQRS-300x168.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partition-for-Command-and-Query-Responsibility-Segregation-CQRS-768x429.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/index-partition-for-Command-and-Query-Responsibility-Segregation-CQRS-20x11.png 20w\" sizes=\"auto, (max-width: 875px) 100vw, 875px\" \/><\/a><\/p>\n<p>\u00c9 quando muitos documentos s\u00e3o gravados em um banco de dados e exigem consultas r\u00e1pidas. Normalmente, s\u00e3o eventos de aplicativos, como intera\u00e7\u00e3o do usu\u00e1rio com o aplicativo, cliques etc. Esses eventos s\u00e3o gravados em grande volume e consultados com frequ\u00eancia. Com o particionamento do \u00edndice, o balanceamento da grava\u00e7\u00e3o das chaves do documento no \u00edndice n\u00e3o \u00e9 isolado em um n\u00f3, mas distribu\u00eddo entre os n\u00f3s do \u00edndice. O CQRS \u00e9 um bom caso de uso para parti\u00e7\u00f5es de \u00edndice.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>&nbsp;<\/p>\n<p>Cobrimos apenas alguns usos do particionamento do Global Secondary Index. Esse \u00e9 um dos recursos mais subestimados e subutilizados do GSI, que pode ser ajustado para casos de uso espec\u00edficos.<\/p>\n<p>Saiba mais sobre <a href=\"https:\/\/docs.couchbase.com\/server\/5.1\/architecture\/global-secondary-indexes.html?ref=blog\" target=\"_blank\" rel=\"noopener\">\u00cdndices secund\u00e1rios globais (GSIs) na documenta\u00e7\u00e3o do Couchbase<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>As a field engineer, I work with customers and often see them using Couchbase features with a &#8220;thinking-out-of-the-box&#8221; approach. One such feature that I see being used more creatively is Global Secondary Index (GSI) partitions. Let\u2019s first discuss GSI and [&hellip;]<\/p>","protected":false},"author":77552,"featured_media":11379,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1821,8905,1816,6319,2453],"tags":[9251,1695,2175,1377],"ppma_author":[9217],"class_list":["post-11378","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-architecture","category-couchbase-global-secondary-index","category-couchbase-server","category-customers","category-global-secondary-index","tag-global-secondary-index","tag-gsi","tag-index-partitioning","tag-scale-out"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Use Global Secondary Index Partitioning for More Than Partitions<\/title>\n<meta name=\"description\" content=\"Learn how Global Secondary Index (GSI) partitions are useful for a variety of index management scenarios and use cases, including CQRS and more.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Use Global Secondary Index Partitioning for More Than Partitions\" \/>\n<meta property=\"og:description\" content=\"Learn how Global Secondary Index (GSI) partitions are useful for a variety of index management scenarios and use cases, including CQRS and more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-17T10:58:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:27:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"James Powenski, Couchbase Senior Solutions Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James Powenski, Couchbase Senior Solutions Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/\"},\"author\":{\"name\":\"james.powenski\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5b6cdf2c0ffc337f914a4eb5fff2937f\"},\"headline\":\"How to Use Global Secondary Index Partitioning for More Than Partitions\",\"datePublished\":\"2021-06-17T10:58:10+00:00\",\"dateModified\":\"2025-06-14T02:27:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/\"},\"wordCount\":1391,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png\",\"keywords\":[\"global secondary index\",\"GSI\",\"index partitioning\",\"Scale Out\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Architecture\",\"Couchbase Global Secondary Index\",\"Couchbase Server\",\"Customers\",\"Global Secondary Index\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/\",\"name\":\"How to Use Global Secondary Index Partitioning for More Than Partitions\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png\",\"datePublished\":\"2021-06-17T10:58:10+00:00\",\"dateModified\":\"2025-06-14T02:27:09+00:00\",\"description\":\"Learn how Global Secondary Index (GSI) partitions are useful for a variety of index management scenarios and use cases, including CQRS and more.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png\",\"width\":1200,\"height\":628,\"caption\":\"See how Global Secondary Index (GSI) partitioning can be used for more than just partitioning\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Use Global Secondary Index Partitioning for More Than Partitions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5b6cdf2c0ffc337f914a4eb5fff2937f\",\"name\":\"james.powenski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e45dcba7caaaefe99434ad0a75964282\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg\",\"caption\":\"james.powenski\"},\"description\":\"Couchbase Senior Solutions Engineer\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/james-powenski\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como usar o particionamento de \u00edndice secund\u00e1rio global para mais de uma parti\u00e7\u00e3o","description":"Saiba como as parti\u00e7\u00f5es do \u00cdndice Secund\u00e1rio Global (GSI) s\u00e3o \u00fateis para uma variedade de cen\u00e1rios de gerenciamento de \u00edndices e casos de uso, incluindo CQRS e muito mais.","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:\/\/www.couchbase.com\/blog\/pt\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/","og_locale":"pt_BR","og_type":"article","og_title":"How to Use Global Secondary Index Partitioning for More Than Partitions","og_description":"Learn how Global Secondary Index (GSI) partitions are useful for a variety of index management scenarios and use cases, including CQRS and more.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-06-17T10:58:10+00:00","article_modified_time":"2025-06-14T02:27:09+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png","type":"image\/png"}],"author":"James Powenski, Couchbase Senior Solutions Engineer","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Powenski, Couchbase Senior Solutions Engineer","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/"},"author":{"name":"james.powenski","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5b6cdf2c0ffc337f914a4eb5fff2937f"},"headline":"How to Use Global Secondary Index Partitioning for More Than Partitions","datePublished":"2021-06-17T10:58:10+00:00","dateModified":"2025-06-14T02:27:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/"},"wordCount":1391,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png","keywords":["global secondary index","GSI","index partitioning","Scale Out"],"articleSection":["Best Practices and Tutorials","Couchbase Architecture","Couchbase Global Secondary Index","Couchbase Server","Customers","Global Secondary Index"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/","url":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/","name":"Como usar o particionamento de \u00edndice secund\u00e1rio global para mais de uma parti\u00e7\u00e3o","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png","datePublished":"2021-06-17T10:58:10+00:00","dateModified":"2025-06-14T02:27:09+00:00","description":"Saiba como as parti\u00e7\u00f5es do \u00cdndice Secund\u00e1rio Global (GSI) s\u00e3o \u00fateis para uma variedade de cen\u00e1rios de gerenciamento de \u00edndices e casos de uso, incluindo CQRS e muito mais.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/gsi-index-partitioning-more-than-just-partitioning-tips.png","width":1200,"height":628,"caption":"See how Global Secondary Index (GSI) partitioning can be used for more than just partitioning"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-global-secondary-index-partitioning-for-more-than-partitions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Use Global Secondary Index Partitioning for More Than Partitions"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5b6cdf2c0ffc337f914a4eb5fff2937f","name":"james.powenski","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e45dcba7caaaefe99434ad0a75964282","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg","caption":"james.powenski"},"description":"Engenheiro de solu\u00e7\u00f5es s\u00eanior do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/james-powenski\/"}]}},"authors":[{"term_id":9217,"user_id":77552,"is_guest":0,"slug":"james-powenski","display_name":"James Powenski, Couchbase Senior Solutions Engineer","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg"},"author_category":"","last_name":"Powenski","first_name":"James","job_title":"","user_url":"","description":"Engenheiro de solu\u00e7\u00f5es s\u00eanior do Couchbase"}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/11378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/77552"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=11378"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/11378\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/11379"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=11378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=11378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=11378"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=11378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}