Visão geral do sharding de banco de dados
- Como funciona o sharding de banco de dados
- Vantagens do sharding
- Desvantagens do sharding
- Tipos de sharding
- Alternativas ao sharding de banco de dados
- Como o Couchbase Capella™ ajuda na fragmentação do banco de dados
- Conclusão
O sharding de banco de dados é uma ferramenta poderosa para otimizar o desempenho e a escalabilidade de um banco de dados. Ela permite acesso mais rápido aos dados e possibilita que um banco de dados lide com cargas de trabalho maiores, distribuindo dados e capacidade de processamento em vários servidores. Como os bancos de dados NoSQL são projetados tendo em mente a computação distribuída e a fragmentação automática, eles costumam ser os bancos de dados mais associados à fragmentação. No entanto, com bastante esforço, a fragmentação pode ser obtida com qualquer tecnologia de banco de dados.
Como funciona o sharding de banco de dados?
O sharding de banco de dados divide todo o conjunto de dados em vários grupos conhecidos como shards. Uma vez divididos, cada fragmento pode ser armazenado de forma independente, geralmente em vários servidores, que geralmente são chamados de cluster. Cada fragmento pode ser acessado independentemente, o que significa que você pode acessar os dados mais rapidamente e ter mais recursos disponíveis para processamento, computação e armazenamento.
Onde ocorre o sharding?
Se um banco de dados tiver recursos de fragmentação incorporados, a equipe de desenvolvimento precisará de menos trabalho para realizar a fragmentação. Se a fragmentação for um recurso opcional ou exigir configuração, será necessário planejar cuidadosamente, mas a fragmentação não deverá exigir alterações ou adições significativas na base de código. Se o banco de dados subjacente não puder fazer a fragmentação (como é o caso de muitos bancos de dados relacionais), talvez seja necessário fazer grandes alterações na base de código, e os desenvolvedores terão de criar a fragmentação na camada de persistência de um aplicativo.
Preciso fragmentar meus dados?
O uso ou não do sharding depende de muitos fatores. Esses fatores incluem o tamanho do conjunto de dados, o número de usuários do sistema, o número de operações realizadas e as restrições da infraestrutura.
Se o seu aplicativo apresentar uma redução perceptível no desempenho devido a mais usuários ou mais operações, o dimensionamento horizontal (que geralmente usa sharding) é uma forma de aumentar os recursos de computação disponíveis para o seu banco de dados. No entanto, o baixo desempenho também pode indicar código abaixo do ideal, falta de índices adequados, necessidade de alterações na modelagem de dados ou outros problemas. A fragmentação nem sempre deve ser a primeira opção para melhorar o desempenho, mas, para algumas tecnologias de banco de dados, pode ser um meio de baixo atrito para atingir suas metas de desempenho.
Vantagens do sharding
- Desempenho mais rápido: Há mais servidores disponíveis para lidar com a entrada/saída
- Dimensionamento horizontal: Você pode adicionar rapidamente servidores adicionais a um cluster
- Custos: O escalonamento horizontal geralmente pode ser mais barato do que o escalonamento vertical (ou seja, atualizar um servidor para outro mais potente)
- Distribuição/tempo de atividade: Um banco de dados distribuído em escala horizontal pode ter um tempo de atividade melhor do que um servidor único tradicional
Desvantagens do sharding
- Complexidade: Dependendo do sistema de banco de dados, a complexidade do sharding pode variar. Alguns bancos de dados são projetados com distribuição, escala horizontal e sharding incluídos. Outros exigem uma abordagem mais prática, do tipo "faça você mesmo".
- Rebalanceamento: Ao adicionar mais máquinas a um cluster, os fragmentos provavelmente precisarão ser rebalanceados para distribuir os dados uniformemente (por exemplo, se você tiver 1.000 documentos distribuídos uniformemente em três fragmentos, isso significa aproximadamente 333 documentos por fragmento). Se você adicionar um quarto fragmento, a distribuição uniforme será de 250 documentos por fragmento). Se um banco de dados não tiver recursos de fragmentação incorporados, o rebalanceamento será certamente um processo manual complexo de bricolagem.
Tipos de sharding
Há várias abordagens para a fragmentação. Alguns sistemas de banco de dados têm a funcionalidade de fragmentação integrada, enquanto outros não oferecem suporte direto à fragmentação (e exigem muita codificação personalizada ou processos DIY). O objetivo de cada abordagem é dividir os dados em fragmentos de forma consistente para que os dados possam ser consultados ou gravados no mesmo fragmento todas as vezes.
Sharding baseado em intervalo
A fragmentação baseada em intervalo envolve a seleção de valores de dados e a atribuição deles a um fragmento com base no fato de estarem ou não dentro de um intervalo específico. Por exemplo, se você tiver dados de usuário que contenham idade, um fragmento poderá armazenar usuários com idade entre 0 e 10 anos, outro fragmento armazenará usuários com idade entre 11 e 20 anos e assim por diante.
Essa abordagem pode ser problemática porque um shard pode acabar armazenando muito mais usuários do que o outro. E os fragmentos que armazenam uma quantidade desproporcionalmente alta de dados podem se tornar pontos de acesso que afetam o desempenho.
Sharding baseado em chaves
O sharding baseado em chave adota uma abordagem mais independente. Um valor nos dados (geralmente o ID do documento em um banco de dados de documentos NoSQL) é executado por meio de um hash, e esse hash determina em qual shard os dados devem ser armazenados.
Essa abordagem pode ser problemática se não for diretamente compatível com o banco de dados, pois qualquer aplicativo que acesse o banco de dados deve ser capaz de construir o hash. Além disso, essa abordagem exige que o valor de dados usado para o hash seja imutável. Normalmente, isso não é um problema, mas pode ser em casos raros.
O Couchbase usa fragmentação automática baseada em chaves para distribuir os dados uniformemente em um cluster, além de oferecer rebalanceamento automático e replicação automática. Essas automações podem simplificar processos críticos e liberar um tempo valioso para a sua equipe de desenvolvimento.
Sharding baseado em diretório
A fragmentação baseada em diretório é uma abordagem em que algum valor dos dados é mapeado para um determinado fragmento com base em seu valor em uma tabela de pesquisa ou configuração de pesquisa. É semelhante à abordagem de intervalo, mas pode envolver uma pesquisa simples. Por exemplo, um usuário com um endereço em Ohio seria armazenado no fragmento "Ohio", um usuário na Califórnia iria para o fragmento "Califórnia" e assim por diante.
Essa abordagem pode ser problemática porque uma tabela de pesquisa ou configuração pode ficar indisponível, cair ou ser corrompida. Nesses casos, o aplicativo não pode mais realizar leituras ou gravações.
Geo sharding
Um fragmento geográfico pode ser combinado com as outras opções de fragmentação ou usado no lugar delas. A ideia por trás da fragmentação geográfica é armazenar os dados fisicamente mais perto de onde eles serão acessados com mais frequência. Por exemplo, um usuário com endereço em Ohio seria armazenado em um servidor em Ohio, e um usuário com endereço na Califórnia seria armazenado em um servidor na Califórnia.
Essa abordagem pode proporcionar acesso mais rápido, mas também pode levar a hotspots e servidores subutilizados. O Geo sharding também pode não atender aos requisitos legais de aplicativos ou jurisdições específicas.
Além de fornecer sharding automático, o Couchbase pode oferecer suporte a sharding geográfico por meio de Replicação entre data centers (XDCR).
Sharding baseado em entidades
O sharding baseado em entidades significa que dados separados, mas intimamente relacionados, são armazenados juntos no mesmo shard. Por exemplo, um usuário pode ser considerado uma entidade dentro da lógica de um aplicativo, mas o histórico de compras de um usuário pode ser armazenado separadamente em um shard diferente. Ao armazenar os dados relacionados no mesmo fragmento, você pode reduzir o volume de trabalho de computação necessário para recuperá-los juntos ao mesmo tempo.
A desvantagem dessa abordagem é a complexidade. A configuração de quais dados vão para onde pode ser um processo complexo, especialmente se alguns dados forem usados por várias entidades.
Alternativas ao sharding de banco de dados
O dimensionamento horizontal sempre envolverá sharding em algum nível, mas há muitas opções para como para fragmentar. Uma maneira é o sharding arquitetônico, como uma arquitetura de microsserviços ou um sharding de disco físico que é opaco para o usuário. A fragmentação pode até ser oculta e abstraída por trás de um banco de dados em nuvem.
Ao considerar um sistema de banco de dados, é fundamental entender como o sharding será realizado. Ele pode ser totalmente abstraído e oculto, pode ser automático, pode ser suportado com opções de configuração potencialmente complexas ou pode não ter suporte e exigir uma abordagem "faça você mesmo".
Como o Couchbase Capella ajuda na fragmentação do banco de dados
Couchbase Capella é a plataforma de banco de dados em nuvem para empresas digitais.
O Capella usa o mesmo sistema de fragmentação do Couchbase Server, que é a fragmentação automática baseada em chave. Do ponto de vista do usuário ou do desenvolvedor, a fragmentação com o Couchbase não exige nenhuma configuração ou manutenção adicional. Ao usar um algoritmo CRC32 em conjunto com vBuckets, o Capella garante que seu sistema não terá nenhum ponto de acesso.
O Capella automatiza a replicação. Você apenas seleciona o número de réplicas que deseja e o Capella cuida do resto.
O Capella também automatiza o rebalanceamento. Quando você adiciona servidores ou os remove de um cluster, o Capella os reequilibra automaticamente sem causar nenhum tempo de inatividade.
Por fim, o Capella pode obter o geo sharding por meio do recurso XDCR. O XDCR replica os dados entre os data centers em tempo real. As replicações do XDCR podem incluir ou excluir dados com base em filtros definidos pelo usuário para melhorar a latência local ou atender aos requisitos de localização de dados.
Conclusão
A fragmentação é um conceito importante a ser entendido se você estiver dimensionando um banco de dados para lidar com mais operações. E os bancos de dados NoSQL são especialmente bons em fragmentação porque eliminam muitas das restrições impostas pelos bancos de dados relacionais. Dito isso, o Couchbase Capella oferece alguns dos melhores recursos de um banco de dados relacional (sintaxe SQL e uma implementação SQL completa que inclui JOINs e Transações ACID) em um banco de dados distribuído com fragmentação automática.
Para saber mais sobre sharding no Couchbase, confira:
Outros recursos importantes para considerar como dimensionar um banco de dados: