Em novembro, Raju Suravarjjala(Diretor Sênior, Couchbase QE & Performance) e eu apresentamos "Mindmap: Oracle to Couchbase For Developers". Você pode ver o conjunto de slides aqui: http://bit.ly/2mPdJfo. O artigo de visão geral da série está em está em https://www.couchbase.com/blog/couchbase-oracle-developers-part-2-architecture/. Esta série foi escrita em colaboração com Raju.
Esta é a segunda parte da série "Couchbase para desenvolvedores Oracle", que discute a arquitetura de alto nível dos dois bancos de dados a partir de uma perspectiva de desenvolvedor. O blog pressupõe que você tenha conhecimento do Oracle e não explica os recursos do Oracle, exceto por motivos de comparação e contraste. Esta comparação e contraste é apenas para isso. Não se destina a avaliar um recurso ou desempenho em relação a outro.
Tanto o Oracle quanto o Couchbase foram desenvolvidos para lidar com tarefas específicas de aplicativos corporativos. Ambos se expandiram e estão se expandindo. Eles coexistem nas empresas. É com essa sensibilidade que estamos fornecendo uma comparação desses produtos para ajudar os desenvolvedores Oracle a entender o que é o Couchbase.
Agora, vamos à arquitetura.
Tópico | Oráculo | Couchbase |
Implementação de nó único | O Oracle é um banco de dados monolítico de instância única (na implementação mostrada em 1). Na verdade, ele foi originalmente desenvolvido para ser executado em uma única máquina e funciona bem em uma máquina SMP (multi-socket, multi-core). Todas as camadas de um banco de dados (lógica, gerenciamento de espaço físico, bloqueio, registro, são gerenciadas a partir de uma única máquina). O código é executado em um único thread (ou threads cooperativos) com bloqueio de recursos projetado para uma única máquina.
Essa configuração é a maioria das implementações de desenvolvimento e produção. Quando você fica sem capacidade de disco, adiciona capacidade. Quando a capacidade da CPU se esgota, você migra a carga de trabalho para uma máquina maior, com mais soquetes, mais núcleos. Ou, atualmente, VMs ou contêineres maiores. O APP para comunicação com o servidor usa o protocolo proprietário oracle. Os SDKs de nível superior trabalham em cima disso. |
O servidor Couchbase pode ser instalado em um único servidor e geralmente é instalado em um único nó (MacOS, Linux ou Windows) para desenvolvimento. Todas as funções do banco de dados são abstraídas em serviços (camada de dados, índice, consulta, com APIs para acessar os dados diretamente ou por meio de consulta). Esses serviços são coordenados para expor os serviços por meio da API REST. Os aplicativos usam SDKs do Couchbase (disponíveis em todos os idiomas populares) para obter dados, criar índices e executar consultas N1QL.
Essa configuração é usada principalmente para desenvolvimento em seu laptop, VM ou em um contêiner. Ela raramente, ou nunca, é usada na implementação. Na verdade, o Couchbase emite um aviso quando você faz a implantação em um único nó, pois há apenas uma cópia dos seus dados! A API para comunicação com o servidor é via API REST e protocolo binário Memcached. Todos os outros SDKs de nível superior usam os protocolos REST ou Memcached por baixo. |
Idiomas | SQL, PL/SQL, XQuery, SES (Secure Enterprise Search) | N1QL (SQL para JSON), acesso direto aos dados, FTS (pesquisa de texto completo). |
Conexões | Uma conexão persistente entre o processo do usuário e o processo/thread do banco de dados executado em nome do aplicativo cliente. | Conexão HTTP sobre TCP/IP. Conexão para MemcachedCada solicitação de busca/modificação de dados e consulta é uma solicitação distinta. Enquanto usamos o TCP e o HTTP keep-alive para tornar a solicitação de conexão eficiente. |
Sessão | Uma sessão começa de CONNECT a QUIT. Cada "sessão" de aplicativo tem uma sessão correspondente no servidor Oracle. Em uma sessão, é possível executar uma consulta ou um milhão de consultas que abrangem várias transações. | Assim como a conexão, no Couchbase, cada solicitação é uma solicitação distinta. Cada solicitação deve conter parâmetros de ligação e quaisquer parâmetros de contexto (por exemplo, tempo limite). Depois que a solicitação é processada, o contexto da sessão desaparece no servidor.
No entanto, nada impede que os SDKs se lembrem do contexto e dos parâmetros e os repassem na solicitação subsequente sem intervenção do aplicativo, facilitando o código. |
Usuário, autenticação | Suporta usuário do sistema operacional e usuário do banco de dados. A autenticação pode ser feita pelo sistema operacional, pelo banco de dados ou por terceiros, como LDAP, kerberos. | Suporta usuário do sistema operacional e usuário do banco de dados. A autenticação pode ser feita pelo sistema operacional, pelo banco de dados ou por terceiros, como LDAP, kerberos. |
Banco de dados | Mais baixo que a instância, o banco de dados é a unidade de gerenciamento de dados e controle de acesso de nível superior para usuários e aplicativos.
Uma instância Oracle pode ter vários bancos de dados. |
Uma instância do Couchbase pode ter até 10 BUCKETS. A cada bucket é alocada uma quantidade fixa de memória (em cada nó). Isso é usado para armazenar em cache os dados nos nós de dados. Pense nisso como o pool de buffer para os dados no Oracle.
Em cada bucket, você armazena documentos JSON. Cada documento JSON em um único bucket deve ter uma chave exclusiva (semelhante à chave primária em suas tabelas). Em cada compartimento, você pode ter vários tipos de documentos (como tabelas e coleções). Para permitir a exclusividade e identificar o tipo de documento apenas observando a chave, prefixamos a chave do documento com o tipo do documento. Por exemplo: "cust.x817.022.4u2" {"type": "cust, "lname": "Smith"} |
Tabela | Tabela | Tipos de documentos em um bucket. Os documentos do cliente (com um prefixo cust) tornam-se um grupo logicamente e os documentos de peças também se tornam um grupo. Não há separação física, exceto no contexto de um índice e de uma consulta. |
Coluna | Coluna | Todos os documentos no Couchbase devem ser documentos JSON em conformidade com http://json.org/ Considere um documento JSON simples de 1 nível. Chave do documento: "cust:2984" Doc: {"a":1, "b": True, "c": "Hello"} Em seu mapa mental, você pode pensar nesse documento como uma linha, atributos individuais, "a", "b", "c" como colunas, a chave do documento como uma chave primária. Este documento contém valores escalares simples. O JSON pode conter matrizes e objetos, matrizes de objetos, objetos contendo matrizes. Os nomes de atributos são referenciados de cima para baixo (pense em objetos no Oracle), o que será discutido em detalhes na seção "Tipos de banco de dados". |
Estruturas de esquema lógico e físico. | ||
SDKs | http://bit.ly/20TCGn0 | https://www.couchbase.com/downloads (role para baixo até SDKs) |
Arquitetura de vários nós (Implementação homogênea). |
||
Implementação multidimensional | Não disponível. Cada nó no Oracle RAC tem capacidade total de Oracle SQL, incluindo a capacidade transacional e administrativa. |
Cada nó do cluster pode ter uma ou mais combinações dos serviços: Dados, Consulta, Índice, Pesquisa e Análise. O gerente do cluster (coordenador) está ciente da distribuição e da disponibilidade dos serviços e informará os serviços uns sobre os outros. O SDK também está ciente da distribuição de dados, da consulta e dos nós FTS. O SDK tenta equilibrar a carga de trabalho entre os diferentes nós de consulta para a carga de trabalho de consulta, os nós de dados para a carga de trabalho de dados/KV e os nós FTS para a carga de trabalho de pesquisa. |
Arquitetura do sistema | A implantação de um único nó é adequada para SMP. A implementação de vários nós compartilha o mesmo disco/armazenamento. Por isso, o sistema de disco compartilhado. Você pode aumentar a escala até certo ponto, adicionando mais computação e compartilhando o mesmo disco. Eventualmente, o disco compartilhado e a taxa de transferência de E/S se tornam o gargalo. O desenvolvedor não se importa (na maioria das vezes) com o tipo de instância: RAC de nó único ou de vários nós. O SQL suportado é o mesmo e as transações funcionam perfeitamente em um ambiente de vários nós. A Oracle desenvolveu um sofisticado gerenciador de bloqueio distribuído, sincronização de pool de buffer etc. para conseguir isso. Ele requer o caro infiniband para reduzir qualquer efeito negativo sobre o desempenho. Apesar disso, não é incomum particionar a carga de trabalho entre vários nós RAC para minimizar os conflitos de bloqueio, etc. |
Um único nó pode ser ampliado, implementado como vários serviços cooperativos executados em um único sistema. A coordenação é feita por meio da passagem de mensagens, mesmo em um único sistema.
Esse conjunto de serviços com acoplamento frouxo se presta a ser ampliado sem problemas. Você pode ter todos os serviços em cada nó e simplesmente adicionar novos nós com os mesmos serviços. Todos os serviços entenderão a topologia de vários nós. Isso é conhecido como scale-out. Os aplicativos não usam todos os serviços de maneira uniforme. Os gargalos podem estar nos dados, no indexador da consulta. Portanto, no Couchbase, você dimensiona e adiciona novos nós simplesmente para executar os serviços com gargalo. Isso proporcionará a utilização ideal dos recursos e melhor desempenho em comparação com uma implementação homogênea. Isso também reduzirá seu custo. O dimensionamento multidimensional é fácil de implementar como qualquer outra configuração e a capacidade de gerenciamento permanece a mesma. |
Consulta | O Oracle tem suporte completo a SQL. As extensões SQL incluem suporte para JSON e pesquisa de texto. A Oracle também tem um banco de dados XML, com suporte a XML, XQuery, SQL/XML, etc. |
O Couchbase pode armazenar binários e JSON. As APIs de desenvolvedor podem obter e definir documentos e subdocumentos diretamente. O N1QL (SQL para JSON) oferece uma linguagem declarativa. Ele vem com índices e um mecanismo de consulta completo para executar consultas de forma eficiente. Detalhes em: query.couchbase.com. O Couchbase FTS (Full Text Search) ajuda você a criar um índice e uma pesquisa de texto. http://bit.ly/2vbcbOF |
Alta disponibilidade | A MAA (Arquitetura de Disponibilidade Máxima) da Oracle recomenda: "Na tela de configuração do cluster, na seção Detalhes do grupo de discos, o MAA recomenda escolher a redundância ALTA do Oracle Automatic Storage Management (ASM) para TODOS os grupos de discos (DATA e RECO) para obter a melhor proteção e a maior simplicidade operacional".
A Oracle tem recursos para criar servidores hot standby, replicação baseada em esquema, captura de alterações e muito mais. |
Em um único cluster, é possível ter várias cópias de dados e índices, bastando especificar o número de cópias que deseja ter. Você pode ter até 3 cópias dos dados e qualquer número de cópias do índice.
Em vários clusters, você pode replicar os dados com o XDCR (replicação entre centros de dados) integrado. |
Transações | ÁCIDO
Declaração múltipla |
Atomicidade de um único documento Consistência do serviço de dados, índice - consistência eventual bloqueio otimista (CAS) confirmação adicional de durabilidade |
Motoristas | JDBC, ODBC, .NET, LINQ e muito mais | Couchbase SDK (Java, .NET, LINQ, PHP, Python, Go), Simba JDBC/ODBC |
Modelo de dados | Oferece suporte a modelos de dados normalizados e desnormalizados. | Modelo JSON desnormalizado (agregado). Os relacionamentos entre vários tipos de documentos (por exemplo, pedidos para clientes) podem ser representados e processados. Tanto o filho (pedidos) quanto o pai (cliente) podem armazenar a chave primária dos documentos relacionados e, em seguida, juntá-los. Essa relação é implícita, não codificada por uma restrição (por exemplo, restrição de chave estrangeira) no Couchbase. Esse é o motivo pelo qual o Couchbase é mais flexível. |