IBM
Canais iMasters

Banco de Dados

Escolhendo a ferramenta certa para o banco de dados NoSQL

Meu Deus, existem tantas ferramentas para armazenamento do NoSQL por aí. É quase tão ruim quanto as marcas de bebidas esportivas, ou de água. Você notou que alguns supermercados imensos têm corredores inteiros dedicados ao que bebemos?

Como um administrador ou gerente de sistemas de TI, às vezes é muito difícil comparar várias ferramentas do NoSQL. Isso envolve a consideração das suas necessidades computacionais especiais, e o alinhamento das mesmas ao que é disponibilizado no mercado, combinando o que é certo para a sua empresa e então tomando a decisão certa!

É por isso que Monitis, um serviço tudo-em-um de monitoramento de performance de redes e sistemas para sysadmins, está publicando uma série de blogs que tinham o objetivo de oferecer um guia compreensivo para a tecnologia e para as marcas do NoSQL. O objetivo é te ajudar a fazer a escolha certa que atende à necessidade específica da sua empresa.

Por que deveríamos nos importar? - você pode se perguntar. Cada vez mais, nossos clientes, que dependem da nossa habilidade de monitorar servidores e redes e de várias outras métricas-chave dia e noite a partir da nuvem, também querem nosso conselho sobre qual tipo de tecnologia de banco de dados escalável e robusto usar. Portanto, estamos sendo prestativos!

Portanto, apresentaremos pesquisas em ferramentas populares existentes de armazenamento de dados NoSQL, que têm o intuito, geralmente, de armazenar quantidades imensas de dados sem precedentes, oferecer escalabilidade horizontal e flexível, e fornecer o processamento de consultas absurdamente rápido. Também chegaremos ao âmago da questão e iremos comparar vários bancos de dados NoSQL bastante conhecidos, como Cassandra, MongoDB, CouchDB, Redis, Riak, HBase e outros.

Neste primeiro artigo, vamos discutir sobre a razão pela qual a tecnologia NoSQL é importante.

Então, o que é NoSQL?

Geralmente, o NoSQL não é relacional e foi projetado para armazenamento distribuído de dados, para dados de grande escala (p.e. o Facebook ou o Twitter acumulam terabits de dados todos os dias para milhões de usuários), e não existem fixed schemas e joins. Enquanto isso, sistemas de gerenciamento de bancos de dados relacionais (RDBMS) geram escalonamento ao deixar seu hardware cada vez mais rápido e adicionando memória. O NoSQL, por outro lado, pode tirar vantagem de “escalar para baixo” – o que significa distribuir o carregamento entre muitos outros sistemas de conveniência.

O acrônimo NoSQL foi criado em 1998 e, enquanto muitos pensam que o NoSQL é um termo depreciativo criado para tirar sarro do SQL, na verdade ele significa “Não Somente SQL – Not Only SQL”. A ideia é que ambas tecnologias (NoSQL and RDBMSs) podem coexistir e cada uma delas tem o seu lugar. Empresas como Facebook, Twitter, Digg, Amazon, LinkedIn e Google usam o NoSQL de alguma maneira - então o termo tem estado nas notícias atuais nos últimos anos.

Qual o problema com RDBMSs?

Bom, nada, na verdade. Eles apenas têm suas limitações. Considere estes três problemas com RDBMSs:

RDBMSs usam uma abordagem de normalização com base em tabela de dados, e esse modelo é limitado. Certas estruturas de dados não podem ser representadas sem adulteração dos dados, programas, ou ambos...

Elas permitem versionamento ou atividades como: Criar, Ler, Atualizar e Deletar. Para banco de dados, atualizações nunca deveriam ser permitidas, porque elas destroem a informação. Em vez disso, quando os dados mudam, o banco de dados deveria apenas adicionar outro registro e anotar devidamente o valor para aquele registro.

A performance é perdida quando o RDBMSs normaliza os dados. O motivo: a normalização pede mais tabelas, joins de tabelas, chaves e índices e, dessa maneira, mais operações internas do banco de dados para implementar as consultas. Logo logo, o banco de dados começa a crescer para o tamanho de terabytes, e é aí que as coisas começam a ficar lentas.

As quatro categorias do NoSQL

1. Armazenamento Chave-Valor. A ideia principal aqui é usar uma tabela hash na qual há uma chave única e um indicador de um dado ou de um item em particular. O modelo chave-valor é o mais simples e fácil de implementar. Mas ele é ineficiente quando você somente está interessado em consultar ou em atualizar parte de um valor, entre outras desvantagens.

Exemplos Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB
Aplicações típicas Cache de conteúdo (Foco em escalar para imensas quantidades de dados, criado para lidar com carregamento massivos) logging etc.
Modelo de dados Coleção de pares de chave-valor
Pontos fortes Pesquisas rápidas
Fraquezas Dados armazenados não têm schema

2. Armazenamento Column Family. Foram criadas para armazenar e para processar grandes quantidades de dados distribuídos em muitas máquinas. Ainda existem chaves, mas elas apontam para colunas múltiplas. As colunas são organizadas por família da coluna.

Exemplos Cassandra, HBase, Riak
Aplicações tipicas Sistemas de arquivos distribuídos
Modelo de dados Colunas → famílias de colunas
Pontos fortes Pesquisas rápidas, boa distribuição de armazenamento de dados
Fraquezas API de baixo nível

3. Banco de Dados orientado a Documentos. Foram inspirados por Lotus Notes e são similares ao armazenamento chave-valor. O modelo é basicamente documentos versionados que são coleções de outras coleções de chave-valor. Os documentos semi-estruturados são armazenados em formatos como JSON. Bancos de dados de documentos são essencialmente o próximo nível do chave-valor, permitindo valores aninhados associados a cada chave. Bancos de dados de documentos suportam as consultas mais eficientemente.

Exemplos CouchDB, MongoDb
Aplicações típicas Aplicações Web (Similar ao armazenamento chave-valor, mas o BD sabe qual é o valor)
Modelo de dados Coleções de coleções de chave-valor
Pontos fortes Tolerante a dados incompletos
Fraquezas Query performance, sem sintaxe de query padrão

4. Banco de Dados orientado a Grafos. Em vez de tabelas com linhas e colunas e a rígida estrutura do SQL, um modelo gráfico flexível é usado e que pode, mais uma vez, ser escalado através de varias máquinas. Bancos de dados NoSQL não fornecem uma linguagem query declarativa de alto nível como o SQL para evitar tempo extra em processamento. Em vez disso, executar o querying nesse banco de dados é um modelo de dados específico. Muitas das plataformas NoSQL permitem interfaces RESTful nos dados, enquanto outras oferecem query APIs.

Exemplos Neo4J, InfoGrid, Infinite Graph
Aplicações típicas Redes Sociais, Recomendações (Foco em modelar a estrutura dos dados – interconectividade)
Modelo de dados Grafo de Propriedades – Nós
Pontos fortes Alogoritmos gráficos, p.e. caminho mais curto, conectividade, relacionamentos n degrees etc.
Fraquezas Tem que atravessar todo o gráfico para obter uma resposta definitiva. Não é fácil de agrupar.

Geralmente, os melhores lugares para usar a tecnologia NoSQL é onde o modelo de dados é simples; onde flexibilidade é mais importante que controle rígido sobre estruturas definidas de dados; onde alta performance deve existir; consistência de dados rígida não é necessária; e onde é fácil mapear valores complexos para chaves conhecidas.

Alguns exemplos de quando usar NoSQL 

Logging/Arquivamento. Ferramentas de Log-mining vêm a calhar porque elas conseguem acessar logs através de servidores, relacioná-los e analisá-los..

Insight em computação social. Muitas empresas hoje forneceram a seus usuários a habilidade de atuar na computação social através de fóruns de mensagens blogs etc.

Integração de feed de dados externos. Muitas empresas precisam integrar os dados oriundos de seus parceiros. Mesmo se as duas partes conduzirem várias discussões e negociações, as empresas têm pouco controle sobre o formato dos dados que chegam a elas. Além disso, existem muitas situações em que esses formatos mudam muito frequentemente - baseado na mudança das necessidades de negócios dos parceiros.

Sistemas de processamento de pedidos Front-end. Hoje, o volume de pedidos, aplicações e serviços flutuando através de diferentes canais para comerciantes, banqueiros e seguradoras, fornecedores de entretenimento, logística etc é enorme. Esses pedidos precisam ser capturados sem nenhum interrupção sempre que um usuário final faz uma transação de qualquer parte do mundo. Depois disso, um sistema de reconciliação tipicamente os atualiza para sistemas de back-end, ao mesmo tempo que atualiza o usuário final com o seu status.

Serviço de gerenciamento de conteúdo empresarial. O gerenciamento de conteúdo agora é utilizado através de diferentes grupos funcionais da empresa, como RH ou vendas. O desafio é congregar grupos diferentes utilizando estruturas diferentes de metadados em um serviço comum de gerenciamento de conteúdo.

Estatísticas/análises em tempo real. Às vezes, é necessário usar o banco de dados como uma maneira de rastrear métricas de performance em tempo real para websites (visualizações de páginas, visitas únicas etc). Ferramentas como o Google Analytics são ótimas, mas não são em tempo real - às vezes, é util construir um sistema secundário que fornece estatísticas em tempo real. Outras alterativas, como monitoramento de tráfego 24/7, são uma boa opção também.

Que tipo de armazenamento devo usar?

Aqui está um breve resumo que deve te ajudar a decidir:

NoSQL
  • O armazenamento deve ser capaz de lidar com carregamentos pesados
  • Você executa muitas operações de escrita no armazenamento
  • Você quer um armazenamento  que seja escalável horizontalmente
  • Simplicidade é bom, como em uma linguagem query bem simples (sem joins)
RDBMS
  • Armazenamento é esperado para apresentar carregamento pesado também, mas consiste principalmente na leitura de operações   
  • Você prefere performance a uma estrutura de dados sofisticada
  • Você precisa de uma linguagem SQL query poderosa

Em outros artigos, voltarei a falar do assunto, te guiando através de sete bancos de dados populares do NoSQL e discutindo seus méritos e seus problemas. Fique ligado!

Texto original disponível em http://blog.monitis.com/index.php/2011/05/22/picking-the-right-nosql-database-tool/

 


Comente também

17 Comentários

bizonia
bizonia

O titulo "Escolhendo a ferramenta certa para o banco de dados SQL" está no minimo estranho comparado com o assunto

Ronaldo Ramires
Ronaldo Ramires

Leia novamente : "Escolhendo a ferramenta certa para o banco de dados NoSQL" (NOSQL, NOSQL, NOSQL).

luiz
luiz

Concordo... Abri imaginando que falaria de ferramentas de SQL, e não uma análise do NoSQP...

Ronaldo Ramires
Ronaldo Ramires

Leia novamente : "Escolhendo a ferramenta certa para o banco de dados NoSQL" (NOSQL, NOSQL, NOSQL).

mvbitt
mvbitt

Exatamente, o título não remete ao conteúdo, além de conter informações obvias sem uma posição ou conclusão do autor.

Ronaldo Ramires
Ronaldo Ramires

Leia novamente : "Escolhendo a ferramenta certa para o banco de dados NoSQL" (NOSQL, NOSQL, NOSQL).

Remete ao conteudo sim, de uma lida com atenção. Se não tem bagagem tecnica para entender, é outra coisa. Essa não é uma materia da InfoExame ou do IDGNow...

Frederico/Maringá/PR
Frederico/Maringá/PR

Mas vem cá, escuto falar que as instituições bancárias de maior valor usam banco de dados Oracle e SQL Server da Microsoft, nunca ouvi falar nesses "NoSQL", será que estou desenvolvendo ferramentas de forma incorreta? Acho que seria mais fácil ser prático e dizer que tipo de aplicação necessita desse tipo de ferramenta, dando-se exemplos reais.

Ronaldo Ramires
Ronaldo Ramires

Não, voce escutou besteira, bancos usam outro conceito de banco de dados, até por serem centralizadas em arquiteturas de mainframe. O que eles rodam ou é Adabas ou coisas mais avançadas em OpenVMS e AIX. SQL Server e Oracle ficam destinados a aplicações departamentais nessas instituições.

Rina Noronha
Rina Noronha

Pessoal, peço desculpas pelo problema com o título. O correto é "NoSQL". Foi publicado SQL por engano. Já corrigimos, então, obrigada a todos pelo aviso!

Wolney Maia
Wolney Maia

Deve corrigir também no momento é que compartilhamos com as redes sociais. Cliquei no botão curtir para o facebook e veio scrito SQL.

Realmente....Banco de Dados é Banco de Dados... DBA.......Título totalmente confuso...

Diego Hellas
Diego Hellas

Um artigo tão bom e ficam discutindo sobre o título... o Assunto é muito importante.. pra quem interessa.... O NoSQL vem crescendo muito.. a tecnologia está melhorando muito.. mas ainda é "meio" falha... as empresas que desenvolvem estão aprimorando as ferramentas.. mas ainda está longe do ideial. Falo isso por que trabalho com bancos de dados e também o NoSQL, utilizo o Membase da Couchbase, é uma ferramenta boa.. que está sendo melhorada a cada dia.. mas como disse ainda tem muitas falhas.
O Assunto é tão impostante que a Oracle está investindo milhões e milhões em cima do MySQL NoSQL(já testei e é uma excelente oportunidade.. com uma grande vantagem.. você pode usar o NoSQL, mas também pode realizar consultas SQL em cima dos dados gravados pelo NoSQL), então fiquem de olho.. o lançamento oficial será ainda esse ano.
Mas é uma pena a falta de conhecimento(ou de buscar ele) em quem utiliza essa tecnologia, a maioria acha que da pra trocar um banco de dados relacional por um banco de dados NoSQL, cada um deles tem a sua vantagem e desvantagem.. cada caso é um caso.. e garanto que o NoSQL nunca será usado sem ter a necessidade de usar um banco relacional para rotinas auxiliares... um vai completar o outro.
Então antes de sair por ai usando o NoSQL, busque conhecimento.., teste bem o produto que você escolher, veja em que pontos do projeto é necessário usar o NoSQL, não de um tiro no pé, faça a escolha certa, planeje.. simule situações futuras.
Antes de desenvolver um "monstro" analise bem.. mas bem mesmo... quais as necessidades do projeto.. como você.. que informações você vai precisar extrair de um banco NoSQL.... você pode jogar um projeto inteiro fora se não olhar bem esses pontos, pois o que mais tenho visto é isso.... começa a usar NoSQL achando que vai conseguir fazer tudo que faz com bancos relacionais.. ai la na frente quebra a cara e precisa reescrever boa parte do sistema. Outro ponto importante pra quem for começar a usar o NoSQL é testar e muito bem a escalabilidade dos servidores, o que fazer em caso de flahas, como fazer e restaurar um backup.. se não aprender a fazer isso antes de começar a usar.. quando for usar vai ser um desespero grande.

Mas o artigo é realmente muito bom.

Enfim, NoSQL serve pra guardar logs :D

Diego Hellas
Diego Hellas

Não exatamente.. normalmente quando uma aplicação é construída em cima de um NoSQL, é usado um banco relacional para guardar os logs.. rsrs.. é muito mais simples e fácil rastrear as coisas em banco relacionais do que em NoSQL.

geraldo
geraldo

Bom, para aqueles que acham bobagem, a GLOBO.COM está utilizando este tipo de banco de dados citados na matéria acima. E também as novidades de streamSQL também estão sendo difundidas,

Diego Hellas
Diego Hellas

A globo.com trocou a um pouco mais de um ano toda a infra de DB deles para MySQL(http://www.oracle.com/us/corporate/customers/customersearch/globo-com-mysql-ss-406091-ptb.html), mas com toda a certeza que eles utilizam algo com o NoSQL, é uma estrutura gigantesca.

Márcio Krüger
Márcio Krüger

Belo artigo, desconhecia este conceito.

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize