Converter MySQL para MongoDB

maio 20th, 2010 | by | converter, mongodb, mysql, nosql, sql

mai
20

Notando que a maioria dos programadores PHP utilizam MySQL e para você começar a usar o MongoDB ncessita de uma base de dados para começar a programar sua funções, tive a idéia de criar um conversor simples de MySQL para MongoDB. Aqui vou explicar o seu código e como é simples utilizar o MongoDB com PHP.

Criei uma interface bem simples para que possamos enviar os dados sem precisar ficar mudando no código.

Interface do meu conversor

Interface do meu conversor

Essa interface enviará, via POST, as variáveis de conexão com o banco de dados MySQL.

$host = isset($_REQUEST['host_mysql']) ? $_REQUEST['host_mysql'] : “localhost”;

$user = isset($_REQUEST['user_mysql']) ? $_REQUEST['user_mysql'] : “usuario”;

$pass = isset($_REQUEST['pass_mysql']) ? $_REQUEST['pass_mysql'] : “senha”;

$db   = isset($_REQUEST['db_mysql']) ? $_REQUEST['db_mysql'] : “teste_latin”;

Agora é hora de criar a conexão com o MongoDB utilizando uma extensão instalada no php: http://github.com/downloads/mongodb/mongo-php-driver/mongo-1.0.6-r1-php5.3vc6ts.zip

try{

$conexao = new Mongo(); //abre conexão com o MongoDB

$db_mongo = $conexao->$db; //cria a database com o mesmo nome do MySQL

}

catch(MongoConnectionException $e){

die(“<h1 class=’erro’>Erro do banco de dados MONGODB – Inicie o servidor do MongoDD!</h1><span class=’dica’>Dica: Entre no prompt do windows<br />

cd \ <br />

cd mongodb<br />

cd bin<br />

mongod </span>”);

}
Caso o seu MongoDB não esteja rodando o script indicará o erro e mostrará a forma como iniciar seu MongoDB no Windows.

Para conseguirmos pegar o nome de todas as tabelas da nossa database no MySQL utilizamos a seguinte query:

$query_pega_tabelas = “SHOW TABLES”;

O nome do nosso campo contendo as tabelas será:

$index_tabelas = “Tables_in_”.$db; //nome do array com o valor do nome das tabelas via SHOW TABLES
Onde a variável $db será o nome da nossa database no MySQL. Após pegarmos os nomes das nossas tabelas é hora de irmos tabela por tabela pegando seus dados e inserindo-os, não será necessário pegar os metadados(tipo, tamanho) dos campos pois o MongoDB não necessita dessas informações.

if($result_pega_tabelas=mysql_query($query_pega_tabelas)){

while($arr_pega_tabelas[] = mysql_fetch_assoc($result_pega_tabelas)){

}

$rs_charset=mysql_query($query_charset);

foreach($arr_pega_tabelas as $c=>$v){

if(is_array($v)){

foreach($v as $a => $b){

echo “<h3>Tabela: “.$b.”</h3>”;

$nome_tabela = $b;

$query_pega_dados = “EXPLAIN “.$nome_tabela;

if($result_pega_dados=mysql_query($query_pega_dados)){

$arr_pega_dados = array();

while($arr_pega_dados = mysql_fetch_assoc($result_pega_dados)){

$arr_totalis[$nome_tabela][] = $arr_pega_dados;

}//fim while

}//fim if query pega dados

}//fim foreach

}//fim if array

}//fim foreeach

Geramos uma collection para cada tabela existente no MySQL.

foreach($arr_totalis as $c => $v){

$query = ‘select * from ‘.$c;

$collection = $db_mongo->$c;

$rs_select = mysql_query($query);

echo “Inserindo em “.$c.”<br />”;

echo “<pre>”;

while($arr_dados = mysql_fetch_assoc($rs_select)){

Precisamos codificar nossos valores, assim como os campos, em utf8. Porém caso nosso banco já esteja em utf8 não será necessária a conversão. Para isso criei um pequena função utilizando iconv.

foreach($arr_dados as $c => $v){

$obj[utf8_encode_suissa($c)] = utf8_encode_suissa($v);

}//fim foreach

$arr[] = $obj;

}//fim while

$erro = 0;

No caso meu banco que será convertido está codificado em latin1, correspondente ao charset iso-8859-1. Essa função vai ao final do script.

function utf8_encode_suissa($s) {

return iconv(‘iso-8859-1′, ‘utf-8′, $s);

}

Após a conversão para utf8 inserimos o objeto codificado, com a função insert(), na nossa collection que terá o mesmo nome que a tabela correspondente no MySQL.

foreach($arr as $cc => $vv){

if(!$collection->insert($vv)){

echo “Não inseriu”.print_r($c) ;

$erro++;

$var_erro[] = var_dump($vv);

}//fim if

}//fim foreach

Caso tenha ocorrido algum erro mostrará-o com var_dump, só para ter uma noção de como os dados estão estruturados.

if($erro > 0){

echo “<h3>Aconteceram os seguintes erros:</h3>”;

foreach($var_erro as $f => $g){

var_dump($g);

}//fim foreach

}//fim if

echo “</pre>”;

}//fim foreach

}//fim if

Ao término do script você poderá entrar no phpMoAdmin, ferramenta para manipular as bases e as collections do MongoDB, e ver na lista das databases sua nova base criada.

phpMoAdmin

phpMoAdmin

O scrip completo com a interface para inserir os dados se encontra em: http://www.nosqlbr.com.br/conversor_mysql_mongodb.zip

1 Comment »

Introdução ao NoSQL

maio 19th, 2010 | by | nosql, sql

mai
19

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. Alem disso, os bancos de dados NoSQL são muito tolerantes a erros.

No caso dos bancos NoSQL toda a 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.

Os bancos NoSQL são subdivididos pelo seu núcleo, ou seja, como ele trabalha com os dados. Que são: Wide Column Store/Column Families, Document Store, Key Value/Tuple Store, Eventually Consistent Key Value Store, Graph Databases, Object Databases, Grid Database Solutions, XML Databases. Lista retirada de http://nosql-database.org/

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.

Wide Columns Store

Fortemente inspirados pelo BigTable do google eles suportam várias linhas e colunas, alem disso ele permite subcolunas. Alem do BigTable do google outros que usam essa tecnologia são:

Document Store

Baseado em documentos XML ou JSON, podem ser localizados pelo seu id unico ou por qualquer registro que tenha no documento.

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.

Column Oriented Store

Esses são bancos de dados relacionais, porem eles tem caracteristicas do NoSQL a principal diferença deles é que os dados são armazenados em colunas, ajudando na escalabilidade.

  • Vertica
  • MonetDB
  • LucidDB
  • Infobright
  • Ingres/Vectorwise

Como apresentado no gráfico, os key-value aguentam maior quantidade de registros, enquanto os grafos são mais complexos, a vantagem disso é bla bla bla.

Em um projeto, não necessariamente você precisa usar só um banco de dados nosql, você pode usar ele com qualquer outro banco de dados. Os bancos nosql são indicados para grandes cargas de dados, exigência de velocidade na consulta e escrita em grandes volumes de dados. Ainda segundo o gráfico 90% dos sites atualmente podem usar sem problemas algum os bancos de dados tradicionais, pois o ganho de performance não seria tão siguinificativo, para os 10% restantes é aconselhavel o uso do NoSQL.

A idéia que o conceito NOSQL nos passa é que ele não pode ser generalizado como a resposta de todos seus problemas, mas sim para problemas específicos.

Banco de dados Relacionais

O que é: Baseia-se em que todos os dados estão guardados em tabelas, pelo conceito de entidade e relacionamento. Os dados são separados de forma única tentando diminuir ao máximo a redundância. Pois a informação é criada pelo conjunto dos dados, onde são as relações entre as tabelas que fazem esse serviço.

Características: tabelas, schema definido, hierarquia, redundância mínima, entidade e relacionamento, formas normais, transações ACID(Atomicidade, Consistência, Isolamento, Durabilidade).

Necessidades: Sistemas locais, sistemas financeiros, sistemas corporativos, segurança da informação, consistência dos dados.

Marcas: DB2, Firebird, InterBase, Microsoft SQL Server, MySQL, Oracle, PostgreSQL

Cases: SAP, OpenERPPrevidência Social, Caixa, Itaú, Salesforce, Vale.

Banco de Dados NOSQL

O que é: Uma solução alternativa para os bancos de dados relacionais, possuem uma alta escalabilidade e desempenho

Características: registros, schema-free, tolerância a falha, escalabilidade, clusterização, mapreduce, sharding.

Necessidades: Sistemas em nuvem, análises sociais, alta escalabilidade, performance na consulta/escrita, replicação.

Cases: Twitter, Facebook, Digg, Amazon, LinkedIN, Google, Yahoo, The New York Times, Bit.ly.

1 Comment »

Diaspora um facebook mais seguro e descentralizado

maio 13th, 2010 | by | uncategorized

mai
13

O Facebook vem recebendo muitas críticas por causa da privacidade dos dados, este projeto tem a intenção de descentralizar o servidor, ou seja, distribuí-lo em vários servidores e que não exista um central. Logo os dados vão “conversar” entre si.

E vocês acham que isso seria possível com que banco de dados? Na verdade a pergunta derradeira seria com qual banco NOSQL ele será possível.

Com certeza veremos novidades nessa área, provavelmente els vão modificar algum já existente. É esperar para ver!

http://www.joindiaspora.com/

1 Comment »

I Encontro NOSQL Brasil

maio 12th, 2010 | by | mongodb, nosql

mai
12

Sobre

O movimento noSQL está transformando completamente a forma com que as pessoas olham para os dados – empresas como Twitter, Facebook e Google são alguns dos usuários desta tecnologia.

Os motivos que levam estas e outras empresas ao redor do mundo a utilizar um noSQL são variadas. Em geral, envolvem escalabidade e performance que não conseguimos obter com os tradicionais bancos de dados relacional.

O noSQL Brasil é o primeiro encontro brasileiro que visa apresentar, promover e discutir as tecnologias “noSQL”. Para isso, serão realizadas palestras sobre as diversas abordagens noSQL com exemplos práticos e demonstrações, bem como um painel onde será discutido como e quando utilizar noSQL.

O movimento noSQL está transformando completamente a forma com que as pessoas olham para os dados – empresas como Twitter, Facebook e Google são alguns dos usuários desta tecnologia.


Os motivos que levam estas e outras empresas ao redor do mundo a utilizar um noSQL são variadas. Em geral, envolvem escalabidade e performance que não conseguimos obter com os tradicionais bancos de dados relacional.


O noSQL Brasil é o primeiro encontro brasileiro que visa apresentar, promover e discutir as tecnologias “noSQL”. Para isso, serão realizadas palestras sobre as diversas abordagens noSQL com exemplos práticos e demonstrações, bem como um painel onde será discutido como e quando utilizar noSQL.

Agenda

Sábado, 15 de Maio de 2010
08.00 - Credenciamento
08.30 - Abertura
Alexandre Porcelli, OpenSpotLight
09.00 - noSQL anti-patterns
Gleicon Moraes, Locaweb
10.00 - Performance e simplicidade com Chave/Valor utilizando REDIS
Luiz Fernando Teston, OpenSpotLight
10.45 - Coffee break
11.20 - O papel do REST no Neo4J e CouchDB, um comparativo
Guilherme Silveira, Caelum
12.10 - Introdução ao MongoDB – direto da fonte!
Alberto Lerner, 10gen
13.00 - Almoço livre (não incluso)
14.30 - Tio: um NoSQL made in Brasil
Rodrigo Strauss, 1bit
15.20 - Nas Nuvens com KVM, JBoss REST-Easy e InfiniSpan
Edgar SilvaSamuel Tauil, Red Hat Brasil
16.10 - Coffee break
17.00 - Divide et impera – Processamento massivo com Hadoop, Pig e HBase
Vinicius Carvalho, SambaTech
17.50 - Estudo de caso: avaliando o Apache Cassandra como cache distribuído
Julio Viegas, GlobalCode
18.40 - Painel de Discussão
19.30 - Happy Hour!

(*) Esta agenda pode ser alterada sem aviso prévio.

maiores informações

http://nosqlbr.com/

1 Comment »

Yahoo!, O Grande Case do Hadoop Para Big Data

maio 12th, 2010 | by | bigtable, cassandra, hadoop

mai
12

Hadoop está ganhando cada vez mais mais aceitação comercial. Estamos vendo uma série de sinais de sua crescente popularidade. Conversamos recentemente com um executivo do Yahoo! e ficou bastante claro que a empresa está reconstruindo seu futuro no armazenamento distribuído e em tecnologias de análises de grandes volumes de dados.

É um caminho similar ao que estamos vendo com as grandes redes sociais e fornecedores de computação em nuvem. O Facebook usa o Hadoop para fazer análises sociais mais elaboradas que fortalecem a capacidade de fornecer o alto nível estabelecido de qualidade das suas recomendações sociais. O Windows Azure também está adotando o Hadoop.

Em uma ligação recente do Eric Baldeschwieler, vice-presidente do Hadoop, para o Yahoo!, foi falado que o Hadoop está no núcleo da reconstrução do Yahoo!, sendo indispensável para seu futuro.

Perguntamos para ele por email o que o Hadoop acrescentará para o futuro do Yahoo!.

Aqui está sua declaração preparada:

“A visão do Yahoo! é se tornar o centro da vida das pessoas online fornecendo experiências relevantes na web. Pense no Hadoop como uma camada da fundação sob dois dos mais preciosos empreendimentos do Yahoo!: seus dados de usuários e sua coleção de conteúdo diversificado. Para o Yahoo!, o processamento e análise de dados é a chave para a compreensão da sua enorme audiência global, enriquecendo produtos e conectando os usuários com anunciantes.

Como o Hadoop está cada vez mais se tornando um armazém de dados para o Yahoo!, a empresa espera acelerar o ritmo de inovação em todas as experiências de seus consumidores e anunciantes.”

O Yahoo! começou a usar o Hadoop inicialmente em 2006 como um projeto de ciência para processar e analisar grandes conjuntos de dados. Eles desenvolveram um protótipo em 20 nodes(instâncias). Hoje, o Yahoo! gerencia mais de 25.000 nodes de análise e processamento de dados.

O Yahoo! descobriu que o desenvolvimento de seus produto poderia ser feito em uma fração de tempo com o Hadoop. Eles viram que poderiam jogar máquinas em um projeto para processar cada vez mais rápido e assim rentabilizar mais aceleradamente. O que antes levava 29 dias pode ser feito em menos de um.

Como resultado, o Yahoo! começou a integrar o Hadoop em todas as partes do seu negócio. A empresa esvaziou os dados do departamento de TI e os armazenou em um cluster.

Hoje, o Yahoo! utiliza o Hadoop para determinar a melhor posição da publicidade e para otimização de conteúdo. Por exemplo, a empresa começou a testar a forma como a otimização trabalha na página inicial, servindo conteúdo relevante ao usuário. E funcionou. O Yahoo! viu um aumento de 150% nas métricas de engajamento dos usuários com sua home.

O Hadoop está se tornando o padrão para processamento dados e analytics em redes sociais, em projetos como o genoma, no IBM Big Sheets e vários outros. Alguns vêem isso como prova de que ele ganhou aceitação comercial. E recentemente houve um grande aumento no número de vagas para uso da tecnologia no mercado. Já temos notícias também de algumas empresas usando Hadoop no Brasil. E você, aposta no uso do Hadoop se tornando cada vez mais mainstream?

Quem será o próximo grande player dos projetos relacionados a Big Data? Alguém disse Cassandra?

artigo retirado de: http://readwriteweb.com.br/2010/05/11/yahoo-ve-no-hadoop-a-solucao-de-seus-problemas/

2 Comments »

Como instalar o CouchDB no Windows

maio 7th, 2010 | by | couchdb, nosql

mai
07

Hoje eu já estava largando mão de tentar instalar o CouchDB no Windows pois havia ficado preso na instalação do ICU (International Components for Unicode), que é um pré-requisito. Estava seguindo este tutorial http://wiki.apache.org/couchdb/Installing_on_Windows

Quando um camarada que eu comentei no slideshare dele http://www.slideshare.net/theoziran/nosql-com-couchdb-e-php me indicou esse site http://www.brunomlopes.com/software/couch-db-binaries

Foi lá que eu encontrei o Santo Graal do CouchDB no WINDOWS, ehehehhe, UM INSTALADOR! Porém eu ja tinha instalado o Erlang, então não sei se é necessário instalar anteriormente ou ele faz tudo. Só sei que meu CouchDB ta rodando lindamente e não é nem preciso de tutorial para isso. #ficadica

http://people.apache.org/~mhammond/dist/0.10.0/setup-couchdb-0.10.0.exe

Um bom começo com é usar essas classes e ir fuçando, exatamente o que estou a fazer.

http://wiki.apache.org/couchdb/Getting_started_with_PHP

Boa Sorte.

1 Comment »

Como instalar Cassandra no Windows

maio 7th, 2010 | by | cassandra, escalabilidade, java, nosql

mai
07

Hoje de manhã me deparei com a facilidade de instalar o Cassandra no Windows então vamos começar baixando a última JDK(Java SE Development Kit) e vai precisar do Cassandra, lógico,http://www.apache.org/dyn/closer.cgi?path=/cassandra/0.6.1/apache-cassandra-0.6.1-bin.tar.gz

  1. Extraia o Cassandra para uma pasta a sua escolha. (Eu usei c:\cassandra)
  2. Defina as seguintes variáveis de ambiente(Painel de Controle > Sistema > Avançado > Variáveis de Sistema)
    1. JAVA_HOME (para o diretório onde você instalou o JRE, este não deve ser o diretório bin. Meu exemplo: C:\Arquivos de programas\Java\jdk1.6.0_20)
    2. CASSANDRA_HOME (para o diretório que você extraiu os arquivos na etapa 1 – c:\cassandra)

Modifique o arquivo de configuração Cassandra como você gosta e não se esqueça de atualizar as localizações dos diretórios de um UNIX como caminho para algo em seu diretório do Windows (no meu exemplo o arquivo de configuração está localizado em c:\cassandra\conf\storage-conf.xml

<CommitLogDirectory>C:/cassandra/data/commitlog</CommitLogDirectory>
<DataFileDirectories>
<DataFileDirectory>C:/cassandra/data/data</DataFileDirectory>
</DataFileDirectories>

ATENÇÃO

Essas linhas não existem no arquivo padrão, então pode colá-las sem problema. Eu coloquei mais para o final do arquivo.

<CalloutLocation>C:/cassandra/data/callouts</CalloutLocation>
<BootstrapFileDirectory>C:/cassandra/data/bootstrap</BootstrapFileDirectory>
<StagingFileDirectory>C:/cassandra/data/staging</StagingFileDirectory>

Abra o cmd e execute o cassandra.bat arquivo (no meu exemplo está localizado em c:\cassandra\ bin\cassandra.bat)

Você pode verificar que Cassandra está funcionando, ao tentar se conectar ao servidor. Para fazer isso, abra um novo cmd e executar o cassandra-cli.bat arquivo a partir do diretório bin.

c:\cassandra\ bin\cassandra.bat
connect localhost/9160

Caso ainda assim não esteja rodando tente excutar o cassandra.bat e o cassandra-cli.bat apartir do C:\cassandra. Ex.:

cd cassandra
bin\cassandra.bat

E pronto nosso Cassandra já está pronto para uso.

1 Comment »

Armazenar arquivos com MongoDB

maio 7th, 2010 | by | escalabilidade, mongodb, nosql

mai
07

O MongoDB também oferece recursos que vão além das operações de banco de dados. Por exemplo, ele oferece uma boa solução para armazenar arquivos grandes e pequenos no banco de dados.

Os arquivos são automaticamente divididos em blocos. Se MongoDB é executado em um ambiente de auto-sharded, pedaços de arquivo também são replicados em vários servidores.

Armazenar arquivos é surpreendentemente muito difícil, um problema para resolver de forma eficiente, especialmente quando você precisa gerenciar um grande número de arquivos. Salve arquivos em um sistema de arquivos local muitas vezes não é boa solução.

Um exemplo dessa dificuldade é o problema que o YouTube tinha eficientemente servir miniaturas de milhões de vídeos , ou mesmo os cortes realizados pelo Facebook eficientemente servir milhares de milhões de fotos .

MongoDB resolve este problema através da criação de duas coleções internas: os arquivos collection para manter informações sobre os metadados de arquivos e os chunks collection mantém informações sobre os pedaços do arquivo.

Se você quer armazenar um arquivo de vídeo grande, você usaria um código como este:

[php]$metadata = array(
<pre> "filename" => "path.avi",
"downloads" => 0,
"comment" => "This file is foo bar",
"permissions" => array(
 "crodas" => "write",
 "everybody" => "read",
)
);
$grid = $db->getGridFS();
$grid->storeFile("/file/to/path.avi", $metadata);[/php]

Como você pode ver é simples de entender. #ficadica

parte retirada do artigo: http://www.phpclasses.org/blog/post/118-Developing-scalable-PHP-applications-using-MongoDB.html


No Comments »

Eu tenho que me preocupar com SQL Injection no MongoDB?

maio 7th, 2010 | by | escalabilidade, javascript, mongodb, nosql, sql

mai
07

Geralmente, com MongoDB não estamos construindo a partir de consultas SQL,  logo ataques SQL Injection não são um problema.

No MongoDB as consultas são representados como BSON. Normalmente a linguagem de programação oferece uma maneira conveniente de construir estes objetos que está livre da injeção. Qualquer caracter especial não afetará o banco pois ele será apenas uma string.

Javascript

Alguns cuidados são apropriados quando utilizando Javascript. Por exemplo, quando usando o $ em uma consulta, não concatenar fornecido usuário declaração de dados para compilar o código Javascript, o que seria análogo a uma vulnerabilidade de injeção SQL. Felizmente, a maioria das consultas em MongoDB pode ser expresso sem Javascript. Além disso, podemos misturar os dois modos. É uma boa idéia para fazer todos os campos fornecidos pelo usuário ir direto para um campo BSON.

Você pode usar db.eval () com valores fornecidos usuário, você pode usar o CodeWScope ou você pode fornecer argumentos extras para sua função. Algo como: function (db.eval (userVal ){…}, user_value); Isto irá assegurar que você obterá user_value enviadas como dados em vez de código.

As vezes é útil construir um objeto BSON onde a chave é fornecida pelo usuário. Nessas situações, as chaves precisam ter substituições.  O usuário pode enviar uma $ valor com a_chave.meu_objeto onde {$algo: “coisas”}. Então podemos ver alguns casos:

  • Inserindo. Inserção no banco de dados não fará nenhum dano. Nós não estamos executando esse objeto como uma consulta, estamos inserindo os dados no banco de dados.
  • Update. Atualização (consulta, obj) permite $ operadores no domínio obj. $ Onde não é suportado em atualização. Alguns operadores são possíveis, que manipulam o documento único – assim, as chaves devem ser escapadas.
  • Consultando. Geralmente este não é um problema, como por (x: user_obj), cifrões não são de nível superior e não ter nenhum efeito. Em teoria, pode-se deixar o usuário criar uma consulta completamente dele e fornecê-la ao banco de dados. Nesse caso, a verificação por $ nas chaves é importante. No entanto, isso seria um caso muito raro.

Artigo semi traduzido de http://www.mongodb.org/pages/viewpage.action?pageId=7209106

No Comments »

Alguns números do Twitter

maio 6th, 2010 | by | cassandra, escalabilidade, flockdb, hadoop, mysql, twitter

mai
06

Fiquei pasmo coma quantidade de informação

-50 milhões de tweets/dia
-300 mil novas contas/dia
- O Twitter gera 7 TB/dia, 2 PB/ano.
- Solução para logs com Scribe após tentar com syslog-ng.
- Hadoo p/HDFS para armazenamento e processamento distribuído. Pig para analise.
- Projeto próprio para gerenciar grafos sociais. FlockDB.
- Estão migrando de MySQL com memcached para Cassandra. Particionar MySQL leva a muitos pontos de falha, é computacionalmente pesado e demanda mais trabalho.
- Deploy em mais de 1000 maquinas em menos de 1 minuto com BitTorrent (Murder).

Agora me pergunto seria possível sem NOSQL?

1 Comment »