Quando devo usar um banco de dados NoSQL em vez de um banco de dados relacional? Posso usar os dois no mesmo site?


141

Quais são as vantagens do uso de bancos de dados NoSQL? Eu tenho lido muito sobre eles ultimamente, mas ainda não tenho certeza por que gostaria de implementar um e sob quais circunstâncias gostaria de usá-lo.

Respostas:


84

Os bancos de dados relacionais reforçam o ACID . Portanto, você terá armazenamentos de dados orientados a transações baseados em esquema. É comprovado e adequado para 99% das aplicações do mundo real. Você pode praticamente fazer qualquer coisa com bancos de dados relacionais.

Porém, existem limitações de velocidade e dimensionamento quando se trata de grandes repositórios de dados de alta disponibilidade. Por exemplo, o Google e a Amazon têm terabytes de dados armazenados em grandes centros de dados. A consulta e a inserção não têm desempenho nesses cenários devido à natureza de bloqueio / esquema / transação dos RDBMs. Essa é a razão pela qual eles implementaram seus próprios bancos de dados (na verdade, armazenamentos de valores-chave) para obter um ganho maciço de desempenho e escalabilidade.

Os bancos de dados NoSQL existem há muito tempo - apenas o termo é novo. Alguns exemplos são bancos de dados de gráficos, objetos, colunas, XML e documentos.

Para a sua segunda pergunta: está tudo bem em usar os dois no mesmo site?

Por que não? Ambos servem propósitos diferentes, certo?


1
Não acho que o ACID seja exclusivo dos bancos de dados relacionais. Você pode ter garantias de durabilidade, transações, visualizar consistência em bancos de dados não relacionais.
Thilo

@RamshVel você poderia dar um exemplo de um banco de dados de tipo de armazenamento de valor-chave? Obrigado.
Rachael

1
@Rachael, alguns exemplos são Redis, LevelDB e riak .. há toneladas ao redor, você pode pesquisar no Google
RameshVel

76

As soluções NoSQL costumam resolver um problema para o qual os bancos de dados relacionais não são adequados, muito caros de usar (como Oracle) ou exigem que você implemente algo que quebre a natureza relacional do seu banco de dados.

As vantagens geralmente são específicas para o seu uso, mas, a menos que você tenha algum problema ao modelar seus dados em um RDBMS, não vejo razão para escolher o NoSQL.

Eu mesmo uso o MongoDB e o Riak para problemas específicos em que um RDBMS não é uma solução viável; para todas as outras coisas, uso o MySQL (ou SQLite para teste).

Se você precisa de um banco de dados NoSQL que geralmente conhece, os possíveis motivos são:

  • O cliente deseja disponibilidade de 99,999% em um site de alto tráfego.
  • Como seus dados não fazem sentido no SQL, você se encontra fazendo várias consultas JOIN para acessar algumas informações.
  • você está quebrando o modelo relacional, possui CLOBs que armazenam dados desnormalizados e gera índices externos para pesquisar esses dados.

Se você não precisa de uma solução NoSQL, lembre-se de que essas soluções não foram substituídas por um RDBMS, mas como alternativas onde a primeira falha e, mais importante ainda, que elas são relativamente novas e, portanto, ainda possuem muitos bugs e erros. recursos ausentes.

Ah, e com relação à segunda pergunta, é perfeitamente bom usar qualquer tecnologia em conjunto com outra, para ser completo com a minha experiência, o MongoDB e o MySQL funcionam bem juntos, desde que não estejam na mesma máquina


3
Obrigado pela resposta. Seus exemplos de quando usar o NoSQL são vagos, na melhor das hipóteses. Eu esperava um caso de uso mais específico para poder decidir se algum dos meus dados seria melhor armazenado em um banco de dados NoSQL.
smfoote

Eu tento não responder a mesma pergunta duas vezes, observe a minha resposta anterior para uma pergunta muito semelhante stackoverflow.com/questions/3621415/…
Asaf

Concordo com a grande resposta de Asaf, existem realmente apenas alguns cenários em que você deveria precisar de um NoSQL sobre um RDBMS. Eu vejo o NoSQL mais como um banco de dados de backup ou "add-on db" do que um banco de dados principal. Ainda não vi um bom sistema, no qual o core db era um NoSQL.
Jo Smo

38

Martin Fowler possui um excelente vídeo que fornece uma boa explicação dos bancos de dados NoSQL. O link vai direto para os motivos para usá-los, mas o vídeo inteiro contém boas informações.

  1. Você possui grandes quantidades de dados - especialmente se não puder caber tudo em um servidor físico, pois o NoSQL foi projetado para dimensionar bem.

  2. Incompatibilidade de impedância objeto-relacional - Seus objetos de domínio não se encaixam bem em um esquema de banco de dados relacional. O NoSQL permite que você persista seus dados como documentos (ou gráficos) que podem ser mapeados muito mais de perto para o seu modelo de dados.


16

O NoSQL é um sistema de banco de dados onde os dados são organizados no documento (MongoDB), par de valores-chave (MemCache, Redis), forma da estrutura gráfica (Neo4J).

Talvez aqui estejam possíveis perguntas e respostas para "Quando usar o NoSQL":

  1. Requer esquema flexível ou lida com dados do tipo árvore?
    Geralmente, no desenvolvimento ágil, começamos a projetar o sistema sem conhecer todos os requisitos antecipadamente, onde, mais tarde, em todo o sistema de banco de dados de desenvolvimento, pode ser necessário acomodar mudanças frequentes no projeto, apresentando o MVP (produto viável mínimo). Ou você está lidando com um esquema de dados de natureza dinâmica. Por exemplo, logs do sistema, exemplo muito preciso são os logs do AWS cloudwatch.

  2. Conjunto de dados é vasto / grande?
    Sim Não O banco de dados SQL é o melhor candidato para aplicativos em que o banco de dados precisa gerenciar milhões ou até bilhões de registros sem comprometer o desempenho.

  3. Diferença entre escalar sobre consistência
    Ao contrário do RDMS, o banco de dados NoSQL pode perder pequenos dados aqui e ali (Nota: a probabilidade é de .x%), mas é fácil de escalar em termos de desempenho. Exemplo: isso pode ser bom para armazenar pessoas on-line no aplicativo de mensagens instantâneas, tokens no banco de dados, registrar estatísticas de tráfego do site.

  4. Execução de operações de geolocalização: O MongoDB oferece suporte rico em hash para operações de GeoQuerying e Geolocalização. Eu realmente amei esse recurso do MongoDB.

Em poucas palavras, o MongoDB é ideal para aplicativos em que você pode armazenar dados estruturados dinâmicos em larga escala.


4
"O banco de dados NoSQL pode perder pequenos dados aqui e ali" WTF !? Agora, quem em sã consciência gostaria de arriscar isso? Isso deve ser falso.
Jay Q.

1
@JayQ. Sim, pode ser falso. Por isso eu disse * talvez. Então, por que não podemos usar os bancos de dados NpSQL para operações transacionais?
precisa

7

Faltam algumas informações essenciais para responder à pergunta: Quais casos de uso o banco de dados deve poder cobrir? As análises complexas precisam ser executadas a partir dos dados existentes ( OLAP ) ou o aplicativo precisa ser capaz de processar muitas transações ( OLTP )? Qual é a estrutura de dados? Isso está longe do final do período de perguntas.

Na minha opinião, é errado tomar decisões de tecnologia com base em chavões ousados ​​sem saber exatamente o que está por trás deles. O NoSQL é frequentemente elogiado por sua escalabilidade. Mas você também deve saber que o dimensionamento horizontal (em vários nós) também tem seu preço e não é gratuito. Em seguida, você deve lidar com problemas como consistência eventual e definir como resolver conflitos de dados se eles não puderem ser resolvidos no nível do banco de dados. No entanto, isso se aplica a todos os sistemas de banco de dados distribuídos.

A alegria dos desenvolvedores com a palavra "schema less" no NoSQL também é muito grande no começo. Essa palavra da moda é rapidamente desencantada após a análise técnica, porque corretamente não requer um esquema ao escrever, mas entra em ação ao ler. É por isso que deve ser corretamente "esquema na leitura". Pode ser tentador poder gravar dados a seu critério. Mas como faço para lidar com a situação se houver dados existentes, mas a nova versão do aplicativo espera um esquema diferente?

O modelo de documento (como no MongoDB, por exemplo) não é adequado para modelos de dados em que existem muitos relacionamentos entre os dados. As junções precisam ser feitas no nível do aplicativo, o que é um esforço adicional e por que devo programar as coisas que o banco de dados deve fazer.

Se você argumentar que o Google e a Amazon desenvolveram seus próprios bancos de dados porque o RDBMS convencional não pode mais lidar com o fluxo de dados, você pode apenas dizer: Você não é o Google e a Amazon. Essas empresas são a ponta de lança, cerca de 0,01% dos cenários em que os bancos de dados tradicionais não são mais adequados, mas para o resto do mundo.

O que não é insignificante: o SQL existe há mais de 40 anos e milhões de horas de desenvolvimento foram implementadas em grandes sistemas, como Oracle ou Microsoft SQL. Isso deve ser alcançado por alguns novos bancos de dados. Às vezes, também é mais fácil encontrar um administrador SQL do que alguém para o MongoDB. O que nos leva à questão da manutenção e gerenciamento. Um assunto que não é exatamente sexy, mas faz parte da decisão de tecnologia.


1
parece correto, mas acho que também não é correto comparar quanto tempo gastou, se esse fosse o caso, todos estariam usando a linguagem assembly em todos os seus aplicativos. Prefiro dizer que isso sempre se resume a seu aplicativo e caso de uso
Gopherine

3

Eu me deparei com essa pergunta enquanto procurava motivos convincentes para desviar do design do RDBMS.

Há um ótimo post de Julian Brown que esclarece as restrições de sistemas distribuídos. O conceito é chamado Teorema de Brewer's CAP, que em resumo diz:

Os três requisitos dos sistemas distribuídos são: Consistência, disponibilidade e tolerância a partições (CAP em resumo). Mas você pode ter apenas dois deles por vez.

E é assim que eu resumi isso para mim:

É melhor você optar pelo NoSQL se a consistência é o que você está sacrificando.


0

Projetei e implementei soluções com bancos de dados NoSQL e aqui está minha lista de pontos de verificação para tomar a decisão de usar SQL ou NoSQL orientado a documentos .

Não é

O SQL não é obsoleto e continua sendo uma ferramenta melhor em alguns casos. É difícil justificar o uso de um NoSQL orientado a documentos quando

  • Precisa de OLAP / OLTP
  • É um projeto pequeno / estrutura de banco de dados simples
  • Precisa de consultas ad hoc
  • Não é possível evitar consistência imediata
  • Requisitos pouco claros
  • Falta de desenvolvedores experientes

DOs

Se você não possui essas condições ou pode atenuá-las, aqui estão duas razões pelas quais você pode se beneficiar do NoSQL:

  • Precisa executar em escala
  • Conveniência de desenvolvimento (melhor integração com sua pilha de tecnologia, sem necessidade de ORM, etc.)

Mais informações

Nas postagens do meu blog, explico os motivos em mais detalhes:

Nota: o acima é aplicável apenas ao NoSQL orientado a documentos. Existem outros tipos de NoSQL, que requerem outras considerações.


0

Manipulando um grande número de operações de leitura e gravação

Olhe para os bancos de dados NoSQL quando precisar escalar rapidamente. E quando você geralmente precisa escalar rapidamente?

Quando há um grande número de operações de leitura e gravação em seu site e ao lidar com uma grande quantidade de dados, os bancos de dados NoSQL se encaixam melhor nesses cenários. Como eles têm a capacidade de adicionar nós em tempo real, eles podem lidar com mais tráfego simultâneo e grande quantidade de dados com latência mínima.

Flexibilidade com modelagem de dados

A segunda dica é durante as fases iniciais do desenvolvimento, quando você não tem certeza sobre o modelo de dados, o design do banco de dados, espera-se que as coisas mudem rapidamente. Os bancos de dados NoSQL nos oferecem mais flexibilidade.

Consistência Eventual Sobre Consistência Forte

É preferível escolher bancos de dados NoSQL quando não há problema em desistir da consistência Forte e quando não exigimos transações.

Um bom exemplo disso é um site de rede social como o Twitter. Quando um tweet de uma celebridade aparece e todo mundo está gostando e re-twittando de todo o mundo. Importa se a contagem de curtidas aumenta ou diminui um pouco por um tempo?

A celebridade definitivamente não se importaria se, em vez dos 5 milhões de 500 reais, o sistema mostrasse a contagem de 5 milhões de 250 por um curto período de tempo.

Quando um aplicativo grande é implantado em centenas de servidores espalhados pelo mundo, os nós distribuídos geograficamente levam algum tempo para chegar a um consenso global.

Até que eles cheguem a um consenso, o valor da entidade é inconsistente. O valor da entidade eventualmente se torna consistente após um curto período de tempo. É isso que é a consistência eventual.

Embora a inconsistência não signifique que haja algum tipo de perda de dados. Significa apenas que os dados demoram um pouco para viajar pelo mundo através dos cabos da Internet sob o oceano para chegar a um consenso global e tornar-se consistente.

Nós experimentamos esse comportamento o tempo todo. Especialmente no YouTube. Muitas vezes, você assistia a um vídeo com 10 visualizações e 15 curtidas. Como isso é possível?

Não é. As visualizações reais já são mais do que gostos. É apenas a contagem de visualizações inconsistente e demora um pouco para ser atualizada.

Executando análise de dados

Os bancos de dados NoSQL também se encaixam melhor nos casos de uso de análise de dados, onde temos que lidar com um influxo de grandes quantidades de dados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.