quarta-feira, 12 de junho de 2013

Empresas que utilizam o MongoDB



Lista de algumas empresas que utilizam o MongoDB em suas aplicações


- Globo.com







- Github








- Bit.ly





-Foursquare






- Sailthru




Diferenças sintáticas entre Mysql e MongoDB



Principais diferenças de sintaxe entre os dois bancos :











Map Reduce no MongoDB



Map Reduce

É um modelo de programação utilizado por um grande processamento de dados com algoritimo distribuido paralelo em um cluster realizando a ordenação dos dados como por exemplo a contagem do numero de alunos de uma determinada fila . O map reduce pode ser comparado a uma procedure e utiliza-se de javascript para criar essas funções , além de ser bastante flexível

Exemplo de map/reduce para contar tags repetidas



Operações básicas com o Shell MongoDB



A seguir segue vários print´s de tela com operações básicas realizadas no Mongodb

1- Para visualizar comandos no Mongo basta utilizar o comando help no shell 



2 - Para visualizar a lista de bancos já criados utilize o comando > show dbs ; para utilizar um banco de dados utilize o comando > use nome_banco , para realizar inserção de dados utilize o comando > db.nome_banco.insert({})





3 - Para selecionar todos os dados de uma coleção utilize o seguinte comando 

>db.nome_banco.find()




4- Para realizar uma atualização em uma coleção utilize o seguinte comando 

> db.nome_banco.update({})








5- Para deletar dados em uma coleção utilize o seguinte comando 

> db.nome_banco.remove()










Vantagens de se utilizar o MongoDB

O MongoDB é um ótimo banco para trabalhar com uma grande quantidade de dados com isso escolhi alguns motivos pelos quais o Mongo é utilizado por grandes empresas que possuem uma quantidade de dados expressiva 

- Desenvolvimento Rápido
- Fácil armazenamento dos dados dos clientes com JSON flexível 
- Ótima performance 
- Alta escalabilidade

domingo, 9 de junho de 2013

Diferença de sintaxe entre o Mysql e o MongoDB

Esta imagem demonstra as principais diferenças de sintaxe entre os dois bancos de dados :



1 - colunas de dimensão agrupados são puxados
como teclas de função no mapa reduzindo o tamanho do conjunto de trabalho .
2 - medidas devem ser agregadas manualmente
3- agregações que dependem de um registro devem aguardar até a finalização 
4- funções de medidas podem usar lógica procedural 
5- Os filtros tem um mapeamento objeto relacional monitorando os registros
6-  Filtragens agregadas devem ser aplicadas ao conjunto dos resultados e não ao map/reduce
7 - crescente e decrescente



Controlando o MongoDB

Os comandos a seguir servem para iniciar , parar e reiniciar o MongoDB

Iniciando o MongoDB  :

1 -  $sudo service mongodb start

==============================================================

 Parando o MongoDB

2 - $sudo service mongodb stop

=============================================================

Resetando o MongoDB

3 - $sudo service mongodb restart


Atualizando o MongoDB no Linux

Realizando uma atualização no MongoDB

1 -  $sudo apt-get update
2 - $sudo apt-cache search mongodb
      mongodb
      mongodb-clients
      mongodb - dev
      mongodb-server

     mongodb-10gen
     mongodb18-10gen
     mongodb20-10gen

3-  Em seguida escolher a versão e realizar a instalação 

$sudo apt-get install



sábado, 8 de junho de 2013

Instalando o MongoDB no Linux

Os passos para a instalação do mongoDB são: 

1- Abrir o terminal e utilizar o comando apt-get
2  -  Utilizar o sudo-apt-get install mongodb




3- Criar duas pastas  utilizando os comandos : sudo mkdir /data
    cd /data
    sudo mkdir db
4- Alterar a permissão do usuário no acesso ao banco 
sudo chown seu_usuario_linux_db
Abra o terminal e vamos instalar o MongoDB via apt-get:
sudo apt-get install mongodb
5- Para iniciar o serviço do mongo no linux após a instalação , basta utilizar o comando mongod


Em seguida deve-se rodar o MongoDB com o comando mongod . Para iniciar o serviço deve-se abrir o cliente no terminal .

Benckmark - Pequeno comparativo entre o MongoDB e o Mysql

Realizando um pequeno comparativo de inserção de dados nos bancos MongoDB e Mysql podemos perceber uma grande diferença de performance entre os dois bancos de dados . O que dá uma vantagem ao MongoDB.


Mysql

Inserindo/lendo "title" => "Calvin and Hobbes"
Inserção
inserindo 50k
Tempo (segundos): 26.963586091995
inserindo 50k
Tempo (segundos): 35.74323797226
inserindo 50k
Tempo (segundos): 27.360780954361
inserindo 50k
Tempo (segundos): 27.239809989929
Leitura dos 200k : Tempo (segundos):0.16633296012878

=============================================================

MongoDB

inserindo 50k
Tempo (segundos): 6.9094848632812
inserindo 50k
Tempo (segundos): 9.049604177475
inserindo 50k
Tempo (segundos): 4.2792370319366
inserindo 50k
Tempo (segundos): 10.331115007401
Leitura dos 200k : Tempo (segundos): 0.14360809326172



quarta-feira, 5 de junho de 2013

Como renomear campos com MongoDB


Para o pessoal que utiliza o modelo relacional é uma coisa muito simples executar um comando como esse: ALTER TABLE ou ALTER COLUMN e outros a depender do banco utilizado. Porém com o MongoDB não possui essa facilidade apesar de ser bem fácil fazer o mesmo no MongoDB.

Uutilizaremos o modificador $rename

db.users.update( {} , { $rename : { ‘user_name’ : ‘name’ }}, true, true );

  1. {} – O conjunto vazio é porque queremos todos os registros;
  2. $rename – O modificador para o comando de atualização que neste caso: substituiu “user_name” por “name”;
  3. false – Permitir upserts caso o registro não exista;
  4. true – multi option: Significa aplicar comando para todos os registros, já que por padrão o update() atualiza apenas o primeiro registro.
Essa técnica é simples, porém não se esqueça de apagar seus índices antigos que utilizem a nomenclatura antiga e refaçam para a nova.

quinta-feira, 9 de maio de 2013

Entendendo o MongoDB


O MongoDB é um banco de dados orientado a documentos, foi escrito na linguagem C++,  sua aplicação possui código aberto, sem esquemas e de alta performance.
Formado com por documentos da sintaxe JSON que por sua vez sua modelagem pode ser estruturada em complexas hierarquias e continuar a ser indexáveis e fáceis de buscar.
Para os desenvolvedores assim como eu acostumados com os bancos de dados relacionais se assustam ao primeiro contato com o MongoDB porque até então todo conceito estudado e conhecido desaparecem totalmente.

Entendo que é sempre importante conhecer novos paradigmas e abrir a mente para novos conhecimentos, pois o banco de dados do MongoDB é bastante diferente dos bancos de dados relacionais saindo totalmente da nossa zona de conforto.
O modelo relacional é representado por tabelas separadas por linhas e colunas, as relações das tabelas são feitas através de relacionamentos onde por mais que a análise tenha sido bem feita sempre é possível inserir mais atributos.

O MongoDB é totalmente diferente pois ele permite que qualquer tipo de dados seja salvo no banco de dados independente pois não há regras de validações rígidas.

  • Desvantagem: Nesse aspecto abordado o desenvolvedor tem que prestar atenção para base, pois todos os dados são armazenados de qualquer forma sem ter um padrão especifico.

  • Vantagem: Caso haja novos atributos você pode inserir onde necessário e não como o modelo relacional onde normalmente o desenvolvedor criava uma nova coluna na tabela relacionada.

segunda-feira, 6 de maio de 2013

NoSql (Not Only Sql)

Decidimos começar o nosso estudo pelo NoSql (Not Only Sql) . Trata-se de uma classe definida de banco de dados não relacional que em sua composição inclui características de transações ACID que quer dizer (Atomicidade , Consistência , Isolamento e Durabilidade ).  O Nosql foi criado por Carlo Strozzi e o seu conhecido termo foi utilizado pela primeira vez em 1998 como um banco de dados open surce sem interface sql. Porém o seu criador achou que o banco de dados NoSql era totalmente diferente dos bancos de dados relacionais existentes e por tanto deveria ser chamado 'NoRel' ou NoSql.

MongoDB vem da palavra Humongous que em inglês significa algo grandioso .

Os bancos de dados que utilizam a estrutura Nosql não utilizam tabelas fixas  , chaves estrangeiras e Join´s . Não possuindo também a primeira forma normal 1NF.

O NoSql não veio com a proposta de substituir os bancos de dados relacionais existentes , pelo contrário o novo banco de dados veio com a proposta de suprir as necessidades de demandas e mercados onde os SGBDS Relacionais não supriam como a escalabilidade , performance , suporte a dados estruturados e sub colunas . Como os bancos de dados relacionais são muito restritos a escalabilidade e performance principalmente, o NoSql tem uma grande facilidade na distribuição horizontal , ou seja , quanto mais dados , mais servidores . Grandes empresas como o Google , Armazon , Facebook, Linkedin, Twitter, Yahoo, NYTimes entre outros utilizam bancos de dados NoSql para armazenar e gerenciar os seus dados .

Os bancos NoSql agrupam toda a informação em um mesmo registro ao invés de relacionar os dados entre várias tabelas . São subdivididos pelo se núcleo e como trabalham com os dados .

Suas subdivisões são :

WIDE COLUNMS STORE

Suportam várias linhas e colunas e permitem subcolunas

Big Table (Google)
HBase (Apache)
Hipertable
Cassandra (Facebook)

DOCUMENT STORE

Utiliza documentos em XML ou JSON , são localizados por um id único ou por qualquer registro que tenha no documento .

CouchDB (Apache)
MongoDB
Riak
RavenDB

KEY VALUE STORE

Este é o tipo de banco de dados NoSql mais simples , e possui maior escalabilidade .

Berkley DB
Tokyo Cabinet
Project Voldermort
Simple DB
MemcacheDB

GRAPH STORE

Com uma maior complexidade estes bancos de dados guardam objetos  e não registros como outros tipos de NoSql . A busca pelos itens  é realizada pela navegação  desses objetos .

Neo4J
InfoGrid
HyperGraphDB
BigData


COLUMN ORIENTED  STORE

Esses são bancos de dados relacionais que armazena dados em coluna porém possui  características NoSql. Os dados são armazenados em colunas possuindo mais escalabilidade do que os SGBD´S relacionais.

Vertica
MonetDB
LucidDB
Infobright
Ingres/Vectorwise