Nesta postagem, apresentamos os catálogos de sistema no Couchbase e analisamos um caso de uso específico em comparação com o SQL Server.

Se você for como eu, depois de 20 anos de trabalho com o SQL Server, tende a perceber coisas que considera irritantes. Você criará uma solução elegante, mas, depois de mudar de emprego e não ter sua solução, encontrará os mesmos problemas várias vezes. Tive uma experiência semelhante com problemas incômodos nas exibições do catálogo do sistema no SQL Server. Aqui eu mostro como isso pode ser muito mais simples usando o Couchbase.

Visualizações do catálogo do sistema

Os catálogos do sistema são as tabelas e exibições internas que mostram metadados em nível de sistema sobre os objetos armazenados no banco de dados.

No SQL Server, você pode examinar esses dados internos usando o Transact-SQL (T-SQL) para acessar as visualizações do catálogo do sistema e os DMOs (Dynamic Management Objects)*. 

Há outras funções e recursos que podem ser chamados, mas a maioria dos usuários se atém a esses dois, pois a sintaxe é mais fácil e há muito material de referência disponível.

O escopo do SQL Server System Catalog Views sempre me incomodou porque a Microsoft o definiu como sendo por banco de dados em alguns casos, como veremos a seguir. Alguns acham que essa é uma boa abordagem, mas isso pode dificultar a comparação de resultados em vários bancos de dados associados, pois o escopo é limitado a um banco de dados de cada vez.

* (Se você está acostumado a chamá-las de DMVs (Dynamic Management Views), lembre-se de que também existem DMFs para funções. DMOs é o termo genérico a ser usado).

Terminologia do Couchbase vs. SQL Server

Antes de prosseguirmos, vamos comparar a terminologia principal de alguns conceitos básicos de banco de dados entre o SQL Server e o Couchbase. Como o Couchbase é um banco de dados NoSQL com uma linguagem de consulta SQL para JSON, há algumas sobreposições com o SQL Server, mas também algumas variações. Esta tabela descreve os principais termos em ambos os sistemas.

SQL Server Couchbase Notas
Aglomerado Aglomerado Um cluster no SQL Server é para alta disponibilidade, em que cada instância só está ativa em um nó. O Couchbase se beneficia de uma arquitetura distribuída; cada nó pode conter dados ativos, se assim configurado.
Instância Cluster / Nó A instalação do mecanismo do SQL Server é classificada como uma instância. Mais de uma instância pode residir na mesma máquina. O Couchbase aplica a ideia de nós separados, em que cada nó pode conter vários tipos de serviços. Os DBAs também podem distribuir serviços em vários nós. Chamamos esse dimensionamento multidimensional de um recurso central e poderoso do Couchbase.

Uma instância do SQL Server pode ser comparada a um cluster do Couchbase que potencialmente contém vários nós.

Banco de dados Balde
Esquema Escopo
Tabela Coleção
Registro/Linha Documento

Análise de índices usando catálogos de sistema

Para o nosso caso de uso específico, queremos extrair uma lista de índices de todos os bancos de dados para comparar e verificar se algum índice está faltando. Se você é um provedor business-to-business e hospeda muitos clientes na mesma instância, essa é uma pergunta comum. Muitas vezes, cada cliente terá um banco de dados separado e aplicará o mesmo esquema e conjunto de índices.

O pseudocódigo a seguir descreve uma solução. A ideia aqui não é resolver o problema para você, mas demonstrar quanto mais esforço o SQL Server precisa para obter resultados semelhantes. Como os catálogos do Couchbase têm escopo no nível do cluster, isso permite comparar facilmente vários buckets em um cluster.

Aqui não estamos usando a função integrada do SQL Server para percorrer os bancos de dados, pois ela costumava apresentar alguns bugs. Aaron Bertrand escreveu uma versão muito melhor, que você pode encontrar em Dicas de MSSQL.

Pseudocódigo para o SQL Server:

  1. Criar uma tabela temporária para armazenar dados
  2. Iniciar loop/cursor com base no número de bancos de dados de usuários
  3. Crie uma string dinâmica para entrar no escopo desse banco de dados, selecione dados do catálogo de índices ou DMO junto com o nome do banco de dados e insira dados na tabela
  4. Executar cadeia dinâmica
  5. Próximo banco de dados
  6. Em seguida, sua consulta (exemplo de língua na bochecha abaixo):

Consulta N1QL para o Couchbase:

Em contrapartida, fazer a mesma coisa no Couchbase é simples porque o catálogo está no nível do cluster e não no nível do banco de dados. Aqui só precisamos executar uma única consulta. Nesse cenário, estamos usando o Couchbase 7 e nenhum escopo padrão está sendo usado. (Um escopo no Couchbase seria análogo a um esquema no SQL Server). 

A consulta usa o catálogo do sistema para acessar os índices ativos:

Ao analisar a consulta, você perceberá imediatamente a semelhança com o TSQL. O Couchbase se esforçou muito para criar o N1QL, nossa linguagem SQL-for-JSON, de modo que qualquer pessoa familiarizada com SQL poderá aprender o N1QL quase que instantaneamente. 

Criei três buckets com um escopo e uma coleção para testar o que foi dito acima. Inseri alguns dados e criei alguns índices. Para facilitar a vida, coloquei apenas um número codificado na cláusula WHERE, mas poderia ter feito referência a outros catálogos para totalizar o número de compartimentos, escopos ou coleções que você pode querer comparar.

Obviamente, os índices não são os únicos objetos que podemos verificar. Também poderíamos fazer a mesma coisa com escopos (esquemas) e coleções (tabelas) sem criar loops, como faria com o SQL Server, porque os catálogos de sistema do Couchbase têm acesso a todos os objetos no cluster.

Próximas etapas

Como você pode ver, o acesso simplificado aos objetos do banco de dados no Couchbase pode ser muito conveniente. O acesso aos metadados do banco de dados é importante para qualquer DBA e pode ser feito facilmente com o mínimo de código. Espero que você experimente e veja como é rápido começar a trabalhar no Couchbase com essa abordagem.

Autor

Postado por Richard Douglas - Engenheiro de soluções

Deixar uma resposta