O que é NoSQL, como ele funciona, e quais os benefícios que ele oferece? [fechadas]

StackOverflow https://stackoverflow.com/questions/1145726

  •  16-09-2019
  •  | 
  •  

Pergunta

Eu tenho ouvido coisas sobre NoSQL e que pode eventualmente tornar-se o substituto para métodos de armazenamento SQL DB devido ao fato de que a DB interação é muitas vezes um gargalo de garrafa para a velocidade na web.

Então, eu só tenho algumas perguntas:

  1. O que exatamente é isso?

  2. Como é que funciona?

  3. Por que seria melhor do que usar um banco de dados SQL? E quanto melhor é?

  4. É a tecnologia muito novo para começar a implementar ou ainda vale a pena dar uma olhada em?

Foi útil?

Solução

  1. O que exatamente é isso?

    específica

    Por um lado, um sistema , mas também tornou-se um termo genérico para uma variedade de novos backends de armazenamento de dados que não seguem o modelo de banco de dados relacional.

  2. Como funciona?

    Cada um dos sistemas marcados com o nome genérico funciona de forma diferente, mas a idéia básica é a de oferecer uma melhor escalabilidade e desempenho usando modelos DB que não suportam todas as funcionalidades de um RDBMS genérica, mas ainda a funcionalidade suficiente para ser útil . De certa forma, é como MySQL, que ao mesmo tempo não tinha suporte para transações, mas, exatamente , porque isso, conseguiu superar outros sistemas de banco de dados. Se você pode escrever a sua aplicação de uma forma que não exigem transações, foi ótimo.

  3. Por que seria melhor do que usar um banco de dados SQL? E quanto melhor é?

    Seria melhor quando as suas necessidades de site para escalar tão maciçamente que os melhores RDBMS em execução no melhor hardware que você pode pagar e otimizado tanto quanto possível simplesmente não pode manter-se com a carga. Quanto melhor é depende do caso de uso específico (lotes de atividade de atualização combinado com lotes de junta é muito difícil na "tradicional" RDBMSs) -. Poderia muito bem ser um fator de 1000, em casos extremos

  4. É a tecnologia muito novo para começar a implementar ou ainda vale a pena dar uma olhada em?

    depende, principalmente, o que você está tentando alcançar. É certamente maduro o suficiente para usar. Mas alguns aplicativos realmente precisa de escala que maciçamente. Para a maioria, um RDBMS tradicional é suficiente. No entanto, com o uso da Internet cada vez mais onipresente o tempo todo, é bastante provável que os aplicativos que fazer se tornará mais comum (embora provavelmente não dominante).

Outras dicas

Não existe tal coisa como NoSQL!

NoSQL é um chavão.

Durante décadas, quando as pessoas estavam falando sobre bancos de dados, eles significava bancos de dados relacionais. E quando as pessoas estavam falando sobre bancos de dados relacionais, que significavam aqueles que você controlar com Edgar F. Codd Structured Query Language. Armazenar dados de alguma outra forma? Loucura! Tudo o resto é apenas flatfiles.

Mas, nos últimos anos, as pessoas começaram a questionar esse dogma. As pessoas se perguntavam se tabelas com linhas e colunas são realmente a única maneira de representar dados. As pessoas começaram a pensar e de codificação, e veio com muitos novos conceitos como os dados podem ser organizados. E eles começaram a criar novos sistemas de banco de dados projetado para estas novas formas de trabalhar com os dados.

As filosofias de todas estas bases de dados eram diferentes. Mas uma coisa todos esses bancos de dados tinham em comum, foi que a Structured Query Language já não era um bom ajuste para usá-los. Assim, cada banco de dados substituído SQL com suas próprias linguagens de consulta. E assim o termo NoSQL nasceu, como um rótulo para todas as tecnologias de banco de dados que desafiam o modelo de banco de dados relacional clássico.

Então, o que bancos de dados NoSQL têm em comum?

Na verdade, não muito.

É frequente ouvir frases como:

  • NoSQL é escalável!
  • NoSQL é para BigData!
  • NoSQL viola ACID!
  • NoSQL é uma chave loja glorificado / valor!

Isso é verdade? Bem, algumas dessas declarações pode ser verdade para alguns bancos de dados comumente chamado de NoSQL, mas cada um também é falso por pelo menos um outro. Na verdade, a única coisa bancos de dados NoSQL têm em comum, é que eles são bancos de dados que não usam SQL. É isso aí. A única coisa que os define é o que os diferencia um do outro.

Então, o que define as bases de dados NoSQL Apart?

Por isso, deixou claro que todos os bancos de dados comumente referido como NoSQL são muito diferentes para avaliá-los juntos. Cada um deles precisa ser avaliada separadamente para decidir se eles são um bom ajuste para resolver um problema específico. Mas onde é que vamos começar? Felizmente, bancos de dados NoSQL podem ser agrupados em certas categorias, que são adequados para diferentes casos de uso:

Documento orientado

Exemplos: MongoDB, CouchDB

Pontos Fortes: dados heterogéneas, trabalho, desenvolvimento ágil orientada a objetos

Sua vantagem é que eles não exigem uma estrutura de dados consistente. Eles são úteis quando suas necessidades e, assim, o seu layout de banco de dados muda constantemente, ou quando você está lidando com conjuntos de dados que pertencem juntos, mas ainda parece muito diferente. Quando você tem um monte de tabelas com duas colunas chamadas "chave" e "valor", então estes podem valer a pena olhar em.

Graph bancos de dados

Exemplos:. Neo4j, GiraffeDB

Pontos Fortes: Mineração de Dados

Enquanto a maioria dos bancos de dados NoSQL abandonar o conceito de gestão das relações de dados, esses bancos de dados abraçá-lo ainda mais do que os chamados bancos de dados relacionais.

Seu foco é a definição de dados por sua relação com outros dados. Quando você tem um monte de tabelas com chaves primárias, que são as principais chaves de outras duas tabelas (e talvez alguns dados que descrevem a relação entre eles), então estes podem ser algo para você.

Chave-Valor Stores

Exemplos: Redis, Cassandra, MemcacheDB

Pontos fortes: pesquisa rápida de valores de chaves conhecidas

Eles são muito simplista, mas que os torna fácil e rápido ao uso. Quando você não tem necessidade de procedimentos armazenados, restrições, gatilhos e todos os recursos de banco de dados avançados e você só quer armazenamento rápido e recuperação de seus dados, então esses são para você.

Infelizmente, eles assumem que você sabe exatamente o que você está procurando. Você precisa do perfil de User157641? Não tem problema, só vai levar microssegundos. Mas o que quando você quer os nomes de todos os usuários que estão com idade entre 16 e 24 anos, têm "waffles", como seu faalimentos vorite e logado nas últimas 24 horas? Azar. Quando você não tem uma chave definitiva e original para um resultado específico, você não pode tirá-lo de sua loja K-V que facilmente.

é SQL obsoleto?

Alguns proponentes NoSQL alegam que o seu banco de dados NoSQL favorita é a nova maneira de fazer as coisas, e SQL é uma coisa do passado.

Eles estão certo?

Não, é claro que eles não são. Embora existam problemas de SQL não é adequado para, ele ainda tem seus pontos fortes. Lotes de modelos de dados são simplesmente melhor representado como um conjunto de tabelas que fazem referência entre si. Especialmente porque a maioria dos programadores de banco de dados foram treinados durante décadas para pensar de dados de forma relacional e tentar pressionar essa mentalidade para uma nova tecnologia que não foi feito para isso raramente acaba bem.

bancos de dados NoSQL não são um substituto para o SQL - são uma alternativa

.

A maioria dos ecossistemas de software em torno dos diferentes bancos de dados NoSQL não são tão maduros ainda. Embora haja avanços, você ainda não tenha ferramentas complementares que são tão maduro e poderoso como aqueles disponíveis para bancos de dados SQL populares.

Além disso, há muito mais know-how para SQL ao redor. Gerações de cientistas da computação passaram décadas de suas carreiras em pesquisa com foco em bancos de dados relacionais, e mostra: A literatura escrita sobre bancos de dados SQL e modelagem de dados relacional, tanto práticos e teóricos, poderia preencher várias bibliotecas cheias de livros. Como construir um banco de dados relacional para seus dados é um tópico tão bem pesquisado é difícil encontrar um caso canto onde não há um geralmente aceite by-the-book melhores práticas.

A maioria bancos de dados NoSQL, por outro lado, ainda estão em sua infância. Ainda estamos tentando descobrir a melhor maneira de usá-los.

Uma vez alguém disse que o meu post anterior era off-topic, eu vou tentar compensar :-) NoSQL não é, e nunca foi, pretende ser um substituto para mais bancos de dados SQL tradicional, mas um par de palavras estão em a fim de fazer as coisas na perspectiva correta.

No coração da filosofia NoSQL mentiras a consideração de que, possivelmente por razões comerciais e de portabilidade, motores SQL tendem a ignorar o enorme poder do sistema operacional UNIX e seus derivados.

Com um banco de dados baseado em sistema de arquivos, você pode tirar vantagem imediata das capacidades cada vez maiores e poder do sistema operacional subjacente, que têm vindo a aumentar desde há muitos anos, de acordo com a lei de Moore. Com esta abordagem, muitos comandos do sistema operacional automaticamente tornam-se também "operadores de banco de dados" (pensar "ls" "classificação", "encontrar" e os outros incontáveis ??utilitários UNIX shell).

Com isto em mente, e um pouco de criatividade, você pode realmente desenvolver um banco de dados baseado em sistema de arquivos que é capaz de superar as limitações de muitos motores comum SQL, pelo menos para os padrões de uso específico, que é o ponto inteiro atrás NoSQL de filosofia, a maneira que eu vê-lo.

Eu corro centenas de sites e todos eles utilização NoSQL, em maior ou menor grau. Na verdade, eles não hospedar enormes quantidades de dados, mas mesmo se alguns deles fizeram eu provavelmente poderia pensar em um uso criativo de NoSQL e o sistema de arquivos para superar os gargalos. Algo que provavelmente seria mais difícil com SQL "prisões" tradicionais. Exorto-vos a Google por "unix", "manis" e "shaffer" para entender o que quero dizer.

Se bem me lembro, ele refere-se a tipos de bancos de dados que não acompanham necessariamente a forma relacional. bases de dados de documentos vêm à mente, bancos de dados sem uma estrutura específica, e que não usam SQL como uma linguagem de consulta específica.

É geralmente mais adequado para aplicações web que dependem de desempenho do banco de dados, e não precisam de recursos mais avançados de Motores Relação de banco de dados. Por exemplo, uma loja de Key-> Valor fornecendo uma consulta simples interface de ID pode ser 10-100x mais rápido do que a implementação do servidor SQL correspondente, com um custo de manutenção inferior do revelador.

Um exemplo é este papel para um OLTP Tuplo da loja, o qual sacrificados operações para o processamento de rosca única (não simultaneidade problema porque não simultaneidade permitido) , guardando todos os dados na memória; alcançar 10-100x melhor desempenho em comparação com um RDBMS impulsionada sistema similar. Basicamente, ele está se movendo para longe do 'Tamanho único' visão de sistemas de banco de dados SQL e.

Na prática, NoSQL é um sistema de banco de dados que suporta o acesso rápido a grandes objetos binários (docs, jpgs etc) usando uma estratégia chave de acesso baseado. Esta é uma partida do tradicional acesso SQL que é apenas bom o suficiente para valores alfanuméricos. Não só a estratégia de armazenamento e acesso interno mas também a sintaxe e limitações sobre o formato de exibição restringe o SQL tradicional. implementações BLOB de bancos de dados relacionais tradicionais também sofrem com essas restrições.

Por trás da cena é uma admissão indireta do fracasso do modelo SQL para apoiar qualquer forma de OLTP ou suporte para novos DataFormats. "Apoio" não só armazenar mas capacidades de acesso total - programática e querywise usando o modelo padrão.

entusiastas relacionais foram rápidos para modificar a defnição de NoSQL de Não-SQL para Não-Only-SQL para manter SQL ainda na imagem! Isso não é bom, especialmente quando vemos que programas Java resort mais hoje para mapeamento ORM do modelo relacional subjacente. Um novo conceito deve ter uma definição bem defenido. Senão ele vai acabar como SOA.

A base dos sistemas de mentiras NoSQL na chave aleatória - valor par. Mas isso não é novidade. sistemas de banco de dados tradicionais, como IMS e IDMS que suporte hash chaves Ramdom (sem fazer uso de qualquer índice) e eles ainda o fazem. Em IDMS fato já tem uma palavra-chave NONSQL onde apoiar o acesso SQL para seu banco de dados de rede mais antigo que eles denominaram como NONSQL.

É como Jacuzzi: tanto uma marca e um nome genérico. Não é apenas uma tecnologia específica, mas sim uma específica tipo da tecnologia, neste caso referindo-se a grande escala (muitas vezes escassos) "bancos de dados", como BigTable ou CouchDB do Google.

NoSQL o real programa parece ser um banco de dados relacional implementada em awk usando arquivos simples no backend. Embora eles professam, "NoSQL essencialmente não tem limites arbitrários, e pode trabalhar em outros produtos não pode. Por exemplo, não há limite no tamanho do campo de dados, o número de colunas, ou o tamanho do arquivo", eu não acho que isso é o banco de dados em larga escala do futuro.

Como Joel diz, massivamente escaláveis ??bancos de dados como BigTable ou HBase , são muito mais interessantes. GQL é a linguagem de consulta associado com BigTable e App Engine. É em grande parte SQL ajustado para evitar apresenta Google considera os pontos de estrangulamento (como associações). No entanto, eu não ouvi este referido como "NoSQL" antes.

NoSQL é um sistema de banco de dados que não usa consultas SQL cordas base para buscar dados.

Em vez de construir consultas usando uma API que irá fornecer, por exemplo Amazon DynamoDB é um bom exemplo de um banco de dados NoSQL.

bancos de dados NoSQL são melhores para grandes aplicações onde a escalabilidade é importante.

O NoSQL média de banco de dados não-relacional?

Sim, NoSQL é diferente de RDBMS e OLAP. Ele usa modelos de consistência mais frouxas do que bancos de dados relacionais tradicionais.

modelos de consistência são usados ??em sistemas distribuídos como sistemas de memória compartilhada distribuída ou sistema de arquivos distribuídos.

Como funciona internamente?

sistemas de banco de dados NoSQL são muitas vezes altamente otimizado para operações de recuperação e anexar e muitas vezes oferecem pouca funcionalidade além de armazenamento de registros (por exemplo, lojas de chave-valor). A flexibilidade de tempo de execução reduzido em comparação com sistemas de SQL completo é compensada pelos ganhos assinalados em escalabilidade e desempenho para determinados modelos de dados.

Pode trabalhar em dados estruturados e não estruturados. Ele usa coleções em vez de tabelas

Como você consulta "banco de dados" como?

Watch SQL vs NoSQL: Batalha dos Backends ; isso explica tudo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top