Cenários de casos de uso do NoSQL ou WHEN para usar o NoSQL [fechado]

252

Com todo o hype, parece realmente difícil encontrar informações confiáveis ​​sobre quando usar isso. Por isso, faço as seguintes perguntas e lamento se essas perguntas são realmente idiotas com antecedência:

  1. Devo usar o NoSQL para dados do usuário? Por exemplo, perfis, nomes de usuário + senhas, etc.
  2. Devo usar o NoSQL para conteúdo importante? Por exemplo, artigos, postagens de blog, inventário de produtos, etc.

Estou assumindo que não? E sinto que o NoSQL é apenas para coisas rapidamente acessíveis, das quais não há problema em perder dados. Mas também li que os aplicativos NoSQL têm redundância integrada para não perder dados?

Além disso, se os 2 exemplos acima forem ruins, você poderia me dar casos de uso de negócios específicos nos quais eu usaria o NoSQL? Vejo muitas descrições gerais, mas não muitos exemplos do mundo real. As únicas coisas em que consigo pensar são em mensagens e análises de usuário para usuário.

Obrigado!

user1389722
fonte

Respostas:

183

É realmente uma questão "depende". Alguns pontos gerais :

  • NoSQL normalmente é bom para dados não estruturados / "sem esquema" - geralmente, você não precisa definir explicitamente seu esquema com antecedência e pode incluir apenas novos campos sem nenhuma cerimônia
  • O NoSQL geralmente favorece um esquema desnormalizado devido ao nenhum suporte para JOINs no mundo RDBMS. Portanto, você normalmente teria uma representação achatada e desnormalizada de seus dados.
  • Usar o NoSQL não significa que você pode perder dados. DBs diferentes têm estratégias diferentes. por exemplo, MongoDB - você pode escolher essencialmente qual o nível para compensar desempenho versus potencial de perda de dados - melhor desempenho = maior escopo para perda de dados.
  • Geralmente, é muito fácil dimensionar as soluções NoSQL. Adicionar mais nós para replicar dados é uma maneira de: a) oferecer mais escalabilidade eb) oferecer mais proteção contra perda de dados se um nó ficar inoperante. Mas, novamente, depende da configuração / DB do NoSQL. NoSQL não significa necessariamente "perda de dados", como você deduz.
  • IMHO, consultas / relatórios complexos / dinâmicos são melhor atendidos a partir de um RDBMS. Geralmente, a funcionalidade de consulta para um banco de dados NoSQL é limitada.
  • Não precisa ser uma opção 1 ou outra. Minha experiência tem usado o RDBMS em conjunto com o NoSQL para certos casos de uso.
  • Os bancos de dados NoSQL geralmente não têm a capacidade de executar operações atômicas em várias "tabelas".

Você realmente precisa examinar e entender quais são os vários tipos de repositórios NoSQL e como eles fornecem escalabilidade / segurança de dados, etc. É difícil dar uma resposta geral, pois eles realmente são todos diferentes e lidam com as coisas de maneira diferente .

Para o MongoDb como exemplo, consulte os Casos de Uso para ver o que eles sugerem como usos "adequados" e "menos adequados" do MongoDb.

AdaTheDev
fonte
16
A alegação de que o NoSQL não suporta junções é enganosa. Alguns bancos de dados NoSQL são realmente muito melhores em associações do que bancos de dados relacionais. Alguns não os apóiam. Esta resposta parece ser mais sobre o MongoDB em particular do que sobre o NoSQL em geral.
Alan Plum
1
Ótimo resumo. @ AlanPlum, a quais bancos de dados NoSQL específicos você está se referindo?
brian
2
@brian Eu sou colaborador do ArangoDB ( arangodb.com ), que é uma mistura de um banco de dados de documentos (pense no MongoDB) e um banco de dados de gráficos (pense no Neo4J) com não apenas junções baratas, mas também transações reais. Dito isto, os bancos de dados NoSQL não são um grupo homogêneo e é impossível generalizar de qualquer banco de dados NoSQL para toda a "categoria".
Alan Plum
Se você estiver pensando em usar RDBs porque "junções não são suportadas" no NoSQL, sugiro assistir a este vídeo da AWS re: Invent. Divide toda a abordagem NoSQL! Me ajudou muito. youtu.be/HaEPXoXVf2k
dillon.harless
9

Eu acho que o Nosql é "mais adequado" nesses cenários pelo menos (mais suplementares são bem-vindos)

  1. Fácil de dimensionar horizontalmente, basta adicionar mais nós.

  2. Consulta no grande conjunto de dados

    Imagine toneladas de tweets postados no twitter todos os dias. No RDMS, pode haver tabelas com milhões (ou bilhões?) De linhas, e você não deseja fazer consultas diretamente nessas tabelas, nem mesmo mencionando, na maioria das vezes, as junções de tabelas também são necessárias para consultas complexas.

  3. Gargalo de E / S de disco

    Se um site precisar enviar resultados para diferentes usuários com base nas informações em tempo real dos usuários, provavelmente estaremos falando de dezenas ou centenas de milhares de solicitações de leitura / gravação de SQL por segundo. Então a E / S do disco será um gargalo sério.

otm
fonte
20
Não entendo o que poderia ser um problema com o RDBMS para o # 2. E o NoSQL tem menos E / S de disco conforme o # 3?
avi
5
Como o @avi diz, acho que não há problema para o número 2, desde que você consulte as tabelas sobre o índice. Milhões de linhas? Ok, recuperar apenas os índices Eu quero usar
Xtreme Biker
11
Os números 2 e 3 são falsos. Em 2, fiz testes de desempenho na importação / exportação de dados e vi o SQL Server 2014 esmagar o Mongo em grandes importações e exportações de dados. Para três, dados tipicamente fortemente digitados no SQL ocupam (vi mais de 50% antes da compactação) ocupar muito menos espaço do que os bancos de dados de documentos.
brian
7
Sim, e mesmo para o número 1, eu simplesmente não entendo. Intensificação faz parte do contrato agrupamento todas as principais RDBMS propor
Seb
2
Todos os três destes estão errados, se você tem dinheiro ilimitado
Chazt3n