quinta-feira, 29 de maio de 2014

mongodb-hadoop-connector


MongoDB e Hadoop são uma combinação poderosa e pode ser usado em conjunto para fornecer análises complexas e processamento de dados armazenados no MongoDB. O guia a seguir mostra como você pode começar a trabalhar com o MongoDB Conector para Hadoop. Uma vez que você se familiarizar com o conector, você pode usá-lo para puxar seus dados MongoDB nos Jobs do Hadoop Map-Reduce, processar os dados e retornar resultados para uma coleção MongoDB.


Para iniciar, precisamos ver alguns prerequisitos básicos :

mongo_mem-monthPrimeiro uma pergunta simples a todos usuários de MongoDB: "Vocês conseguem me dizer o quanto de memória cada coleção (Collection) está consumindo?" Como já era esperado, a maioria das respostas será "Não" e foi por isso que a equipe de engenharia da Wish, desenvolveu o MongoMem que permite aos desenvolvedores do MongoDB localizar com precisão as coleções que necessitam uma otimização de memória em caráter de urgência em vez de ficar procurando os problemas baseados apenas na intuição. De acordo com a visão da equipe da Wish, a necessidade do MongoMem era clara.



"Antigamente usávamos muito mais memoria do que realmente deveria usar, estávamos correndo as cegas para decidir onde deveria ser otimizado. Depois de várias otimizações frustradas, as quais não fizeram diferença alguma, nós decidimos que realmente necessitávamos de melhores informações e assim o MongoMem nasceu." 


Uma visão geral da equipe da Wish entra em detalhes sobre como funciona o MongoMem onde chamadas mincore e o comando collStats fazem a maioria do trabalho, o que você pode fazer com ele e até mesmo detalhes de alguns dos planos para o futuro da MongoMem. No geral, porém, é uma pequena ferramenta bastante simples:

Para cada coleção, temos:

  • Número de MB na memória

  • Número de MB no total

  • Percentagem da coleção que está na memória


Você pode encontrar MongoMem no GitHub (com as instruções de uso), então se você está procurando algumas dica sobre como evitar que MongoDB  exagere na memória, isso pode ser uma ferramenta muito útil para você.

Knee Curve_2NoSQL,  nos últimos anos passou de um simples zum zum zum para uma realidade atual.


Portanto, como, onde e quando devemos utiliza-lo é a grande questão para muitos gestores que ainda não conseguiram assimilar a nova tendência.


Como profundo conhecedor de ambos (NoSQL e RDBMS) irei listar abaixo um resumo de melhores práticas onde cada tipo será melhor utilizado.





python-logoPython é uma linguagem de programação de alto nível, interpretada, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte. Atualmente possui um modelo de desenvolvimento comunitário, aberto e gerenciado pela organização sem fins lucrativos Python Software Foundation. Apesar de várias partes da linguagem possuírem padrões e especificações formais, a linguagem como um todo não é formalmente especificada. O padrão de fato é a implementação CPython.


A seguir você vai aprender como instalar o Python e ativar o suporte para idioma no MongoDB .

Hoje existem muitas ferramentas que permitem gerenciar o MongoDB. Pessoalmente  ainda faço parte da velha guarda que prefere administrar via linha de comando. Uma delas é o MongoVUE que é na primeira análise é uma aplicação de desktop para windows muito fácil de usar. Há uma versão paga que custa algo em torno de US$ 35 e uma versão gratuita. Como não poderia ser diferente, a versão gratuita é limitada em matéria de recursos, porem para o nosso propósito é mais do que suficiente. Vamos em frente e faça o download aqui Observação: Durante o processo de instalação certifique-se de permitir a exceção no Firewall do Windows. Após instalar, ao executar você verá o painel de conexões disponíveis mongodb5

quinta-feira, 22 de maio de 2014

Sharding


Sharding é o processo de armazenamento de registros de dados em várias máquinas e é a abordagem do MongoDB para atender as demandas de crescimento de dados. À medida que o tamanho dos dados aumenta, uma única máquina pode não ser suficiente para armazenar os dados, nem fornecer uma leitura e gravação com rendimento aceitável. O Sharding resolve o problema com escala horizontal. Com sharding, você adiciona mais máquinas para suportar o crescimento de dados e as demandas de operações de leitura e escrita.

Por que Sharding?



  • Na replicação todas as gravações são feitas no nó principal (Master)

  • Consultas sensíveis à latência continuam sendo feitas no nó principal

  • Conjunto de réplicas possuem limitações de 12 nós

  • A memória pode não ser suficiente quando o dataset ativo for muito grande

  • Disco local não possui espaço suficiente

  • A escala vertical é muito cara


Sharding no MongoDB


sharding

No diagrama acima, existem três componentes principais que são descritos abaixo:

  • Shards: Shards (fragmentos) são usados ​​para armazenar dados. Eles fornecem alta disponibilidade e consistência dos dados. Em um ambiente de produção cada fragmento é um conjunto de réplicas separado.

  • Config Servers: Config Servers armazenam os metadados do cluster. Estes dados contém um mapeamento dos dados do conjunto de cluster para os shards. O roteador consulta e usa os metadados para direcionar operações de shards específicos. Em um ambiente de produção,  Sharded Clusters possuem exatamente 3 servidores de configuração.

  • Query Routers: Query Routers são basicamente mongos instances que fazem a interface com os aplicativos clients e operações diretas com o shard apropriado. Os processos de consulta e de roteamento visa operações para os shards e retornar resultados para os clients. Um  Sharded Cluster pode conter mais do que um roteador de consulta ( Query Router) para dividir a carga de solicitações do client. Um client envia as solicitações para um roteador consulta. Geralmente um Sharded Cluster possue muitos roteadores consulta.


 

quarta-feira, 21 de maio de 2014

MongoDB Overview


MongoDB é um banco de dados multi-plataforma orientado ao documento que fornece alta performance, alta disponibilidade e fácil escalabilidade. MongoDB funciona no conceito de coleções de documentos.



Banco de Dados


Banco de dados é um recipiente físico para coleções. Cada banco de dados tem o seu próprio conjunto de arquivos no sistema de arquivos. Um único servidor MongoDB normalmente tem vários bancos de dados.



Coleções (Collection)


Collection é um grupo de documentos MongoDB. É o equivalente de uma tabela de RDBMS. Uma coleção existe dentro de um único banco de dados. Coleções não impõem um esquema. Documentos dentro de uma coleção pode ter diferentes campos. Normalmente, todos os documentos em uma coleção são propositalmente  semelhantes ou afins.



Documento


Um documento é um conjunto de pares de valores-chave. Documentos têm esquema dinâmico. Esquema dinâmico significa que os documentos na mesma coleção não precisam ter o mesmo conjunto de campos ou estrutura e campos comuns em documentos de uma coleção podem conter diferentes tipos de dados.


Exemplo:


O exemplo abaixo mostra a estrutura do documento de um blog onde uma simples vírgula separa o par valor da chave.



{
_id
:ObjectId(7df78ad8902c)
title
:'MongoDB - Guia Rapido',
description
:'MongoDB - Guia Rapido',by:'MongoDBWise',
url
:'http://www.mongodbwise.worpress.com',
tags
:['mongodb','database','NoSQL'],
likes
:100,
comments
:[{
user
:'user1',
message
:'My first comment',
dateCreated
:newDate(2014,5,21,2,15),
like
:0},{
user
:'user2',
message
:'My second comments',
dateCreated
:newDate(2014,5,21,7,45),
like
:5}]}


terça-feira, 20 de maio de 2014

mongolink-256Instalação


Antes de começar a usar o MongoDB com nossos programas em Java, precisamos ter certeza de que temos informações MongoDB Java Driver JDBC e configurar sua máquina.


Você pode verificar no Java tutorial como instalar o Java em sua máquina. Agora, vamos verificar como configurar o MongoDB JDBC driver.




  1. Você precisa baixar o arquivo  mongo.jar. Certifique-se de baixar a ultima versão do mesmo.

  2. Você precisa incluir o mongo.jar em seu classpath.


Conecte-se ao banco de dados


Para conectar banco de dados, você precisa especificar o nome do banco de dados, se não existir, então será criado automaticamente pelo MongoDB.

Trechos do código para se conectar ao banco de dados seria a seguinte:
import com.mongodb.MongoClient;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import com.mongodb.ServerAddress;
import java.util.Arrays;

public class MongoDBJDBC{
public static void main( String args[] ){
try{
// To connect to mongodb server
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// Now connect to your databases
DB db = mongoClient.getDB( "test" );
System.out.println("Connect to database successfully");
boolean auth = db.authenticate(myUserName, myPassword);
System.out.println("Authentication: "+auth);
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}


1

 

O que há de novo no MongoDB 2.6.1?


 

 

 

A nova release liberada no ultimo dia 5 de Maio de 2014 traz as seguintes alterações que afetam tanto as versões Standart Enterprise Edition, são elas:

Outras Correções:

Estabilidade



  • Falha de banco de dados de reparação pode apagar arquivos de banco de dados - SERVER-13739


Aggregation Enhancements


O aggregation pipeline adiciona a capacidade de retornar conjuntos de resultados de qualquer tamanho, ou retornando um cursor ou escrever a saída para uma coleção. Além disso, o  aggregation pipeline suporta variáveis ​​e adiciona novas operações para lidar com conjuntos de dados e redigir dados.

  • O db.collection.aggregate () agora retorna um cursor, que permite que o aggregation pipeline retornae conjuntos de resultados de qualquer tamanho.

  • Aggregation pipelines agora suportam uma operação explain para auxiliar a análise de operações de agregação.

  • Aggregation agora pode usar um processo de classificação baseado em discos externos mais eficientes.



sábado, 17 de maio de 2014

3-nodereplicaset

 

 

Neste artigo vamos ver como implementar uma replicação MongoDB em 3 passos de maneira bem simples.



Para começar, vamos seguir os passos a seguir:

  1. Criar os diretórios de dados

  2. Criar o conjunto de replicação e as instâncias

  3. Configure os nós primário, secundario e um árbitro


Passo 1) Crie os diretórios de dados


Comece criando um diretório de dados para cada membro do conjunto de réplica, um para o primário,outro para o secundário e também adicionar um árbitro. O árbitro não replica os dados, mas escolhe um novo primário, caso haja uma interrupção do primário existente.
mkdir /mongodb/0/node1
mkdir /mongodb/0/node2
mkdir /mongodb/0/arbiter

Passo 2) Criar o conjunto de replicação e as instâncias


Em seguida, comece  cada membro como um mongod separado. Desde que você esteja rodando cada processo na mesma máquina, é provavelmente mais fácil de começar cada mongod em uma janela de terminal separado:
mongod --replSet cadastro --dbpath /mongodb/0/node1 --port 40001 --smallfiles
mongod --replSet cadastro --dbpath /mongodb/0/node2 --port 40002 --smallfiles
mongod --replSet cadastro --dbpath /mongodb/0/arbiter --port 40003 --smallfiles


sexta-feira, 16 de maio de 2014

Hoje veremos o que as vezes ocorre quando enfrentamos um desligamento ou  até mesmo um reboot em um servidor MongoDB.

Ao tentar subir os serviços do MongoDB surge o seguinte erro
old lock file: /data/db/mongod.lock.  probably means unclean shutdown recommend removing file and running --repair see: http://dochub.mongodb.org/core/repair for more information

Este erro ocorre também quando encerramos o MongoDB de maneira errada, como por exemplo, um Kill no processo mongod, quando a maneira correta seria executar o comando db.shutdownServer() no console.

Como resolver este problema:

Você deve ir ao diretório /data/db caso tenha efetuado uma inicialização default e localizar o arquivo mongod.lock. 
-rwxr-xr-x. 1 mongod mongod 5 May 16 13:26 mongod.lock

Caso o diretório não exista, calma, execute um find
[root@Mongo01 /]# find / -name mongod.lock
/var/lib/mongo/mongod.lock

Pronto, agora verifique o tamanho do arquivo
-rwxr-xr-x.  1 mongod mongod        5 May 16 13:26 mongod.lock

Se o arquivo mongod.lock  no diretório especificado pelo dbpath,  seja /data/db por padrão ou outro de sua preferêrncia, não for um arquivo de zero bytes, então o mongod irá se recusas a iniciar.

Como você pode ver acima, o arquivo não está com 0 Bytes, portanto, podemos proceder de duas maneiras :

  1. Deletar o arquivo mongod.lock


Para limpar seus arquivos de dados sem preservar os arquivos originais, não utilize a opção-repairpath


a.Remova o arquivo de bloqueio obsoleto



rm /data/db/mongod.lock

Substitua /data/db com seu dbpath onde estão os arquivos de dados do MongoDB.


Atenção: Depois de remover o arquivo mongod.lock você deve executar o processo de reparação (-repair) de antes de usar o banco de dados.


b. Inicie o MongoDB utilizando o comando -repair para ler os arquivos de dados já existentes


mongod --dbpath /data/db --repair

Quando isso for concluído, os arquivos de dados reparados irão substituir os arquivos de dados originais no diretório /data/db.

c.Inicie o mongod usando a seguinte a seguinte linha de comando para apontar o dbpath para /data/db:
mongod --dbpath /data/db



2. Restaurando o MongoDB através do -repair

a. Crie um novo diretório para o dbpath
mongod –dbpath /data/db –repair –repairpath /data/db0

Com isso o Mongo irá  criar um novo diretório e mover o arquivo de bloqueio antigo / reparado para o novo diretório. Para evitar problemas com permissões. você pode criar manualmente o novo diretório:
sudo mkdir /data/db/db0

Após executar o repair, você pode acompanhar o feedback na linha de comando
[root@Mongo01 mongo] sudo mongod –dbpath /data/db –repair –repairpath /data/db0
Sun Jan  6 22:33:30 Mongo DB : starting : pid = 16652 port = 27017 dbpath = /data/db master = 0 slave = 0  32-bit

Sun Jan  6 22:33:30 finished checking dbs
Sun Jan  6 22:33:30  dbexit:
Sun Jan  6 22:33:30      shutdown: going to close listening sockets…
Sun Jan  6 22:33:30      shutdown: going to flush oplog…
Sun Jan  6 22:33:30      shutdown: going to close sockets…
Sun Jan  6 22:33:30      shutdown: waiting for fs preallocator…
Sun Jan  6 22:33:30      shutdown: closing all files…
Sun Jan  6 22:33:30      closeAllFiles() finished
Sun Jan  6 22:33:30      shutdown: removing fs lock…
Sun Jan  6 22:33:30  dbexit: really exiting now

 

Pronto, seu ambiente está novamente operacional.

quinta-feira, 15 de maio de 2014

Como sabemos MongoDB usa javascript interface para os comandos de shell. Assim, podemos usar este recurso de uma ótima maneira escrevendo comandos de um MongoDB (shell)  em um javascript (js arquivo.) e por fim, executar em um único lugar.
Vamos ver  um exemplo bem simples.
print('===== Script =====');
print(db.getCollectionNames()); // prints all collection names in respective database
print(db.myCollection.count()); // prints the count of myCollection collection.

 

Comando para executar o Shell no script
mongo 127.0.0.1/my-profile-db --username='username' --password='pwd' mongodb-script.js

mongodb-script.js é o script shell.
Basicamente, este é apenas um comando normal de conexão mongodb para executar o script após conectar.
mo_icon_big_thumb_171574 (1)

 

 

 

Neste post, vamos aprender como usar javascript como MongoDB shell script para exportar (campos de) uma coleção.


Geralmente, para exportar dados de uma coleção MongoDB, usamos o seguinte comando -



mongoexport -vvvv --host 127.0.0.1 --db my-db --username='usr' --password='pwd' --collection profiles --csv --out /home/data/usernames.csv -f 'username'

Definitivamente eu prefiro a forma acima mencionada. Mas vamos considerar que você tem milhões ou bilhões de registros em uma coleção MongoDB. E você deseja exportar todos estes.
Provavelmente, dependendo da configuração dos seus servidores ou até mesmo de seu desktop, este processo poderá levar horas ou até mesmo travar. Foi então que a uma solução alternativa para contornar esta situação veio a tona: Criar um script que irá criar vários blocos de dados ao exportar.



var size = 1000000;
var maxCount = 1;
for (x=0;x<maxCount;x=x+1)
{
var recToSkip = x*size;
db.profiles.find().skip(recToSkip).limit(size).forEach( function(record){
var username = record.username;
print(record.username);
})
}

E claro para executar o script (se acima javascript está em arquivo chamado - 'usernames.js')


isso só vai travar. Bem, eu não sei o que acontece no seu computador, mas na minha máquina foi apenas preso por horas e, em seguida, I terminou o processo. E veio com solução scripting - onde eu criei vários arquivos (blocos) dos dados exportados.


mongo 127.0.0.1/my-db --username='username' --password='pwd'export-usernames.js > output.txt

O comando shell acima irá prestar toda a saída (de exportação-usernames.js) para o arquivo output.txt. Calma, eu tenho plena consciência de que se trata de um único arquivo onde você receberá todos os dados exportados. Mas se você quiser dividir isso , basta escrever seu script para que faça o wrapper ou executar várias vezes. Isto é com você.

quarta-feira, 14 de maio de 2014

mongodb

Neste tutorial, vamos mostrar os conceitos e fatos importantes sobre


Databases, Documents e collections no MongoDB.


 

 

 

DATABASES


Em um servidor MongoDB é possível executar vários bancos de dados. O Banco de dados padrão do MongoDB é chamado 'db', que é armazenado dentro da pasta de dados.

O MongoDB pode criar bancos de dados em tempo real, portanto não é necessário criar um banco de dados antes de começar a trabalhar com ele.

Execute no prompt do OS, o comando "mongo" para ter acesso ao console:
[root@Mongo01 ~]# mongo
MongoDB shell version: 2.6.1
connecting to: test
>

segunda-feira, 5 de maio de 2014

O Propósito deste artigo não é fazer uma comparação que tire o mérito de qualquer dos produtos envolvidos e é bom deixar bem claro que não trabalho para a MongoDB ou faço parte da DataStax e sim um profissional com anos de experiência em Bancos de Dados (Oracle - SQL Server - DB2 - Sybase - MySQL, etc..) que atua em projetos de BigData utilizando MongoDB.


Um dos motivos que me levaram a realizar esta avaliação foi pelo fato de participar de projetos e ter a oportunidade ou azar, dependendo do ponto de vista, de escutar vários comentários sobre o MongoDB e muita propaganda sobre o Cassandra e sendo assim decidi ir em busca de informações sobre o Cassandra, pois sobre o MongoDB já tenho uma certa experiência e conheço bem o que ele é capaz de fazer. Confesso que não foi fácil, pois a grande parte das informações são muito superficiais e então decidi montar um ambiente Cassandra para realização de testes.


Neste artigo vamos mostrar como você pode instalar o MongoDB no Centos 6.5 em um ambiente virtual (VirtualBox).

[caption id="attachment_101" align="aligncenter" width="620"]mongovirtual MongoDB (VirtualBox)[/caption]


[slideshare id=29776507&style=border: 1px solid #CCC; border-width: 1px 1px 0; margin-bottom: 5px; max-width: 100%;&sc=no]
[slideshare id=34295374&style=border: 1px solid #CCC; border-width: 1px 1px 0; margin-bottom: 5px; max-width: 100%;&sc=no]
[slideshare id=18007515&style=border: 1px solid #CCC; border-width: 1px 1px 0; margin-bottom: 5px; max-width: 100%;&sc=no]
[slideshare id=34294642&style=border: 1px solid #CCC; border-width: 1px 1px 0; margin-bottom: 5px; max-width: 100%;&sc=no]

domingo, 4 de maio de 2014

MongoDB é uma ferramenta fantástica para usar em análises em tempo real, porque você pode fazer um pré-join de múltiplas fontes de dados, documentos aninhados e em seguida, consultar esses documentos extremamente rápido. Às vezes, os sistemas utilizados para alimentar o MongoDB estão dentro de um banco de dados Oracle. Então, como é que você pode manter os dados MongoDB consistentes com Oracle e sincronizados em tempo quase real? Oracle Streams Advanced Queuing!


Há toneladas de sistemas Open Source  e proprietary queuing que poderiam ser usados​​, então por que escolher Advanced Queuing (AQ a partir de agora)? O suporte a transações. Com AQ, o enfileiramento e de  operações queue acontecem na mesma transação como qualquer outro DML que seu aplicativo Oracle está realizando tornando-se uma maneira muito simples de apenas enfileirar mensagens  para unidades de trabalho comprometidos.


O restante deste artigo percorre um exemplo usando uma tabela muito simples de clientes. Queremos documentos no MongoDB atualizados assim que os dados no Oracle forem comitados. O fluxo de dados será algo parecido com isto:


untitled

 

Como configurar um cluster MongoDB NoSQL em um sistema baseado em x86 com Oracle Solaris Zones eo Service Management Facility Oracle Solaris 11 e uma ferramenta de análise DTrace.

Este artigo começa com uma breve visão geral do MongoDB e segue com um exemplo de criação de um cluster MongoDB três nós em um sistema baseado em x86. Como pré-requisito, você deve ter uma compreensão básica do Oracle Solaris Zones e administração de redes.

Sobre o MongoDB e Oracle Solaris Zones


MongoDB é um banco de dados orientado a documentos open source NoSQL que armazena dados estruturados como JavaScript Object Notation (JSON)-como documentos com esquemas dinâmicos. Isso permite um rápido desenvolvimento desde os esquemas de banco de dados podem ser modificados rapidamente aplicações evoluir sem a necessidade de desligar o banco de dados. Além disso, MongoDB suporta replicação master-slave, utilizando um conjunto de replicação, e também fornece escalabilidade horizontal com o recurso sharding, que permite distribuir os dados (com base em uma chave caco) em vários servidores MongoDB.

sábado, 3 de maio de 2014

MongoDB vem com classe "com.mongodb.util.JSON" para converter dados JSON diretamente para um DBOBJECT. Por exemplo, os dados representados no formato JSON:
{
'name' : 'mongodbwise',
'age' : 30
}

Neste post, vamos ver como fazer e restaurar backups utilizando os comandos mongoexport e mongoimport

1. Efetuando um Backup com o mongoexport


A seguir um exemplo simples de como realizar um Backup de seu banco de dados utilizando o comando mongoexport

Antes vamos rever algumas opções :
$ mongoexport
Export MongoDB data to CSV, TSV or JSON files.
 
options:
-h [ --host ] arg mongo host to connect to ( <set name>/s1,s2 for
-u [ --username ] arg username
-p [ --password ] arg password
-d [ --db ] arg database to use
-c [ --collection ] arg collection to use (some commands)
-q [ --query ] arg query filter, as a JSON string
-o [ --out ] arg output file; if not specified, stdout is used

Muitas vezes, temos que exportar os resultados de agrupamento em formato CSV ou JSON. Para resolvê-lo, basta inserir os resultados do grupo em uma nova coleção e exportar a nova coleção via mongoexport.

Abaixo um exemplo de como podemos fazer :

1. Defina os resultados do grupo em uma variável. Neste caso, o nome da variável é "groupdata".
> var groupdata = db.website.aggregate(
{
$group : {_id : "$hosting", total : { $sum : 1 }}
},
{
$sort : {total : -1}
}
);

2. Inserts "groupdata.result" em uma nova coleção.
> db.websitegroup.insert(groupdata.result);
 
> db.websitegroup.find().pretty()
{ "_id" : "aws.amazon.com", "total" : 4 }
{ "_id" : "hostgator.com", "total" : 3 }
{ "_id" : "cloud.google.com", "total" : 2 }
{ "_id" : "godaddy.com", "total" : 1 }
>

3. Exportando a Collection "websitegroup" para um arquivo CSV.
c:\> mongoexport -d testdb -c websitegroup -f _id,total -o group.csv --csv
connected to: 127.0.0.1
exported 4 records

group.csv



_id,total
"aws.amazon.com",4.0
"cloud.google.com",2.0
"godaddy.com",1.0
"hostgator.com",3.0



4.Exportando a Collection "websitegroup" para um arquivo JSON.
c:\> mongoexport -d testdb -c websitegroup -o group.json
connected to: 127.0.0.1
exported 4 records

group.json



{ "_id" : "aws.amazon.com", "total" : 4 }
{ "_id" : "cloud.google.com", "total" : 2 }
{ "_id" : "godaddy.com", "total" : 1 }
{ "_id" : "hostgator.com", "total" : 3 }



Feito!!!
Neste Post, vamos ver como usar a função Aggregate do MongoDB para agrupar documentos (dados).

No exemplo a seguir podemos ver os dados em formato JSON, que mostram os provedores de hospedagem de sites.
website.json



{ "_id" : 1, "domainName" : "test1.com", "hosting" : "hostgator.com" }
{ "_id" : 2, "domainName" : "test2.com", "hosting" : "aws.amazon.com"}
{ "_id" : 3, "domainName" : "test3.com", "hosting" : "aws.amazon.com" }
{ "_id" : 4, "domainName" : "test4.com", "hosting" : "hostgator.com" }
{ "_id" : 5, "domainName" : "test5.com", "hosting" : "aws.amazon.com" }
{ "_id" : 6, "domainName" : "test6.com", "hosting" : "cloud.google.com" }
{ "_id" : 7, "domainName" : "test7.com", "hosting" : "aws.amazon.com" }
{ "_id" : 8, "domainName" : "test8.com", "hosting" : "hostgator.com" }
{ "_id" : 9, "domainName" : "test9.com", "hosting" : "cloud.google.com" }
{ "_id" : 10, "domainName" : "test10.com", "hosting" : "godaddy.com" }



Um guia simples de como você pode instalar o MongoDB no Mac OS X.

  1. Download MongoDB - Baixe a versão mais estável no site oficial da MongoDB e depois descompactar os arquivos de instalação


$ cd ~/Download
$ tar xzf mongodb-osx-x86_64-2.2.3.tgz
$ sudo mv mongodb-osx-x86_64-2.2.3 /usr/local/mongodb

Por padrão, o MongoDB escrever/armazena os dados na pasta /data/db, você precisa criar essa pasta manualmente e atribuir a devida permissão.
$ sudo mkdir -p /data/db
$ whoami
mongo
$ sudo chown mongo /data/db

Neste post vou mostrar como carregar documentos em uma collection MongoDB. O design da interface se parece com todas as outras interfaces ODI, mas nos bastidores o KM configurado no projeto físico utiliza o MongoDB SDK (veja aqui MongoDB SDK) para inserir os documentos. O armazenamento de dados alvo abaixo representa um documento MongoDB, as colunas são as chaves no documento. Cada linha é inserida como um documento e cada coluna é uma chave, o valor da coluna é o valor. O valor ENAME abaixo é apresentada como um valor JSON complexo.

odi_load_mongodb

 

A IKM que tenho usado é um multi-conector IKM, a fonte é uma fonte de dados SQL e destino usa um comando groovy do MongoDB. O core da IKM para inserir os documentos para a coleção tem um SQL SELECT como o comando no source e o seguinte código groovy para o comando-alvo;

  1. import com.mongodb.*

  2. MongoClient mongoClient = new MongoClient(" <%=odiRef.getOption("MONGO_SERVER")%> ", <%=odiRef.getOption("MONGO_PORT")%> );

  3. DB db = mongoClient.getDB("<%=odiRef.getOption("MONGODB")%>");

  4. DBCollection coll = db.getCollection("<%=odiRef.getOption("MONGOCOLL")%>")

  5. BasicDBObject doc = new BasicDBObject();

  6. <%=odiRef.getColList(" ", "doc.put(\u0022[COL_NAME]\u0022, \u0022#[CX_COL_NAME]\u0022);", " \n ", "", "((INS and !TRG) and REW)")%>

  7. coll.insert(doc);


A chamada do método odiRef.getColList acima gera código para cada coluna de destino, o código executa uma invocação doc.put para adicionar os pares de valores-chave no documento. Por exemplo, este é o código gerado e executado com base no design de interface discutido acima;




  1. import com.mongodb.*

  2. MongoClient mongoClient = new MongoClient("DALLAN-SVR", 27017);

  3. DB db = mongoClient.getDB("test");

  4. DBCollection coll = db.getCollection("testCollection")

  5. BasicDBObject doc = new BasicDBObject();

  6. doc.put("EMPNO", "#EMPNO");

  7. doc.put("ENAME", "#ENAME");

  8. doc.put("JOB", "#JOB");

  9. doc.put("MGR", "#MGR");

  10. doc.put("HIREDATE", "#HIREDATE");

  11. doc.put("SAL", "#SAL");

  12. doc.put("COMM", "#COMM");

  13. doc.put("DEPTNO", "#DEPTNO");

  14. coll.insert(doc);


Esta é uma ilustração simples de como carregar documentos para o MongoDB. Agora basta ir para o Shell do MongoDB e executar o comando db.testCollection.find () para ver todos os objetos da coleção e obter a lista de documentos, abaixo você pode ver uma prévia da execução.






  • { "_id" : ObjectId("51dc3ded6c4b9a5bd07d68a6"), "EMPNO" : "7369", "ENAME" : "{ NAME : SMITH, DESCR : 22 }", "JOB" : "CLERK", "MGR" : "7902", "HIREDATE" : "1980-12-17 00:00:00.0", "SAL" : "801", "COMM" : "", "DEPTNO" : "20" }

  • { "_id" : ObjectId("51dc3ded6c4b9a5bd07d68a7"), "EMPNO" : "7499", "ENAME" : "{ NAME : ALLEN, DESCR : 22 }", "JOB" : "SALESMAN", "MGR" : "7698", "HIREDATE" : "1981-02-20 00:00:00.0", "SAL" : "1601", "COMM" : "300", "DEPTNO" : "30" }



Eu tenho experimentado com outro manipulador de armazenamento Hive, desta vez para MongoDB, existem alguns por aí incluindo este de MongoDB. O que eu tenho vindo a utilizar suporta tipos primitivos básicos e também suporta ler e escrever - usando a abordagem padrão de classe manipulador de armazenamento e propriedades personalizadas para descrever a máscara de dados. Isso, então, permite que você acesse MongoDB via tabela externa do Hive com muita facilidade e abstrair muita complexidade de integração - também torna ideal para uso em ODI. Estou utilizando uma VM Linux onde tenho Hive  para acessar meu MongoDB em outra máquina. O manipulador de armazenamento é encontrado aqui, eu usei-o para acessar o mesmo exemplo, eu o que escrevi a seguir é a definição da tabela externa;

Vamos ver como podemos integrar MongoDB usando ODI, em primeiro lugar dar um passo atrás. Derby / JavaDB introduziu funções de tabela, há alguns anos. Tabela de Funções são realmente úteis, que estão no banco de dados Oracle e tão divertido no JavaDB! ODI é uma grande plataforma para integração e JavaDB e  tabela de funções fornecem uma maneira muito legal de integrar APIs Java arbitrários em seus projetos. O que tenho feito aqui é;




  • Construir uma Tabela de funções muito simples  java para projetar uma tabela para representar os documentos em uma coleção MongoDB. A coleção é passada como um parâmetro para o KM e os nomes de coluna são as chaves para o documento MongoDB. Os dados provêm de valores.

  • Construir um LKM muito simples a partir de uma função de tabela Java para SQL


sexta-feira, 2 de maio de 2014

Vamos falar um pouco sobre esse novo paradigma de bancos de dados, os bancos de dados não relacional ou NoSQL(Not Only SQL). Com a notícia que anunciada pelo Twitter da migração do MySQL para o Cassandra esse assunto entrou muito em discussão.

Banco dados de alto desempenho, ou seja, você troca a integridade de dados pelo o alto desempenho. Foi o que o Twitter fez quando seu volume de tweets cresceu monstruosamente. Aqui nós vamos falar um pouco sobre o MongoDB, que é uma base de dados open source, escalável e de alta performance todo escrito em C++.

O MongoDB possui uma boa API para Java junto com uma boa documentação, ele também tem APIs ou Drivers, como eles se referem no site deles, para C#, JavaScript, JVM Languages, Python, PHP, Ruby, C++ e Perl, nosso foco aqui será sobre a API Java.

MongoDB tem suporte para a execução Queries de Map Reduce , além de ter um sql regular como interface de consulta. Na documentação, podemos ler que não é a melhor idéia usá-lo como uma interface regular, mas é muito bom para a geração de processos em background, como por exemplo a elaboração de relatórios ou o cache de alguns dados. Vou tentar mostrar exemplo simples como criar uma query Map Reduce e executá-lo.

Blog Archive

SmarttNet Solution Provider. Tecnologia do Blogger.

Postagens populares

Twitter MongoDBBrazil

Total de visualizações de página