A transição de um modelo de rdbms para hbase
Se você está de frente para a fase de design para seu aplicativo e você acredita que HBase seria um bom ajuste, em seguida, projetar suas chaves de linha e de esquema para se ajustar ao modelo de dados HBase e arquitetura é a abordagem correta. No entanto, às vezes, faz sentido para mover um banco de dados projetado originalmente para um RDBMS para HBase.
Conteúdo
Um cenário comum em que esta abordagem faz sentido é uma instância de banco de dados MySQL que atingiu os seus limites de escalabilidade. Existem técnicas para dimensionar horizontalmente uma instância MySQL (sharding, em outras palavras), mas este processo é normalmente complicado e problemático porque MySQL simplesmente não foi projetado originalmente para sharding.
A transição do modelo relacional para o modelo HBase é uma disciplina relativamente nova. No entanto, certos padrões estabelecidos de pensamento estão surgindo e reuniram-se em três princípios fundamentais a seguir quando se aproxima uma transição. Estes princípios são desnormalização, duplicação, e chaves inteligentes (DDI).
Video: Phoenix - A High Performance Open Source SQL Layer over HBase
desnormalização: O modelo de banco de dados relacional depende a) um esquema de banco de dados normalizado e b) junta-se entre as mesas para responder a operações SQL. normalização de dados é uma técnica que protege contra a perda de dados, redundância e outras anomalias como os dados são atualizados e recuperados.
Há uma série de regras os especialistas seguem para chegar a um esquema de banco de dados normalizado (e normalização de dados é um estudo completo em si), mas o processo geralmente envolve dividindo tabelas maiores em tabelas menores e definir relações entre eles. desnormalização banco de dados é o oposto de normalização, onde menor, mesas mais específicos são juntou-se à maior mesas, mais gerais.
Este é um padrão comum quando a transição para HBase porque junta não são fornecidos através de tabelas, e junta-se pode ser lento uma vez que envolvem operações de disco caros. Protegendo contra a atualização e anomalias de recuperação é agora o trabalho de seu aplicativo cliente HBase, já que as proteções oferecidas você pela normalização são nulas.
Duplicação: Como você desnormalizar seu esquema de banco de dados, você provavelmente vai acabar duplicando os dados, porque pode ajudar a evitar operações de leitura caros em várias tabelas. Não se preocupar com o armazenamento extra (dentro da razão, é claro) - você pode usar a escalabilidade automática de HBase para a sua vantagem.
Esteja ciente, porém, que o trabalho extra será exigido pelo seu aplicativo cliente para duplicar os dados e lembrar que nativamente HBase só fornece operações atômicas nível de linha não cruzada de linha (com a exceção descrita no HBase-5229 JIRA) ou mesa cruz.
Chaves inteligentes: Como os dados armazenados em HBase é ordenada por chave de linha, ea chave de linha é o único índice nativo fornecido pelo sistema, o design inteligente cuidadosa da chave de linha pode fazer uma enorme diferença. Por exemplo, a sua chave de linha poderia ser uma combinação de um número de ordem de serviço e número de identificação do cliente que colocou a ordem de serviço.
Video: Apache Hadoop HBase Training Tutorials
Este projeto chave de linha permitem que você olhar para cima os dados relacionados com a ordem de serviço ou procurar dados relacionados com o cliente usando a mesma chave de linha na mesma tabela. Esta técnica será mais rápido para algumas consultas e evitar mesa caro junta.
Para esclarecer estes determinados padrões de pensamento, dê uma ao Cliente Fale tabela Informações e colocá-lo dentro do contexto de um banco de dados típico ordem de serviço. A figura mostra o que um esquema de banco de ordem de serviço normalizado pode parecer.
Seguindo as regras de RDBMS normalização, configurar a tabela Contatos a amostra do cliente para que ele seja separado da tabela de ordem de serviço, a fim de evitar a perda de dados de clientes quando ordens de serviço estão fechados e, possivelmente, eliminados. Tome a mesma abordagem para a tabela de produtos, o que significa que novos produtos podem ser adicionados ao banco de dados fictício empresa independente de ordens de serviço.
Ao confiar em RDBMS juntar operações, esse esquema suporta pesquisas que revelam o número de ordens de serviço que são abertas contra um determinado produto, juntamente com a localização do cliente onde o produto está em uso.
Isso é tudo muito bem e dândi, mas é um esquema que você usaria com RDBM. Como você transição este esquema para um esquema HBase? A figura a seguir ilustra um possível esquema de HBase - um que segue o padrão de design DDI.
A tabela Informações ao Cliente Fale foi denormalized, incluindo o nome do cliente e informações de contato no lugar das chaves estrangeiras utilizadas anteriormente. Além disso, os dados são duplicados, mantendo tabela Informações do Cliente Fale como é. Agora se junta à mesa mesa e Customer Contact Informação da ordem de serviço não são necessárias.
Além disso, um projeto chave de linha inteligente tem sido empregada que combina o número do produto com o número do cliente para formar o número da ordem de serviço (A100 | 00001, por exemplo). Usando esta chave inteligente, a tabela de ordem de serviço pode fornecer relatórios vitais sobre deficiências de produtos e clientes que estão atualmente enfrentando problemas de produtos.
Todas estas consultas podem ser apoiados por HBase em uma forma atômica nível de linha para a aplicação. Porque você sabe que HBase chaves ordens de linha e classifica-as de uma forma lexicográfica, seu aplicativo pode fazer certas suposições sobre localidade de dados quando da emissão de scans para relatórios. (Todos os números de produto A * série serão armazenadas em conjunto, por exemplo).
O banco de dados ordem de serviço representado pelo esquema HBase é um exemplo relativamente simples, mas ilustra como HBase pode, em certos casos, se cruzam com o mundo RDBMS e fornecem um valor significativo. Se a empresa fictícia tem terabytes ou até mesmo petabytes de dados chamada de serviço para armazenar, HBase faria uma enorme diferença em termos de custo, confiabilidade, desempenho e escala.
Você pode, é claro, projetar sua ordem de serviço esquema HBase de várias maneiras diferentes. É certo que o projeto tudo depende das consultas que devem ser suportados, mas você tem a capacidade de transição alguns bancos de dados relacionais aplicações HBase para muito poderosa para uso em produção, enquanto você trabalhar a partir de uma sólida compreensão da arquitetura HBase eo padrão de design DDI.
Este exemplo assume que as consultas foram realizadas por um aplicativo Java aproveitando as APIs cliente HBase, ou talvez através de outro idioma usando Apache Thrift. Este modelo de aplicação pode se adequar às exigências muito bem e proporcionar opções de desempenho e personalização úteis para a empresa de serviços de ficção.