{"id":12435,"date":"2021-12-14T11:00:16","date_gmt":"2021-12-14T19:00:16","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=12435"},"modified":"2023-05-26T13:31:24","modified_gmt":"2023-05-26T20:31:24","slug":"support-for-concurrent-index-creation-in-indexing-service","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/support-for-concurrent-index-creation-in-indexing-service\/","title":{"rendered":"Suporte \u00e0 cria\u00e7\u00e3o simult\u00e2nea de \u00edndices no servi\u00e7o de indexa\u00e7\u00e3o"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Os aplicativos modernos s\u00e3o implementados como um conjunto de um grande n\u00famero de microsservi\u00e7os. Cada um desses microsservi\u00e7os pode ser executado independentemente de muitos outros microsservi\u00e7os. Esses aplicativos esperam que os bancos de dados subjacentes ofere\u00e7am suporte a multiloca\u00e7\u00e3o. O Couchbase Server 7.0 introduziu <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/scopes-and-collections-for-modern-multi-tenant-applications-couchbase-7-0\/\"><span style=\"font-weight: 400\">Escopos e cole\u00e7\u00f5es<\/span><\/a><span style=\"font-weight: 400\"> para dar suporte a multiloca\u00e7\u00e3o e para <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/indexing-service-optimizations-with-couchbase-collections\/\"><span style=\"font-weight: 400\">facilitar a modelagem de dados<\/span><\/a><span style=\"font-weight: 400\"> para aplicativos modernos. Os escopos e as cole\u00e7\u00f5es oferecem aos usu\u00e1rios uma separa\u00e7\u00e3o l\u00f3gica dos dados em um bucket.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Agora, cada microsservi\u00e7o de um aplicativo pode criar independentemente os \u00edndices secund\u00e1rios globais necess\u00e1rios para esse microsservi\u00e7o. Nas vers\u00f5es anteriores do Couchbase Server, apenas uma solicita\u00e7\u00e3o de cria\u00e7\u00e3o de \u00edndice era permitida no cluster. Para refor\u00e7ar o suporte a multiloca\u00e7\u00e3o, no Couchbase Server 7.0, o fluxo de trabalho de cria\u00e7\u00e3o de \u00edndices foi aprimorado para permitir v\u00e1rias solicita\u00e7\u00f5es simult\u00e2neas de cria\u00e7\u00e3o de \u00edndices. Neste blog, discutiremos <\/span><i><span style=\"font-weight: 400\">como a experi\u00eancia do usu\u00e1rio na cria\u00e7\u00e3o simult\u00e2nea de v\u00e1rios \u00edndices foi aprimorada.<\/span><\/i><\/p>\n<h2><span style=\"font-weight: 400\">Fluxo de trabalho aprimorado de cria\u00e7\u00e3o de \u00edndices<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Primeiro, vamos entender o fluxo de trabalho de cria\u00e7\u00e3o de \u00edndices em um cluster do Couchbase. <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createindex.html\"><span style=\"font-weight: 400\">Cria\u00e7\u00e3o de \u00edndices<\/span><\/a><span style=\"font-weight: 400\"> acontece em duas fases (1) Cria\u00e7\u00e3o de metadados de \u00edndice e (2) Constru\u00e7\u00e3o do \u00edndice. Na primeira fase, o servi\u00e7o de \u00edndice do Couchbase determina o melhor posicionamento poss\u00edvel para o novo \u00edndice, com a ajuda de <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/index-planner-for-global-secondary-indexes\/\"><span style=\"font-weight: 400\">planejador de \u00edndices<\/span><\/a><span style=\"font-weight: 400\">e os metadados do \u00edndice s\u00e3o mantidos. Na segunda fase, os n\u00f3s de host determinados na primeira fase iniciar\u00e3o um fluxo com o servi\u00e7o de dados para a \"cria\u00e7\u00e3o do \u00edndice\". Os usu\u00e1rios podem especificar o <em>defer_build<\/em> durante a cria\u00e7\u00e3o do \u00edndice para executar somente a primeira fase e a segunda fase pode ser acionada posteriormente usando o sinalizador <\/span><em><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/build-index.html\"><span style=\"font-weight: 400\">\u00edndice de constru\u00e7\u00e3o<\/span><\/a><\/em><span style=\"font-weight: 400\"> comando.<\/span><\/p>\n<p><i><span style=\"font-weight: 400\">Nas se\u00e7\u00f5es a seguir, o significado de <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createindex.html\">cria\u00e7\u00e3o de \u00edndices<\/a> \u00e9 limitado apenas \u00e0 primeira fase.<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400\">Para obter o melhor posicionamento poss\u00edvel do \u00edndice, apenas uma inst\u00e2ncia do planejador de \u00edndice deve ser executada por vez. Portanto, o servi\u00e7o de \u00edndice - que executa vers\u00f5es mais antigas do servidor Couchbase - rejeita qualquer nova solicita\u00e7\u00e3o de cria\u00e7\u00e3o de \u00edndice recebida se houver uma solicita\u00e7\u00e3o de cria\u00e7\u00e3o de \u00edndice em andamento. <\/span><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12440 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/IndexCreation6.png\" alt=\"\" width=\"580\" height=\"360\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation6.png 580w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation6-300x186.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation6-20x12.png 20w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Esse comportamento foi aprimorado no Couchbase Server 7.0, onde o servi\u00e7o de \u00edndice aceita todas as solicita\u00e7\u00f5es de cria\u00e7\u00e3o de \u00edndice recebidas, mesmo que haja uma cria\u00e7\u00e3o de \u00edndice em andamento. <\/span><b>O servi\u00e7o de \u00edndice enfileira a solicita\u00e7\u00e3o de cria\u00e7\u00e3o de \u00edndice, processa as solicita\u00e7\u00f5es enfileiradas em segundo plano e, somente depois que o \u00edndice \u00e9 criado, a resposta \u00e9 retornada ao chamador.<\/b><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12439 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/IndexCreation7.png\" alt=\"\" width=\"606\" height=\"392\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation7.png 606w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation7-300x194.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation7-20x13.png 20w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/p>\n<p><i><span style=\"font-weight: 400\">Observe que a cria\u00e7\u00e3o do \u00edndice era uma solicita\u00e7\u00e3o de bloqueio antes do Couchbase Server 7.0 e permanece bloqueada tamb\u00e9m nas novas vers\u00f5es.<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400\">Os usu\u00e1rios podem monitorar os \u00edndices que est\u00e3o na fila para cria\u00e7\u00e3o em segundo plano por meio da interface do usu\u00e1rio da Web, conforme mostrado na captura de tela abaixo. Observe que o \u00edndice <em>status<\/em> \u00e9 <em>programado para cria\u00e7\u00e3o<\/em>.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12441 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/ScheduledIndexes_UI-cropped.png\" alt=\"\" width=\"3352\" height=\"1514\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped.png 3352w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-300x136.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-1024x463.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-768x347.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-1536x694.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-2048x925.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-1320x596.png 1320w\" sizes=\"auto, (max-width: 3352px) 100vw, 3352px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Os usu\u00e1rios tamb\u00e9m podem monitorar o status do \u00edndice de forma program\u00e1tica usando o N1QL, conforme mostrado na captura de tela abaixo.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12442 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/ScheduledIndexes_n1ql-cropped.png\" alt=\"\" width=\"2598\" height=\"1629\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped.png 2598w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-300x188.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-1024x642.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-768x482.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-1536x963.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-2048x1284.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-1320x828.png 1320w\" sizes=\"auto, (max-width: 2598px) 100vw, 2598px\" \/><\/p>\n<h2><span style=\"font-weight: 400\">Melhoria da experi\u00eancia do usu\u00e1rio<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Nas vers\u00f5es anteriores, os usu\u00e1rios tinham que tentar novamente a cria\u00e7\u00e3o do \u00edndice quando havia outro \u00edndice em andamento sendo criado. Se a cria\u00e7\u00e3o do \u00edndice estiver ocorrendo de forma program\u00e1tica, o programa precisar\u00e1 de um mecanismo de repeti\u00e7\u00e3o. Com o servidor Couchbase 7.0, o programa do usu\u00e1rio n\u00e3o precisa contar com o mecanismo de repeti\u00e7\u00e3o ao criar um \u00edndice, pois o servi\u00e7o de \u00edndice executar\u00e1 as tentativas necess\u00e1rias em segundo plano. Observe que o servi\u00e7o de \u00edndice n\u00e3o executa apenas \"tentativas simples\". Ele prioriza internamente as solicita\u00e7\u00f5es com base no registro de data e hora da solicita\u00e7\u00e3o, de modo que a converg\u00eancia das solicita\u00e7\u00f5es de cria\u00e7\u00e3o de \u00edndices seja mais r\u00e1pida e muito mais confi\u00e1vel.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O servi\u00e7o de \u00edndice serializa as cria\u00e7\u00f5es de \u00edndice no cluster com a ajuda de um mecanismo de bloqueio distribu\u00eddo globalmente. Portanto, para a cria\u00e7\u00e3o de um \u00edndice, todos os n\u00f3s do servi\u00e7o de \u00edndice precisam chegar a um consenso antes de permitir a cria\u00e7\u00e3o do \u00edndice.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Agora, vamos dar uma olhada no cen\u00e1rio\/exemplo a seguir para entender como a converg\u00eancia \u00e9 aprimorada com o envolvimento do servi\u00e7o de \u00edndice.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Digamos que dois aplicativos de usu\u00e1rio (ou microsservi\u00e7os) estejam tentando criar \u00edndices simultaneamente. Os dois aplicativos podem se conectar a dois n\u00f3s de servi\u00e7o de consulta diferentes para a cria\u00e7\u00e3o de \u00edndices. O n\u00f3 de servi\u00e7o de consulta executa um cliente de servi\u00e7o de \u00edndice que \u00e9 respons\u00e1vel por adquirir o bloqueio distribu\u00eddo globalmente e determinar o posicionamento do \u00edndice executando o planejador de \u00edndices. <\/span><\/p>\n<h3>Linha do tempo de cria\u00e7\u00e3o do \u00edndice na vers\u00e3o pr\u00e9-7.0 do Couchbase<\/h3>\n<p><span style=\"font-weight: 400\">Vamos considerar uma poss\u00edvel linha do tempo dos eventos que ocorrem no cluster (com a vers\u00e3o &lt; 7.0 do Couchbase Server), conforme mostrado no diagrama abaixo.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12444 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/IndexCreationRaceCondition1.png\" alt=\"\" width=\"774\" height=\"360\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceCondition1.png 774w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceCondition1-300x140.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceCondition1-768x357.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceCondition1-20x9.png 20w\" sizes=\"auto, (max-width: 774px) 100vw, 774px\" \/><\/p>\n<p><b>Linha do tempo:<\/b><\/p>\n<p><b>T0:<\/b> <span style=\"font-weight: 400\">Ambos os aplicativos acionam solicita\u00e7\u00f5es de cria\u00e7\u00e3o de \u00edndices simultaneamente e as solicita\u00e7\u00f5es s\u00e3o recebidas pelos clientes do servi\u00e7o de \u00edndice.<\/span><\/p>\n<p><b>T1:<\/b> <span style=\"font-weight: 400\">O cliente de servi\u00e7o de \u00edndice 1 envia o <\/span><i><span style=\"font-weight: 400\">Trava<\/span><\/i><span style=\"font-weight: 400\"> para o n\u00f3 de \u00edndice 1. N\u00f3 de \u00edndice 1 <\/span><b>aceita<\/b><span style=\"font-weight: 400\"> a solicita\u00e7\u00e3o.<\/span><\/p>\n<p><b>T2:<\/b> <span style=\"font-weight: 400\">O cliente de servi\u00e7o de \u00edndice 2 envia o <\/span><i><span style=\"font-weight: 400\">Trava<\/span><\/i><span style=\"font-weight: 400\"> para o n\u00f3 de \u00edndice 2. N\u00f3 de \u00edndice 2 <\/span><b>aceita<\/b><span style=\"font-weight: 400\"> a solicita\u00e7\u00e3o.<\/span><\/p>\n<p><b>T3:<\/b> <span style=\"font-weight: 400\">O cliente de servi\u00e7o de \u00edndice 1 envia o <\/span><i><span style=\"font-weight: 400\">Trava<\/span><\/i><span style=\"font-weight: 400\"> para o n\u00f3 de \u00edndice 2. N\u00f3 de \u00edndice 2 <\/span><b>rejeita<\/b><span style=\"font-weight: 400\"> a solicita\u00e7\u00e3o, pois j\u00e1 aceitou a solicita\u00e7\u00e3o do cliente 2.<\/span><\/p>\n<p><b>T4:<\/b> <span style=\"font-weight: 400\">O cliente de servi\u00e7o de \u00edndice 2 envia o <\/span><i><span style=\"font-weight: 400\">Trava<\/span><\/i><span style=\"font-weight: 400\"> para o n\u00f3 de \u00edndice 1. N\u00f3 de \u00edndice 1 <\/span><b>rejeita<\/b><span style=\"font-weight: 400\"> a solicita\u00e7\u00e3o, pois j\u00e1 aceitou a solicita\u00e7\u00e3o do cliente 1.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Observe que, neste exemplo, na vers\u00e3o do Couchbase Server &lt; 7.0, ambas as solicita\u00e7\u00f5es ser\u00e3o rejeitadas pelo Couchbase e os scripts do usu\u00e1rio precisar\u00e3o tentar novamente. Se os scripts do usu\u00e1rio tentarem novamente imediatamente ou depois de algum per\u00edodo de espera determin\u00edstico, a pr\u00f3xima tentativa ainda poder\u00e1 levar a um cen\u00e1rio\/linha do tempo semelhante e ambas as solicita\u00e7\u00f5es ainda poder\u00e3o ser rejeitadas na pr\u00f3xima tentativa.<\/span><\/p>\n<h3>Fila de cria\u00e7\u00e3o de \u00edndice com o Couchbase 7.0<\/h3>\n<p><span style=\"font-weight: 400\">Com o Couchbase Server 7.0, o comportamento aprimorado e uma linha do tempo semelhante ao nosso exemplo s\u00e3o mostrados no diagrama abaixo. Observe que a responsabilidade de criar um \u00edndice \u00e9 assumida pelos criadores de \u00edndices em segundo plano, enquanto o thread do aplicativo do usu\u00e1rio ainda est\u00e1 aguardando a conclus\u00e3o da cria\u00e7\u00e3o do \u00edndice. O thread do usu\u00e1rio receber\u00e1 uma resposta somente quando o \u00edndice for criado.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12443 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/IndexCreationRaceConditionFix1.png\" alt=\"\" width=\"878\" height=\"352\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceConditionFix1.png 878w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceConditionFix1-300x120.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceConditionFix1-768x308.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceConditionFix1-20x8.png 20w\" sizes=\"auto, (max-width: 878px) 100vw, 878px\" \/><\/p>\n<p><b>Linha do tempo:<\/b><\/p>\n<p><b>T0:<\/b> <span style=\"font-weight: 400\">Dois threads de cria\u00e7\u00e3o de \u00edndice em segundo plano acionam a cria\u00e7\u00e3o de \u00edndice simultaneamente e as solicita\u00e7\u00f5es s\u00e3o recebidas pelos clientes do servi\u00e7o de \u00edndice.<\/span><\/p>\n<p><b>T1:<\/b> <span style=\"font-weight: 400\">O cliente de servi\u00e7o de \u00edndice 1 envia o <\/span><i><span style=\"font-weight: 400\">Trava<\/span><\/i><span style=\"font-weight: 400\"> (com prioridade P1) para o n\u00f3 de \u00edndice 1. N\u00f3 de \u00edndice 1 <\/span><b>aceita<\/b><span style=\"font-weight: 400\"> a solicita\u00e7\u00e3o.<\/span><\/p>\n<p><b>T2:<\/b> <span style=\"font-weight: 400\">O cliente de servi\u00e7o de \u00edndice 2 envia o <\/span><i><span style=\"font-weight: 400\">Trava<\/span><\/i><span style=\"font-weight: 400\"> (com prioridade P2) para o n\u00f3 de \u00edndice 2. N\u00f3 de \u00edndice 2 <\/span><b>aceita<\/b><span style=\"font-weight: 400\"> a solicita\u00e7\u00e3o.<\/span><\/p>\n<p><b>T3:<\/b> <span style=\"font-weight: 400\">O cliente de servi\u00e7o de \u00edndice 1 envia o <\/span><i><span style=\"font-weight: 400\">Trava<\/span><\/i><span style=\"font-weight: 400\"> (com prioridade P1) para o n\u00f3 de \u00edndice 2. N\u00f3 de \u00edndice 2 <\/span><b>aceita<\/b><span style=\"font-weight: 400\"> a solicita\u00e7\u00e3o, pois ela tem prioridade mais alta do que a solicita\u00e7\u00e3o aceita anteriormente.<\/span><\/p>\n<p><b>T4:<\/b> <span style=\"font-weight: 400\">O cliente de servi\u00e7o de \u00edndice 2 envia o <\/span><i><span style=\"font-weight: 400\">Trava<\/span><\/i><span style=\"font-weight: 400\"> (com prioridade P2) para o n\u00f3 de \u00edndice 1. N\u00f3 de \u00edndice 1 <\/span><b>rejeita<\/b><span style=\"font-weight: 400\"> a solicita\u00e7\u00e3o, pois j\u00e1 aceitou a solicita\u00e7\u00e3o com prioridade mais alta do cliente 2.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Observe que o mecanismo de bloqueio distribu\u00eddo usa um <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Two-phase_commit_protocol\"><span style=\"font-weight: 400\">protocolo de confirma\u00e7\u00e3o em duas fases<\/span><\/a><span style=\"font-weight: 400\"> de modo que a solicita\u00e7\u00e3o aceita anteriormente (com prioridade P2) no n\u00f3 de \u00edndice 2 falhar\u00e1 durante a fase de confirma\u00e7\u00e3o e ser\u00e1 tentada novamente pelo criador do \u00edndice em segundo plano.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Observe tamb\u00e9m que as prioridades de solicita\u00e7\u00e3o s\u00e3o baseadas em registros de data e hora de solicita\u00e7\u00e3o gerados com granularidade de nanossegundos. Isso elimina a maior parte da conten\u00e7\u00e3o de bloqueio distribu\u00eddo. Mas h\u00e1 uma possibilidade de duas solicita\u00e7\u00f5es terem exatamente os mesmos registros de data e hora. Para lidar com esse caso, o servi\u00e7o de \u00edndice usa backoff aleat\u00f3rio para reduzir ainda mais a conten\u00e7\u00e3o de bloqueio distribu\u00eddo.\u00a0<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Modern applications are implemented as a set of a large number of microservices. Each such microservice may run independently of many other microservices. Such applications expect underlying databases to support multi-tenancy. Couchbase Server 7.0 has introduced Scopes and Collections to [&hellip;]<\/p>\n","protected":false},"author":49228,"featured_media":12579,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1821,8905,1816,2453,9381,9336],"tags":[8907,9197,1696,2103,9349,1641],"ppma_author":[9101],"class_list":["post-12435","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-couchbase-architecture","category-couchbase-global-secondary-index","category-couchbase-server","category-global-secondary-index","category-indexing","category-scopes-and-collections","tag-couchbase-server-7-0","tag-distributed-databases","tag-indexing","tag-microservices","tag-multi-tenancy","tag-secondary-indexing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Support for Concurrent Index Creation in Indexing Service - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.\" \/>\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\/support-for-concurrent-index-creation-in-indexing-service\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Support for Concurrent Index Creation in Indexing Service\" \/>\n<meta property=\"og:description\" content=\"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/support-for-concurrent-index-creation-in-indexing-service\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-14T19:00:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-26T20:31:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Amit Kulkarni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Amit Kulkarni\" \/>\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\\\/support-for-concurrent-index-creation-in-indexing-service\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/\"},\"author\":{\"name\":\"Amit Kulkarni\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/76beaf20748818542ed2b7a6bfcd524c\"},\"headline\":\"Support for Concurrent Index Creation in Indexing Service\",\"datePublished\":\"2021-12-14T19:00:16+00:00\",\"dateModified\":\"2023-05-26T20:31:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/\"},\"wordCount\":1131,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/12\\\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\",\"keywords\":[\"Couchbase Server 7.0\",\"distributed databases\",\"Indexing\",\"microservices\",\"multi-tenancy\",\"Secondary Indexing\"],\"articleSection\":[\"Application Design\",\"Couchbase Architecture\",\"Couchbase Global Secondary Index\",\"Couchbase Server\",\"Global Secondary Index\",\"Indexing\",\"Scopes and Collections\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/\",\"name\":\"Support for Concurrent Index Creation in Indexing Service - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/12\\\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\",\"datePublished\":\"2021-12-14T19:00:16+00:00\",\"dateModified\":\"2023-05-26T20:31:24+00:00\",\"description\":\"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/12\\\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/12\\\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\",\"width\":2560,\"height\":1707},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/support-for-concurrent-index-creation-in-indexing-service\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Support for Concurrent Index Creation in Indexing Service\"}]},{\"@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\\\/76beaf20748818542ed2b7a6bfcd524c\",\"name\":\"Amit Kulkarni\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g9b381fdec8caa95228a24342f1abbbbc\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g\",\"caption\":\"Amit Kulkarni\"},\"description\":\"Amit Kulkarni is working as a Engineering Manager at Couchbase on Global Secondary Indexes. He has experience in working on technologies like Distributed Systems, Distributed NoSQL Databases, Cloud Storage, Storage Virtualisation etc.\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pt\\\/author\\\/amit-kulkarni\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Suporte para cria\u00e7\u00e3o simult\u00e2nea de \u00edndices no servi\u00e7o de indexa\u00e7\u00e3o - The Couchbase Blog","description":"Neste blog, discutiremos como a experi\u00eancia do usu\u00e1rio na cria\u00e7\u00e3o simult\u00e2nea de v\u00e1rios \u00edndices foi aprimorada.","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\/support-for-concurrent-index-creation-in-indexing-service\/","og_locale":"pt_BR","og_type":"article","og_title":"Support for Concurrent Index Creation in Indexing Service","og_description":"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/support-for-concurrent-index-creation-in-indexing-service\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-12-14T19:00:16+00:00","article_modified_time":"2023-05-26T20:31:24+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Amit Kulkarni","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Amit Kulkarni","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/"},"author":{"name":"Amit Kulkarni","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/76beaf20748818542ed2b7a6bfcd524c"},"headline":"Support for Concurrent Index Creation in Indexing Service","datePublished":"2021-12-14T19:00:16+00:00","dateModified":"2023-05-26T20:31:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/"},"wordCount":1131,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","keywords":["Couchbase Server 7.0","distributed databases","Indexing","microservices","multi-tenancy","Secondary Indexing"],"articleSection":["Application Design","Couchbase Architecture","Couchbase Global Secondary Index","Couchbase Server","Global Secondary Index","Indexing","Scopes and Collections"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/","url":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/","name":"Suporte para cria\u00e7\u00e3o simult\u00e2nea de \u00edndices no servi\u00e7o de indexa\u00e7\u00e3o - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","datePublished":"2021-12-14T19:00:16+00:00","dateModified":"2023-05-26T20:31:24+00:00","description":"Neste blog, discutiremos como a experi\u00eancia do usu\u00e1rio na cria\u00e7\u00e3o simult\u00e2nea de v\u00e1rios \u00edndices foi aprimorada.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","width":2560,"height":1707},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Support for Concurrent Index Creation in Indexing Service"}]},{"@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\/76beaf20748818542ed2b7a6bfcd524c","name":"Amit Kulkarni","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g9b381fdec8caa95228a24342f1abbbbc","url":"https:\/\/secure.gravatar.com\/avatar\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g","caption":"Amit Kulkarni"},"description":"Amit Kulkarni est\u00e1 trabalhando como gerente de engenharia na Couchbase em \u00edndices secund\u00e1rios globais. Ele tem experi\u00eancia em trabalhar com tecnologias como sistemas distribu\u00eddos, bancos de dados NoSQL distribu\u00eddos, armazenamento em nuvem, virtualiza\u00e7\u00e3o de armazenamento etc.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/amit-kulkarni\/"}]}},"acf":[],"authors":[{"term_id":9101,"user_id":49228,"is_guest":0,"slug":"amit-kulkarni","display_name":"Amit Kulkarni","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/12435","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\/49228"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=12435"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/12435\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/12579"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=12435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=12435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=12435"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=12435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}