O Couchbase, um banco de dados de documentos, permite grande flexibilidade no armazenamento de diferentes tipos de documentos em um único bucket (bucket é o equivalente a um banco de dados). Há uma necessidade frequente de se referir a documentos de um tipo semelhante juntos, por exemplo, um varejista de roupas pode querer separar todas as roupas de todos os sapatos. É possível fazer isso hoje com o Couchbase usando prefixos de chave ou campos de tipo, mas isso torna o aplicativo mais complicado.
A conteinerização de itens semelhantes na camada do banco de dados não apenas simplifica o aplicativo, mas também permite eficiências no processamento de dados em seus níveis mais baixos. Além disso, ter níveis adicionais de contenção em compartimentos permite o controle de acesso em uma granularidade mais fina do que os compartimentos.
Isso abre a porta para ter uma plataforma multilocatário mais escalável com o Couchbase do que o uso de buckets permitiria. Foi com esses objetivos que desenvolvemos o recurso denominado "Collections" (Coleções).
O Couchbase Server 6.5 disponibiliza um Developer Preview de Collections.
Neste blog, descreverei em alto nível o que são coleções, quais casos de uso elas possibilitam e a funcionalidade que oferecem. Um exemplo de código é mostrado neste postagem no blog de Johan.
Observação: um recurso do Developer Preview não pode ser usado na produção. Leia as diretrizes detalhadas sobre o Developer Preview aqui: Documentação da visualização para desenvolvedores.
O que são coleções?
Eles são contêineres de dados lógicos dentro de um bucket do Couchbase que agrupam dados semelhantes, assim como uma "tabela" faz em um banco de dados relacional.
Há também outro nível disponível para a organização de dados chamado "Escopo", semelhante a um "Esquema" em um banco de dados relacional. O espaço de nomes em cada escopo é independente dos outros, portanto, você pode ter os mesmos nomes de coleção em escopos diferentes. Da mesma forma, as chaves de documentos precisam ser exclusivas somente dentro de uma coleção e, portanto, documentos com a mesma chave podem existir em coleções diferentes.
Com essa nova introdução, os controles de acesso baseados em funções agora podem ser aplicados nos níveis de cluster, bucket, escopo e coleção.
Observação: O Developer Preview não tem o RBAC em nível de escopo e de coleção, mas ele estará disponível na versão de produção do Couchbase 7.0.
Para uma atualização perfeita e para compatibilidade com versões anteriores, cada bucket tem um escopo '_default' e o escopo '_default' tem uma coleção '_default'. A coleção _default oferece compatibilidade com versões anteriores, pois uma referência direta ao bucket será mapeada automaticamente para a coleção _default. Além disso, na atualização, todos os dados existentes irão automaticamente para a coleção _default.
Embora a coleção _default seja fornecida como um mecanismo de compatibilidade com versões anteriores, recomenda-se que os novos aplicativos sejam escritos usando uma coleção nomeada.

Organização de dados simplificada com coleções
Conforme mencionado anteriormente, os novos agrupamentos lógicos permitem uma melhor organização dos dados, semelhante às tabelas em um banco de dados relacional.
Os benefícios incluem:
- Mapeamento mais fácil de esquemas relacionais para o Couchbase, criando uma coleção para uma tabela relacional correspondente.
- Capacidade de se referir a documentos semelhantes como uma unidade para várias finalidades, como criação de um índice, configuração de replicação, consulta, backup/restauração etc.
- Indexação mais escalonável, pois o serviço de dados precisa enviar apenas os documentos da coleção, em vez de o indexador receber os documentos de todo o bucket e filtrá-los.
- Mais fácil de escrever N1QL - as instruções podem acessar uma coleção como uma tabela diretamente, em vez de precisar construí-las dinamicamente usando um atributo para o tipo de documento.
Por exemplo, compare as consultas com e sem coleções:
SELECT * FROM products WHERE type = 'clothes';
vs.
SELECT * FROM products.clothes;
Execução de aplicativos multilocatários com coleções
Os aplicativos multilocatários exigem níveis variados de isolamento entre os locatários e níveis variados de compartilhamento de recursos da infraestrutura subjacente.
No Couchbase hoje:
- O isolamento físico, de segurança e lógico completo é obtido com a implantação de clusters separados, mas oferece o mínimo de compartilhamento de recursos
- a segurança e o isolamento lógico são obtidos com vários buckets por cluster, mas têm seus próprios limites em termos de sobrecarga por bucket
- Vários locatários colocados em um único bucket oferecem o melhor compartilhamento de recursos, mas exigem que o aplicativo lide com qualquer segurança ou isolamento lógico.
Com a introdução das coleções (e o agrupamento delas em escopos), o Couchbase pode fornecer segurança e isolamento lógico em níveis mais granulares dentro de um bucket. É possível ter milhares de agrupamentos em um único bucket, o que permite hospedar milhares de locatários em um único cluster. Por outro lado, o número de buckets que podem ser hospedados em um único cluster é limitado (observe que esse limite aumentou para 30 no Couchbase Server 6.5 com o dimensionamento adequado) e, muitas vezes, não é suficiente para as necessidades de aplicativos multilocatários.
Consolidação de microsserviços com coleções
Os aplicativos modernos geralmente são escritos como um conjunto de microsserviços e um único aplicativo pode ser composto por centenas de microsserviços. Embora o uso de um bucket ou até mesmo de um cluster por microsserviço ainda seja uma opção, as coleções (e os escopos) oferecem uma alternativa mais dimensionável para consolidar mais microsserviços em um único cluster do Couchbase.
A arquitetura baseada em multilocatários e microsserviços não é mutuamente exclusiva. Muitos aplicativos multilocatários são escritos usando uma arquitetura de microsserviços. Com buckets, escopos e coleções, agora você tem muitos níveis de contenção disponíveis, o que lhe dá flexibilidade para mapear locatários, microsserviços e tabelas.
Disponibilidade de funcionalidades no Developer Preview
Depois de ativar o botão Developer Preview em um cluster do Couchbase 6.5 (Documentação da visualização para desenvolvedores), você pode começar a usar coleções e escopos. Alguns dos principais recursos de escopo e coleção da funcionalidade do DP incluem:
- Suporte para eles nos buckets do Ephemeral e do Couchbase
- Todos os SDKs do Couchbase suportam operações DDL e CRUD neles
- Você pode criá-los e soltá-los, a partir do SDK, da API REST ou do couchbase-cli.
- Você pode executar todas as operações CRUD em uma coleção (incluindo subdoc).
- A contagem de itens de cada coleção está disponível com cbstats.
- O protocolo DCP foi aprimorado para transmitir um único escopo ou uma única coleção (além da capacidade existente de transmitir um único bucket).
Observação: o DP destina-se principalmente ao acesso de chave-valor. O RBAC estará disponível posteriormente. A integração com XDCR, indexação e N1QL, eventos, análises e dispositivos móveis será visualizada posteriormente.
Próximas etapas
Aqui estão alguns recursos para você começar a usar os novos recursos do Developer Preview:
Baixar
Faça o download do Couchbase Server 6.5
Documentação
Documentação das coleções do Couchbase Server 6.5
Notas de versão do Couchbase Server 6.5
Couchbase Server 6.5 O que há de novo
Blogs
Primeiros passos com o Couchbase Collections usando o aplicativo de demonstração
Blog: Anunciando o Couchbase Server 6.5 - O que há de novo e aprimorado
Como isso se integra ao Couchbase Mobile? Em particular, existe uma maneira direta de dizer ao Sync Gateway para sincronizar documentos em um escopo ou coleção específicos?
Atualmente, o Couchbase Mobile integra-se apenas à coleção padrão. Em uma versão futura, haverá uma maneira de dizer ao Sync Gateway para sincronizar documentos dentro de um escopo ou coleção, mas ainda não.