SlideShare una empresa de Scribd logo
1 de 8
Descargar para leer sin conexión
Universidade de Vila Velha – UVV
                   Curso de Ciência da Computação – Turma CC4M
                                 Banco de Dados II




                 Material para apresentação de seminário – 23/11/2012
                                        NOSQL
                  Apresentação: http://pt.scribd.com/doc/114144652/




Grupo: Iago Binow, Lorran Pegoretti, Luiz Marcon e Pedro Malta
Professor: Sandro Tonini




                                      Vila Velha
                                         2012
“NoSQL is not about any one feature of any of the projects. NoSQL is not about
scaling, NoSQL is not about performance, NoSQL is not about hating SQL, NoSQL
is not about ease of use, NoSQL is not about sharding, NoSQL is not about
throughput, NoSQL is not about speed, NoSQL is not about dropping ACID, NoSQL
is not about Eventual Consistency, NoSQL is not about CAP, NoSQL is not about
open standards, NoSQL is not about Open Source and NoSQL is most likely not
about whatever else you want NoSQL to be about. NoSQL is about choice.”

                                                                        Jan Lehnardt, CouchDB
Histórico

O termo NoSQL foi usado pela primeira vez em 1998 como o nome de um banco de dados
relacional de código aberto que não possuía um interface SQL. Seu autor, Carlo Strozzi, alega
que o movimento NoSQL “é completamente distinto do modelo relacional e portanto deveria ser
mais apropriadamente chamado “NoREL” ou algo que produzisse o mesmo efeito”. Porém o
termo só voltou a ser assunto em 2009 por um funcionário do Rackspace, Eric Evans, quando
Johan Oskarsson da Last.fm queria organizar um evento para discutir bancos de dados open
source distribuídos.

NoSQL são diferentes sistemas de armazenamento que vieram para suprir necessidades que
os bancos de dados tradicionais(Relacionais) são ineficazes. Muitas dessas bases apresentam
características muito interessantes como alta performance, escalabilidade, replicação, suporte
à dados estruturados e sub colunas.

O NoSQL surgiu da necessidade de uma performance superior e de uma alta escalabilidade.
Os atuais bancos de dados relacionais são muito restritos a isso, sendo necessário a
distribuição vertical de servidores, ou seja, quanto mais dados, mais memória e mais disco um
servidor precisa. O NoSQL tem uma grande facilidade na distribuição horizontal, ou seja, mais
dados, mais servidores, não necessariamente de alta performance. Um grande utilizador desse
conceito é o Google, que usa computadores de pequeno e médio porte, para a distribuição dos
dados, essa forma de utilização e muito mais eficiente e econômica. Além disso, os bancos de
dados NoSQL são muito tolerantes a erros.

No caso dos bancos NoSQL toda a informação necessária estará agrupada no mesmo registro,
ou seja, em vez de você ter o relacionamento entre várias tabelas para formar uma informação
ela estará em sua totalidade no mesmo registro.[1]


Descrição Wikipédia: NoSQL é um termo genérico para uma classe definida de banco de
dados não-relacionais que rompe uma longa história de banco de dados relacionais com
propriedades ACID. Outros termos equivalentes para esta categoria de bancos
é NF², N1NF (non first normal form), nested relational, dimensional, multivalue, free-
form, schemaless, document database e MRNN (Modelo Relacional Não Normalizado).

(Uma tabela está na 1FN, se e somente se, não possuir atributos multivalorados. Em outras
palavras podemos definir que a primeira forma normal não admite repetições ou campos que
tenha mais que um valor.)



Características

- Escalabilidade Horizontal (scale out)
Significa adicionar mais nós ao sistema, tais como adicionar um novo servidor e um sistema de
software que permita a distribuição do trabalho entre múltiplas máquinas. [2]

- Replicação – Escalar por duplicação de informações
Consiste na copia das informações em mais de um banco para aumentar a capacidade de
recuperar estas informações. Podem ser divididas em duas “arquiteturas” principais:
Master-Slave: Cada escrita em banco resulta em X escritas onde X é o número de
    slaves. Neste caso um banco “Master” propaga cada write para os bancos “slaves”. Isto
    aumenta a velocidade de leitura, mas não melhora a capacidade de escrita.
            Multi-Master: Aumenta-se o número de Masters no sistema e assim aumenta a
    capacidade de escrita.

    - Schema-free
    Um dos fatores que contribuem para um banco de dados NoSQL escalar é por causa da
    ausência de um schema (schema free). Todos os novos bancos tem em comum que eles são
    key-value stores, ou seja, salvam como o nome sugere, um conjunto de entradas formadas por
    uma chave associada a um valor e o valor poderia ser de qualquer tipo, um binário ou string
    que está sendo salvo de forma desnormalizada (schema-free).

    - Clusterização
    Basicamente compreende um banco de dados armazenado e gerenciado por mais de um
    servidor, provê uma alta disponibilidade e um alto desempenho do sistema. Assim, a
    organização se beneficia diminuindo o tempo de inoperabilidade do banco de dados. Esse
    processo vem como uma solução para reduzir gastos com estrutura de hardware. [4]

    - Mapreduce
    É um algoritmo, patenteado pela Google para gerenciamento em larga escala. [3]
    Existem duas fases:
            Map: O nó principal recebe os dados, divide e partes menores e as envia aos outros
    nós para serem processados. Ao final do processamento estes nós devolvem o resultado ao nó
    principal.
            Reduce: O nó principal combina as respostas obtidas pelos outros nós gerando o
    resultado final do processamento.

    - Sharding
    Consiste em dividir os dados horizontalmente, ou seja, quebrar as tabelas, diminuindo o seu
    número de linhas e separando-as em ambientes diferentes. Neste ponto todos os dados de
    uma partição não devem conter referências aos dados de outras partições, sendo que os
    dados em comum deverão ser replicados entre as bases. [3]



    Classificação

    Key/Value Store
    Esse é o tipo de banco de dados NoSQL mais simples o conceito dele é uma chave e um valor
    para essa chave, mas ele é o que aguenta mais carga de dados. Esses tipos de bancos de
    dados são o que tem a maior escalabilidade. [1]



   Amazon SimpleDB
   Azure Table Storage
   Berkeley DB
   Chordless
   Dynomite
   GenieDB: GenieDB is designed to be a pragmatic solution to a widespread class of data
    storage problems, with a high-performance native API alongside compatability with MySQL.
   GT.M / M.DB
   HamsterDB
   Hibari: Hibari is a production-ready, distributed, key-value, big data store. Hibari uses chain
    replication for strong consistency, high-availability, and durability. Hibari has excellent
    performance especially for read and large value operations.
   KAI
   KaTree
   Kumofs
   LightCloud
   Membase
   Memcachedb
   Mnesia
   NorthScale
   Orient Key/Value Server
   Pincaster
   PNUTS/Sherpa
   Project Voldemort: LinkedIn open source implementation of Amazon Dynamo key-value store
   Redis
   Riak: Dynamo-inspired key/value store that scales predictably and easily.
   Scalaris
   ScalienDB / Scalien Keyspace a distributed, consistent key-value store
   Tokyo Cabinet [5]




    Wide Columns Store
    Fortemente inspirados pelo BigTable do google eles suportam várias linhas e colunas, além
    disso ele permite sub colunas. [1]


   BigTable
   Cassandra: a highly scalable second-generation distributed database, bringing together
    Dynamo’s fully distributed design and Bigtable’s ColumnFamily-based data model.
   HBase
   Hypertable [5]



    Document Store
    Baseado em documentos XML ou JSON, podem ser localizados pelo seu id único ou por
    qualquer registro que tenha no documento. [1]
   Colayer
   CouchDB
   FleetDB
   Jackrabbit
   Lotus Notes
   MongoDB
   OrientDB
   Raven DB
   ThruDB
   Terrastore [5]


    Graph Store
    Com uma complexibilidade maior esses bancos de dados guardam objetos e não registros
    como os outros tipos de NoSQL. A busca destes itens são feitas pela navegação destes
    objetos.
   AllegroGraph
   Bigdata
   Core Data
   DEX: a high-performance graph database written in Java and C++. Its main characteristic is its
    performance storage and retrieval for large graphs, in the order of billions of nodes, edges and
    attributes, implemented with specialized structures.
   Filament
   FlockDB
   HyperGraphDB
   InfiniteGraph
   InfoGrid
   Neo4j
   OpenLink Virtuoso
   Sones
   VertexDB
   Trinity: a graph database and computation platform over distributed memory cloud. As a
    database, it provides features such as highly concurrent query processing, transaction,
    consistency control. As a computation platform, it provides synchronous and asynchronous
    batch-mode computations on large scale graphs.[5]


    Exemplo
    Facebook – Cassandra, 2008

    Como identificamos, o NoSQL não é uma negativa ao SQL tradicional, apesar do que o
    acrônimo aparenta. NoSQL procura suprir necessidades em que o SQL puro é engessado ou
    as regras de consistência "ACID" (Atomicidade, Consistência, Isolamento e Durabilidade)
podem ser suprimidas ou são desnecessárias, ou então podem ser negligenciadas em busca
de maior escalabilidade.

Nesse cenário um ator de destaque é o Facebook. Não há como falar de necessidade de
escalabilidade sem citar essa máquina devoradora de Bytes, segundo o conceituado site
GIGAOM no artigo "Facebook shares some secrets on making MySQL scale" o Facebook
ingere mais de 500 terabytes de novas informações por dia. Há de se esperar que exista uma
solução inovadora e fantástica por trás disso tudo, na verdade não tanto, o Facebook utiliza
nas suas partes principais o bom e velho MySQL, bem, o MySQL tunado do Facebook, mas
ainda assim MySQL.

Porém para certos casos e atividades específicas o Facebook implementa tecnologia NoSQL,
inclusive já liberou opensource o Cassandra, hoje conduzido pela fundação Apache. Segundo
Avinash Lakshman, um dos incubadores do Cassandra e funcionário do Facebook, o
Cassandra foi desenvolvido para solucionar a busca no bate-papo do Facebook, o bate-papo
do Facebook foi um dos produtos mais complexos a ser desenvolvido, ele integra SMS, e-mail,
inbox e o chat online, um parte que recebe uma massiva quantidade de dados. A estrutura do
Cassandra é totalmente avessa a primeira forma normal, uma coluna pode ter várias colunas.
Veja como a estrutura é perfeita para um sistema de mensagens: uma coluna tem um nome,
um valor(que podem ser várias colunas) e um "timestamp". Hoje em dia o sistema de
mensagens funciona em cima de outra tecnologia NoSQL, o HBase, mas de funcionamento
parecido.

Outra parte importante em que o NoSQl aparece é na análise dos dados, ou na gerenciamento
do MetaDados do Facebook, essa parte é levada pela integração do HBase com o Hive, dados
mais antigos são transferidos do MySQL para o HBase, para formação de um Data Warehouse
e o Hive faz a análise desses dados, é possível inclusive fazer consultas SQL pelo Hive, em
cima do HBase, que não tem esse suporte.

Esses casos tendem a aumentar pois quando o Facebook construiu seu ambiente MySQL não
haviam tecnologias NoSQL, portanto há em sua base dados que não são estruturados ou são
semiestruturados. A medida que as tecnologias NoSQL amadurecem haverão mais
implementações em aplicações do mundo real. [7] [8] [9]



Os maiores mitos sobre NoSQL
NoSQL é escalável
Uma das grandes promessas dos bancos NOSQL consiste em dizer que eles são mais
escaláveis que os bancos de dados relacionais. O problema com esta mensagem que é
vendida por algumas empresas é que ela não é inteiramente verdade. Dizer que seu sistema
escala sozinho é vender um sonho. Ele pode até ser mais fácil de escalar se comparado a
outras soluções mas ainda sim exigira algum esforço para escalar.

Não precisamos de DBAs
No mundo dos bancos relacionais a figura do DBA sempre está presente. Com sistemas que
tem particularidades para cada vendor os DBAs ficam a cargo de instalar, configurar e manter
cada banco de dados em suas particularidades. Muita gente diz que quando se trabalha com
NoSQL não precisamos de DBAs. Acredito que talvez não no sentido tradicional, mas ainda
vamos precisar de alguém responsável por lidar com o banco e com o acesso aos dados. Esta
função pode vir a se tornar parte do trabalho de um desenvolvedor ou se tornar a função full
time de alguém no seu time que pode ser até um DBA com conhecimentos em NoSQL. Em
aplicações reais em produção muito provavelmente será necessário misturar bancos
relacionais e não relacionais, possuir alguém que navegue facilmente nos dois mundos em seu
time é uma grande vantagem.
NoSQL é mais econômico
Meia verdade. Muitos vendors de NoSQL afirmam que suas soluções vão baratear o custo dos
seus clientes. Em parte sim, em algumas situações o custo em usar um banco de dados
relacional pode ser proibitivo devido à escala ou a licenças envolvidas. Existem muitos casos
entretanto que uma solução relacional atende perfeitamente todas as necessidades do cliente
e ainda sim pode ser considerada barata. Bancos de dados open source como MySQL e
PosgreSQL são usados sem problemas por um grande número de aplicações com sucesso.

Conclusão
Se você está começando agora com o NoSQL, cuidado para não cair em armadilhas. Sempre
interaja com a comunidade, converse com outros desenvolvedores sobre suas experiências
reais com NoSQL e não se esqueça de deixar suas dúvidas nos comentários. Se você já
possui alguma experiência, quais outros mitos você vê com relação ao NoSQL ? [6]


Referencias:
    [1] “Introdução ao NoSQL.”
       http://www.nosqlbr.com.br

      [2] Edmar Ferreira, “Escolhendo entre escalabilidade horizontal e escalabilidade
       vertical”.
       http://escalabilidade.com/2010/09/21/escolhendo-entre-escalabilidade-horizontal-e-
       escalabilidade-vertical/

      [3] Edmar Ferreira, “Introdução ao NoSQL parte II”
       http://escalabilidade.com/2010/04/06/introducao-ao-nosql-parte-ii/

      [4] InfoWester “Cluster: Principais Conceitos”,
       http://www.infowester.com/cluster.php

      [5] “NoSQL”
       http://nosql.mypopescu.com/kb/nosql

      [6] “Os Maiores mitos sobre NoSQL”
       http://escalabilidade.com/2010/10/08/os-maiores-mitos-sobre-nosql/

      [7] “Inside Facebook Messages' Application Server”
        https://www.facebook.com/note.php?note_id=10150162742108920



      [8] “Hive – The next generation data warehouse”
       http://blogs.impetus.com/big_data/hadoop_ecosystem/Hive.do

      [9] “Cassandra – A structured storage system on a P2P Network
       https://www.facebook.com/note.php?note_id=24413138919

Más contenido relacionado

La actualidad más candente

NoSQL x SQL: Bancos de Dados em Nuvens Computacionais
NoSQL x SQL: Bancos de Dados em Nuvens ComputacionaisNoSQL x SQL: Bancos de Dados em Nuvens Computacionais
NoSQL x SQL: Bancos de Dados em Nuvens ComputacionaisCarlo Pires
 
Bancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBBancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBPaulo Bischof
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBRodrigo Hjort
 
NoSQL Familia de Colunas Apresentação
NoSQL Familia de Colunas ApresentaçãoNoSQL Familia de Colunas Apresentação
NoSQL Familia de Colunas ApresentaçãoAugusto Giles
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionaisalexculpado
 
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosBanco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosJoão Helis Bernardo
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLOrlando Vitali
 
Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.
Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.
Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.Ambiente Livre
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaGlaucio Scheibel
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Christiano Anderson
 
Conhecendo Apache Cassandra @Movile
Conhecendo Apache Cassandra  @MovileConhecendo Apache Cassandra  @Movile
Conhecendo Apache Cassandra @MovileEiti Kimura
 
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
DBA Brasil 2.0   NOSql Apache Cassandra para DBAsDBA Brasil 2.0   NOSql Apache Cassandra para DBAs
DBA Brasil 2.0 NOSql Apache Cassandra para DBAsRonaldo Leite Martins
 

La actualidad más candente (20)

Banco de Dados - NoSQL
Banco de Dados - NoSQLBanco de Dados - NoSQL
Banco de Dados - NoSQL
 
NoSQL x SQL: Bancos de Dados em Nuvens Computacionais
NoSQL x SQL: Bancos de Dados em Nuvens ComputacionaisNoSQL x SQL: Bancos de Dados em Nuvens Computacionais
NoSQL x SQL: Bancos de Dados em Nuvens Computacionais
 
NoSQL
NoSQLNoSQL
NoSQL
 
Bancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBBancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDB
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
O NoSQL e o Relacional: Uma Análise
O NoSQL e o Relacional: Uma AnáliseO NoSQL e o Relacional: Uma Análise
O NoSQL e o Relacional: Uma Análise
 
NoSQL Familia de Colunas Apresentação
NoSQL Familia de Colunas ApresentaçãoNoSQL Familia de Colunas Apresentação
NoSQL Familia de Colunas Apresentação
 
O NoSQL e o Relacional: Uma Análise
O NoSQL e o Relacional: Uma AnáliseO NoSQL e o Relacional: Uma Análise
O NoSQL e o Relacional: Uma Análise
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
 
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosBanco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
 
Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.
Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.
Escalabilidade Linear com o Banco de Dados NoSQL Apache Cassandra.
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência Poliglota
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
 
Nosql
NosqlNosql
Nosql
 
Cassandra NoSQL JUG Vale 2012
Cassandra NoSQL JUG Vale 2012Cassandra NoSQL JUG Vale 2012
Cassandra NoSQL JUG Vale 2012
 
Conhecendo Apache Cassandra @Movile
Conhecendo Apache Cassandra  @MovileConhecendo Apache Cassandra  @Movile
Conhecendo Apache Cassandra @Movile
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
DBA Brasil 2.0   NOSql Apache Cassandra para DBAsDBA Brasil 2.0   NOSql Apache Cassandra para DBAs
DBA Brasil 2.0 NOSql Apache Cassandra para DBAs
 

Similar a Material Seminário NoSQL

Similar a Material Seminário NoSQL (20)

NoSQL & SQL
NoSQL & SQLNoSQL & SQL
NoSQL & SQL
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
xxx no sequel
xxx no sequelxxx no sequel
xxx no sequel
 
Apostila NoSql.pdf
Apostila NoSql.pdfApostila NoSql.pdf
Apostila NoSql.pdf
 
No sql std
No sql stdNo sql std
No sql std
 
Modelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDSModelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDS
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Cassandra com NOSQL parte 2
Cassandra com NOSQL parte 2Cassandra com NOSQL parte 2
Cassandra com NOSQL parte 2
 
Pesquisa sobre no sql
Pesquisa sobre no sqlPesquisa sobre no sql
Pesquisa sobre no sql
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura Oracle
 
Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01
 
My sql apresentação
My sql apresentaçãoMy sql apresentação
My sql apresentação
 
Cluster ha com banco de dados
Cluster ha com banco de dadosCluster ha com banco de dados
Cluster ha com banco de dados
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Trabalho de sgbd
Trabalho de sgbdTrabalho de sgbd
Trabalho de sgbd
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Artigo couchdb
Artigo couchdbArtigo couchdb
Artigo couchdb
 

Material Seminário NoSQL

  • 1. Universidade de Vila Velha – UVV Curso de Ciência da Computação – Turma CC4M Banco de Dados II Material para apresentação de seminário – 23/11/2012 NOSQL Apresentação: http://pt.scribd.com/doc/114144652/ Grupo: Iago Binow, Lorran Pegoretti, Luiz Marcon e Pedro Malta Professor: Sandro Tonini Vila Velha 2012
  • 2. “NoSQL is not about any one feature of any of the projects. NoSQL is not about scaling, NoSQL is not about performance, NoSQL is not about hating SQL, NoSQL is not about ease of use, NoSQL is not about sharding, NoSQL is not about throughput, NoSQL is not about speed, NoSQL is not about dropping ACID, NoSQL is not about Eventual Consistency, NoSQL is not about CAP, NoSQL is not about open standards, NoSQL is not about Open Source and NoSQL is most likely not about whatever else you want NoSQL to be about. NoSQL is about choice.” Jan Lehnardt, CouchDB
  • 3. Histórico O termo NoSQL foi usado pela primeira vez em 1998 como o nome de um banco de dados relacional de código aberto que não possuía um interface SQL. Seu autor, Carlo Strozzi, alega que o movimento NoSQL “é completamente distinto do modelo relacional e portanto deveria ser mais apropriadamente chamado “NoREL” ou algo que produzisse o mesmo efeito”. Porém o termo só voltou a ser assunto em 2009 por um funcionário do Rackspace, Eric Evans, quando Johan Oskarsson da Last.fm queria organizar um evento para discutir bancos de dados open source distribuídos. NoSQL são diferentes sistemas de armazenamento que vieram para suprir necessidades que os bancos de dados tradicionais(Relacionais) são ineficazes. Muitas dessas bases apresentam características muito interessantes como alta performance, escalabilidade, replicação, suporte à dados estruturados e sub colunas. O NoSQL surgiu da necessidade de uma performance superior e de uma alta escalabilidade. Os atuais bancos de dados relacionais são muito restritos a isso, sendo necessário a distribuição vertical de servidores, ou seja, quanto mais dados, mais memória e mais disco um servidor precisa. O NoSQL tem uma grande facilidade na distribuição horizontal, ou seja, mais dados, mais servidores, não necessariamente de alta performance. Um grande utilizador desse conceito é o Google, que usa computadores de pequeno e médio porte, para a distribuição dos dados, essa forma de utilização e muito mais eficiente e econômica. Além disso, os bancos de dados NoSQL são muito tolerantes a erros. No caso dos bancos NoSQL toda a informação necessária estará agrupada no mesmo registro, ou seja, em vez de você ter o relacionamento entre várias tabelas para formar uma informação ela estará em sua totalidade no mesmo registro.[1] Descrição Wikipédia: NoSQL é um termo genérico para uma classe definida de banco de dados não-relacionais que rompe uma longa história de banco de dados relacionais com propriedades ACID. Outros termos equivalentes para esta categoria de bancos é NF², N1NF (non first normal form), nested relational, dimensional, multivalue, free- form, schemaless, document database e MRNN (Modelo Relacional Não Normalizado). (Uma tabela está na 1FN, se e somente se, não possuir atributos multivalorados. Em outras palavras podemos definir que a primeira forma normal não admite repetições ou campos que tenha mais que um valor.) Características - Escalabilidade Horizontal (scale out) Significa adicionar mais nós ao sistema, tais como adicionar um novo servidor e um sistema de software que permita a distribuição do trabalho entre múltiplas máquinas. [2] - Replicação – Escalar por duplicação de informações Consiste na copia das informações em mais de um banco para aumentar a capacidade de recuperar estas informações. Podem ser divididas em duas “arquiteturas” principais:
  • 4. Master-Slave: Cada escrita em banco resulta em X escritas onde X é o número de slaves. Neste caso um banco “Master” propaga cada write para os bancos “slaves”. Isto aumenta a velocidade de leitura, mas não melhora a capacidade de escrita. Multi-Master: Aumenta-se o número de Masters no sistema e assim aumenta a capacidade de escrita. - Schema-free Um dos fatores que contribuem para um banco de dados NoSQL escalar é por causa da ausência de um schema (schema free). Todos os novos bancos tem em comum que eles são key-value stores, ou seja, salvam como o nome sugere, um conjunto de entradas formadas por uma chave associada a um valor e o valor poderia ser de qualquer tipo, um binário ou string que está sendo salvo de forma desnormalizada (schema-free). - Clusterização Basicamente compreende um banco de dados armazenado e gerenciado por mais de um servidor, provê uma alta disponibilidade e um alto desempenho do sistema. Assim, a organização se beneficia diminuindo o tempo de inoperabilidade do banco de dados. Esse processo vem como uma solução para reduzir gastos com estrutura de hardware. [4] - Mapreduce É um algoritmo, patenteado pela Google para gerenciamento em larga escala. [3] Existem duas fases: Map: O nó principal recebe os dados, divide e partes menores e as envia aos outros nós para serem processados. Ao final do processamento estes nós devolvem o resultado ao nó principal. Reduce: O nó principal combina as respostas obtidas pelos outros nós gerando o resultado final do processamento. - Sharding Consiste em dividir os dados horizontalmente, ou seja, quebrar as tabelas, diminuindo o seu número de linhas e separando-as em ambientes diferentes. Neste ponto todos os dados de uma partição não devem conter referências aos dados de outras partições, sendo que os dados em comum deverão ser replicados entre as bases. [3] Classificação Key/Value Store Esse é o tipo de banco de dados NoSQL mais simples o conceito dele é uma chave e um valor para essa chave, mas ele é o que aguenta mais carga de dados. Esses tipos de bancos de dados são o que tem a maior escalabilidade. [1]  Amazon SimpleDB  Azure Table Storage  Berkeley DB  Chordless  Dynomite  GenieDB: GenieDB is designed to be a pragmatic solution to a widespread class of data storage problems, with a high-performance native API alongside compatability with MySQL.
  • 5. GT.M / M.DB  HamsterDB  Hibari: Hibari is a production-ready, distributed, key-value, big data store. Hibari uses chain replication for strong consistency, high-availability, and durability. Hibari has excellent performance especially for read and large value operations.  KAI  KaTree  Kumofs  LightCloud  Membase  Memcachedb  Mnesia  NorthScale  Orient Key/Value Server  Pincaster  PNUTS/Sherpa  Project Voldemort: LinkedIn open source implementation of Amazon Dynamo key-value store  Redis  Riak: Dynamo-inspired key/value store that scales predictably and easily.  Scalaris  ScalienDB / Scalien Keyspace a distributed, consistent key-value store  Tokyo Cabinet [5] Wide Columns Store Fortemente inspirados pelo BigTable do google eles suportam várias linhas e colunas, além disso ele permite sub colunas. [1]  BigTable  Cassandra: a highly scalable second-generation distributed database, bringing together Dynamo’s fully distributed design and Bigtable’s ColumnFamily-based data model.  HBase  Hypertable [5] Document Store Baseado em documentos XML ou JSON, podem ser localizados pelo seu id único ou por qualquer registro que tenha no documento. [1]  Colayer
  • 6. CouchDB  FleetDB  Jackrabbit  Lotus Notes  MongoDB  OrientDB  Raven DB  ThruDB  Terrastore [5] Graph Store Com uma complexibilidade maior esses bancos de dados guardam objetos e não registros como os outros tipos de NoSQL. A busca destes itens são feitas pela navegação destes objetos.  AllegroGraph  Bigdata  Core Data  DEX: a high-performance graph database written in Java and C++. Its main characteristic is its performance storage and retrieval for large graphs, in the order of billions of nodes, edges and attributes, implemented with specialized structures.  Filament  FlockDB  HyperGraphDB  InfiniteGraph  InfoGrid  Neo4j  OpenLink Virtuoso  Sones  VertexDB  Trinity: a graph database and computation platform over distributed memory cloud. As a database, it provides features such as highly concurrent query processing, transaction, consistency control. As a computation platform, it provides synchronous and asynchronous batch-mode computations on large scale graphs.[5] Exemplo Facebook – Cassandra, 2008 Como identificamos, o NoSQL não é uma negativa ao SQL tradicional, apesar do que o acrônimo aparenta. NoSQL procura suprir necessidades em que o SQL puro é engessado ou as regras de consistência "ACID" (Atomicidade, Consistência, Isolamento e Durabilidade)
  • 7. podem ser suprimidas ou são desnecessárias, ou então podem ser negligenciadas em busca de maior escalabilidade. Nesse cenário um ator de destaque é o Facebook. Não há como falar de necessidade de escalabilidade sem citar essa máquina devoradora de Bytes, segundo o conceituado site GIGAOM no artigo "Facebook shares some secrets on making MySQL scale" o Facebook ingere mais de 500 terabytes de novas informações por dia. Há de se esperar que exista uma solução inovadora e fantástica por trás disso tudo, na verdade não tanto, o Facebook utiliza nas suas partes principais o bom e velho MySQL, bem, o MySQL tunado do Facebook, mas ainda assim MySQL. Porém para certos casos e atividades específicas o Facebook implementa tecnologia NoSQL, inclusive já liberou opensource o Cassandra, hoje conduzido pela fundação Apache. Segundo Avinash Lakshman, um dos incubadores do Cassandra e funcionário do Facebook, o Cassandra foi desenvolvido para solucionar a busca no bate-papo do Facebook, o bate-papo do Facebook foi um dos produtos mais complexos a ser desenvolvido, ele integra SMS, e-mail, inbox e o chat online, um parte que recebe uma massiva quantidade de dados. A estrutura do Cassandra é totalmente avessa a primeira forma normal, uma coluna pode ter várias colunas. Veja como a estrutura é perfeita para um sistema de mensagens: uma coluna tem um nome, um valor(que podem ser várias colunas) e um "timestamp". Hoje em dia o sistema de mensagens funciona em cima de outra tecnologia NoSQL, o HBase, mas de funcionamento parecido. Outra parte importante em que o NoSQl aparece é na análise dos dados, ou na gerenciamento do MetaDados do Facebook, essa parte é levada pela integração do HBase com o Hive, dados mais antigos são transferidos do MySQL para o HBase, para formação de um Data Warehouse e o Hive faz a análise desses dados, é possível inclusive fazer consultas SQL pelo Hive, em cima do HBase, que não tem esse suporte. Esses casos tendem a aumentar pois quando o Facebook construiu seu ambiente MySQL não haviam tecnologias NoSQL, portanto há em sua base dados que não são estruturados ou são semiestruturados. A medida que as tecnologias NoSQL amadurecem haverão mais implementações em aplicações do mundo real. [7] [8] [9] Os maiores mitos sobre NoSQL NoSQL é escalável Uma das grandes promessas dos bancos NOSQL consiste em dizer que eles são mais escaláveis que os bancos de dados relacionais. O problema com esta mensagem que é vendida por algumas empresas é que ela não é inteiramente verdade. Dizer que seu sistema escala sozinho é vender um sonho. Ele pode até ser mais fácil de escalar se comparado a outras soluções mas ainda sim exigira algum esforço para escalar. Não precisamos de DBAs No mundo dos bancos relacionais a figura do DBA sempre está presente. Com sistemas que tem particularidades para cada vendor os DBAs ficam a cargo de instalar, configurar e manter cada banco de dados em suas particularidades. Muita gente diz que quando se trabalha com NoSQL não precisamos de DBAs. Acredito que talvez não no sentido tradicional, mas ainda vamos precisar de alguém responsável por lidar com o banco e com o acesso aos dados. Esta função pode vir a se tornar parte do trabalho de um desenvolvedor ou se tornar a função full time de alguém no seu time que pode ser até um DBA com conhecimentos em NoSQL. Em aplicações reais em produção muito provavelmente será necessário misturar bancos relacionais e não relacionais, possuir alguém que navegue facilmente nos dois mundos em seu time é uma grande vantagem.
  • 8. NoSQL é mais econômico Meia verdade. Muitos vendors de NoSQL afirmam que suas soluções vão baratear o custo dos seus clientes. Em parte sim, em algumas situações o custo em usar um banco de dados relacional pode ser proibitivo devido à escala ou a licenças envolvidas. Existem muitos casos entretanto que uma solução relacional atende perfeitamente todas as necessidades do cliente e ainda sim pode ser considerada barata. Bancos de dados open source como MySQL e PosgreSQL são usados sem problemas por um grande número de aplicações com sucesso. Conclusão Se você está começando agora com o NoSQL, cuidado para não cair em armadilhas. Sempre interaja com a comunidade, converse com outros desenvolvedores sobre suas experiências reais com NoSQL e não se esqueça de deixar suas dúvidas nos comentários. Se você já possui alguma experiência, quais outros mitos você vê com relação ao NoSQL ? [6] Referencias:  [1] “Introdução ao NoSQL.” http://www.nosqlbr.com.br  [2] Edmar Ferreira, “Escolhendo entre escalabilidade horizontal e escalabilidade vertical”. http://escalabilidade.com/2010/09/21/escolhendo-entre-escalabilidade-horizontal-e- escalabilidade-vertical/  [3] Edmar Ferreira, “Introdução ao NoSQL parte II” http://escalabilidade.com/2010/04/06/introducao-ao-nosql-parte-ii/  [4] InfoWester “Cluster: Principais Conceitos”, http://www.infowester.com/cluster.php  [5] “NoSQL” http://nosql.mypopescu.com/kb/nosql  [6] “Os Maiores mitos sobre NoSQL” http://escalabilidade.com/2010/10/08/os-maiores-mitos-sobre-nosql/  [7] “Inside Facebook Messages' Application Server” https://www.facebook.com/note.php?note_id=10150162742108920  [8] “Hive – The next generation data warehouse” http://blogs.impetus.com/big_data/hadoop_ecosystem/Hive.do  [9] “Cassandra – A structured storage system on a P2P Network https://www.facebook.com/note.php?note_id=24413138919