Eu tenho ouvido coisas sobre o NoSQL e que ele pode se tornar um substituto para os métodos de armazenamento do SQL DB, devido ao fato de que a interação com o DB geralmente é um gargalo para a velocidade na web.
Então, eu só tenho algumas perguntas:
O que exatamente é isso?
Como funciona?
Por que seria melhor do que usar um banco de dados SQL? E quanto melhor é?
A tecnologia é nova demais para começar a implementar ainda ou vale a pena dar uma olhada?
Respostas:
O que exatamente é isso?
Por um lado, um sistema específico , mas também se tornou uma palavra genérica para uma variedade de novos back-ends de armazenamento de dados que não seguem o modelo de banco de dados relacional.
Como funciona?
Cada um dos sistemas rotulados com o nome genérico funciona de maneira diferente, mas a idéia básica é oferecer melhor escalabilidade e desempenho usando modelos de banco de dados que não suportam toda a funcionalidade de um RDBMS genérico, mas ainda funcionalidade suficiente para ser útil. De certa forma, é como o MySQL, que ao mesmo tempo não possuía suporte para transações, mas, exatamente por isso, conseguiu superar outros sistemas de banco de dados. Se você pudesse escrever seu aplicativo de uma maneira que não exigisse transações, seria ótimo.
Por que seria melhor do que usar um banco de dados SQL? E quanto melhor é?
Seria melhor quando o seu site precisa ser escalado de forma tão massiva que o melhor RDBMS em execução no melhor hardware que você puder pagar e otimizado o máximo possível simplesmente não possa acompanhar a carga. Quanto melhor depende do caso de uso específico (muita atividade de atualização combinada com muitas associações é muito difícil para RDBMSs "tradicionais") - pode muito bem ser um fator de 1000 em casos extremos.
A tecnologia é nova demais para começar a implementar ainda ou vale a pena dar uma olhada?
Depende principalmente do que você está tentando alcançar. Certamente é maduro o suficiente para usar. Mas poucos aplicativos realmente precisam escalar isso de maneira massiva. Para a maioria, um RDBMS tradicional é suficiente. No entanto, com o uso da Internet cada vez mais onipresente, é bem provável que os aplicativos que o fazem se tornem mais comuns (embora provavelmente não sejam dominantes).
fonte
transaction
?Não existe o NoSQL!
NoSQL é um chavão.
Durante décadas, quando as pessoas falavam sobre bancos de dados, elas significavam bancos de dados relacionais. E quando as pessoas falavam sobre bancos de dados relacionais, elas significavam aquelas que você controla com a Linguagem de consulta estruturada de Edgar F. Codd. Armazenando dados de alguma outra maneira? Loucura! Qualquer outra coisa é apenas flatfiles.
Mas nos últimos anos, as pessoas começaram a questionar esse dogma. As pessoas se perguntavam se as tabelas com linhas e colunas são realmente a única maneira de representar dados. As pessoas começaram a pensar e codificar e criaram muitos novos conceitos de como os dados poderiam ser organizados. E eles começaram a criar novos sistemas de banco de dados projetados para essas novas maneiras de trabalhar com dados.
As filosofias de todos esses bancos de dados eram diferentes. Mas uma coisa que todos esses bancos de dados tinham em comum era que a Structured Query Language não era mais uma boa opção para usá-los. Portanto, cada banco de dados substituiu o SQL por suas próprias linguagens de consulta. E assim nasceu o termo NoSQL, como um rótulo para todas as tecnologias de banco de dados que desafiam o modelo clássico de banco de dados relacional.
Então, o que os bancos de dados NoSQL têm em comum?
Na verdade, não muito.
Você costuma ouvir frases como:
Isso é verdade? Bem, algumas dessas declarações podem ser verdadeiras para alguns bancos de dados comumente chamados NoSQL, mas cada uma delas também é falsa para pelo menos uma outra. Na verdade, a única coisa que os bancos de dados NoSQL têm em comum é que 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 diferencia os bancos de dados NoSQL?
Portanto, deixamos claro que todos os bancos de dados comumente referidos como NoSQL são muito diferentes para avaliá-los juntos. Cada um deles precisa ser avaliado separadamente para decidir se é um bom ajuste para resolver um problema específico. Mas por onde começamos? Felizmente, os bancos de dados NoSQL podem ser agrupados em determinadas categorias, que são adequadas para diferentes casos de uso:
Orientado a documentos
Exemplos: MongoDB, CouchDB
Pontos fortes: Dados heterogêneos, trabalho orientado a objetos, desenvolvimento ágil
A vantagem deles é que eles não exigem uma estrutura de dados consistente. Eles são úteis quando seus requisitos e, portanto, o layout do banco de dados são alterados constantemente ou quando você está lidando com conjuntos de dados que pertencem um ao outro, mas ainda têm uma aparência muito diferente. Quando você tem muitas tabelas com duas colunas chamadas "chave" e "valor", vale a pena procurar essas.
Bancos de dados gráficos
Exemplos: Neo4j, GiraffeDB.
Pontos fortes: Mineração de dados
Embora a maioria dos bancos de dados NoSQL abandone o conceito de gerenciamento de relações de dados, esses bancos de dados o abraçam ainda mais do que os chamados bancos de dados relacionais.
Seu foco é definir dados por sua relação com outros dados. Quando você tem muitas tabelas com chaves primárias, que são as chaves primárias de duas outras tabelas (e talvez alguns dados que descrevam a relação entre elas), essas podem ser algo para você.
Lojas de valor-chave
Exemplos: Redis, Cassandra, MemcacheDB
Pontos fortes: Pesquisa rápida de valores por chaves conhecidas
Eles são muito simplistas, mas isso os torna rápidos e fáceis de usar. Quando você não precisa de procedimentos armazenados, restrições, gatilhos e todos esses recursos avançados de banco de dados e deseja apenas armazenamento e recuperação rápidos de seus dados, esses são para você.
Infelizmente, eles assumem que você sabe exatamente o que está procurando. Você precisa do perfil de User157641? Não tem problema, levará apenas microssegundos. Mas e quando você deseja que os nomes de todos os usuários com idades entre 16 e 24 anos tenham "waffles" como alimento favorito e entrem nas últimas 24 horas? Muita sorte. Quando você não possui uma chave definida e exclusiva para um resultado específico, não pode tirá-la da sua loja KV com tanta facilidade.
SQL está obsoleto?
Alguns defensores do NoSQL afirmam que seu banco de dados favorito do NoSQL é a nova maneira de fazer as coisas, e o SQL é uma coisa do passado.
Eles estão certos?
Não, é claro que não são. Embora haja problemas para os quais o SQL não é adequado, ele ainda tem seus pontos fortes. Muitos modelos de dados são simplesmente melhor representados como uma coleção de tabelas que se referem uma à outra. Especialmente porque a maioria dos programadores de banco de dados foi treinada por décadas para pensar nos dados de maneira relacional, e tentar pressionar essa mentalidade para uma nova tecnologia que não foi feita para isso raramente termina bem.
Os bancos de dados NoSQL não substituem o SQL - eles são uma alternativa.
A maioria dos ecossistemas de software em torno dos diferentes bancos de dados NoSQL ainda não está madura. Embora haja avanços, você ainda não possui ferramentas suplementares tão maduras e poderosas quanto as disponíveis para os 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 pesquisas focadas em bancos de dados relacionais, e isso mostra: A literatura escrita sobre bancos de dados SQL e modelagem de dados relacionais, tanto práticos quanto teóricos, poderia preencher várias bibliotecas cheias de livros. Como criar um banco de dados relacional para seus dados é um tópico tão bem pesquisado que é difícil encontrar um caso em que não haja uma prática recomendada geralmente aceita pelo manual.
A maioria dos bancos de dados NoSQL, por outro lado, ainda está engatinhando. Ainda estamos descobrindo a melhor maneira de usá-los.
fonte
Como alguém disse que minha postagem anterior era fora de tópico, tentarei compensar :-) O NoSQL não é, e nunca foi, um substituto para bancos de dados SQL mais populares, mas algumas palavras são necessárias para obter coisas na perspectiva certa.
No cerne da filosofia NoSQL está a consideração de que, possivelmente por razões comerciais e de portabilidade, os mecanismos SQL tendem a desconsiderar o tremendo poder do sistema operacional UNIX e seus derivados.
Com um banco de dados baseado em sistema de arquivos, você pode tirar vantagem imediata dos recursos e poder cada vez maiores do sistema operacional subjacente, que vêm aumentando constantemente há muitos anos, de acordo com a lei de Moore. Com essa abordagem, muitos comandos do sistema operacional tornam-se automaticamente também "operadores de banco de dados" (pense em "ls" "sort", "find" e outros inúmeros utilitários de shell do UNIX).
Com isso em mente e um pouco de criatividade, você pode realmente criar um banco de dados baseado em sistema de arquivos capaz de superar as limitações de muitos mecanismos SQL comuns, pelo menos para padrões de uso específicos, que é o ponto principal da filosofia do NoSQL, o do jeito que eu vejo.
Eu corro centenas de sites e todos eles usam o NoSQL em maior ou menor grau. Na verdade, eles não hospedam grandes quantidades de dados, mas mesmo que alguns deles o fizessem, provavelmente eu poderia pensar em um uso criativo do NoSQL e do sistema de arquivos para superar gargalos. Algo que provavelmente seria mais difícil com as "prisões" tradicionais do SQL. Peço que você procure no Google por "unix", "manis" e "shaffer" para entender o que quero dizer.
fonte
Se bem me lembro, refere-se a tipos de bancos de dados que não seguem necessariamente a forma relacional. Bancos 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 aplicativos da Web que dependem do desempenho do banco de dados e não precisa de recursos mais avançados dos Relation Database Engines. Por exemplo, um armazenamento Key-> Value que forneça uma consulta simples por interface de ID pode ser 10 a 100 vezes mais rápido que a implementação do servidor SQL correspondente, com um custo de manutenção do desenvolvedor mais baixo.
Um exemplo é este artigo para um armazenamento de tupla OLTP , que sacrificou transações para processamento de thread único (sem problemas de simultaneidade porque nenhuma simultaneidade é permitida) e manteve todos os dados na memória; alcançar um desempenho 10-100x melhor em comparação com um sistema acionado por RDBMS semelhante . Basicamente, está se afastando da visualização 'Tamanho único de todos os sistemas SQL e de banco de dados.
fonte
Na prática, o NoSQL é um sistema de banco de dados que suporta acesso rápido a objetos binários grandes (documentos, jpgs etc.) usando uma estratégia de acesso baseada em chaves. Este é um desvio do acesso tradicional ao SQL, que é bom o suficiente apenas para valores alfanuméricos. Não apenas a estratégia interna de armazenamento e acesso, mas também a sintaxe e as limitações no formato de exibição restringem o SQL tradicional. As implementações BLOB de bancos de dados relacionais tradicionais também sofrem com essas restrições.
Nos bastidores, é uma admissão indireta da falha do modelo SQL para suportar qualquer forma de OLTP ou para novos formatos de dados. "Suporte" significa não apenas armazenar, mas também recursos de acesso total - programáticos e de consulta usando o modelo padrão.
Os entusiastas do relacionamento foram rápidos em modificar a definição de NoSQL de Not-SQL para Not-Only-SQL para manter o SQL ainda na imagem! Isso não é bom, especialmente quando vemos que a maioria dos programas Java hoje recorrem ao mapeamento ORM do modelo relacional subjacente. Um novo conceito deve ter uma definição clara. Senão, acabará como SOA.
A base dos sistemas NoSQL reside no par de chave-valor aleatório. Mas isso não é novidade. Os sistemas de banco de dados tradicionais, como IMS e IDMS, suportavam chaves de ramificação de hash (sem usar nenhum índice) e ainda o fazem. De fato, o IDMS já possui uma palavra-chave NONSQL, na qual oferece suporte ao acesso SQL ao banco de dados de rede mais antigo, denominado NONSQL.
fonte
É como a Jacuzzi: uma marca e um nome genérico. Não é apenas uma tecnologia específica, mas um tipo específico de tecnologia, neste caso, referente a "bancos de dados" em larga escala (geralmente esparsos), como o BigTable ou o CouchDB do Google.
fonte
NoSQL, o programa atual parece ser um banco de dados relacional implementado no awk usando arquivos simples no back-end. Embora eles professem, "o NoSQL não tem essencialmente limites arbitrários e pode funcionar onde outros produtos não podem. Por exemplo, não há limite para o tamanho do campo de dados, o número de colunas ou o tamanho do arquivo", não acho que seja. o banco de dados em larga escala do futuro.
Como Joel diz, bancos de dados massivamente escaláveis, como BigTable ou HBase , são muito mais interessantes. GQL é a linguagem de consulta associada ao BigTable e ao App Engine. É amplamente ajustado ao SQL para evitar recursos que o Google considera gargalos (como junções). No entanto, eu nunca ouvi isso conhecido como "NoSQL" antes.
fonte
O NoSQL é um sistema de banco de dados que não usa consultas SQL baseadas em strings para buscar dados.
Em vez disso, você cria consultas usando uma API que elas fornecerão, por exemplo, o Amazon DynamoDB é um bom exemplo de banco de dados NoSQL.
Os bancos de dados NoSQL são melhores para aplicativos grandes onde a escalabilidade é importante.
fonte
Sim, o NoSQL é diferente de RDBMS e OLAP. Ele usa modelos de consistência mais frouxos que os 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 armazenamento de dados distribuídos.
Os sistemas de banco de dados NoSQL geralmente são altamente otimizados para operações de recuperação e anexação e geralmente oferecem pouca funcionalidade além do armazenamento de registros (por exemplo, armazenamento de valores-chave). A flexibilidade reduzida em tempo de execução, em comparação com os sistemas SQL completos, é compensada por ganhos significativos em escalabilidade e desempenho para determinados modelos de dados.
Ele pode trabalhar em dados estruturados e não estruturados. Ele usa coleções em vez de tabelas
Assista SQL vs NoSQL: Batalha dos Backends ; isso explica tudo.
fonte