<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Christiano Anderson &#187; nosql</title>
	<atom:link href="http://christiano.me/tag/nosql/feed/" rel="self" type="application/rss+xml" />
	<link>http://christiano.me</link>
	<description>Desenvolvimento, Padrões Web, NoSQL, MongoDB, Software Livre</description>
	<lastBuildDate>Fri, 27 Jan 2012 03:04:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Resumo do evento NoSQLbr</title>
		<link>http://christiano.me/2010/05/16/resumo-do-evento-nosqlbr/</link>
		<comments>http://christiano.me/2010/05/16/resumo-do-evento-nosqlbr/#comments</comments>
		<pubDate>Sun, 16 May 2010 14:08:22 +0000</pubDate>
		<dc:creator>Christiano Anderson</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://christiano.me/?p=1087</guid>
		<description><![CDATA[Ontem (15/05/2010) participei de um ótimo evento sobre tecnologias NoSQL. O mais interessante foi a maneira inusitada como o evento foi organizado, tudo começou com um tweet do @porcelli convidando alguns amigos para um happy hour e conversar sobre NoSQL. Depois de muitos retweets, o que seria apenas uma reunião com poucas pessoas, ganhou uma [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem (15/05/2010) participei de um ótimo evento sobre tecnologias NoSQL. O mais interessante foi a maneira inusitada como o evento foi organizado, tudo começou com um tweet do <a href="http://twitter.com/porcelli" target="_blank">@porcelli</a> convidando alguns amigos para um happy hour e conversar sobre NoSQL. Depois de muitos retweets, o que seria apenas uma reunião com poucas pessoas, ganhou uma proporção de evento. O primeiro local escolhido se tornou pequeno e tiveram que mudar para o auditório de um hotel na Vila Olímpia.</p>
<p>O evento foi totalmente gratuito,  organizado da comunidade para a comunidade,  o @porcelli assumiu todos os custos sozinho e contou com a colaboração voluntária do público para cobrir as despesas com o evento. Uma ideia genial, principalmente por abraçar a causar e assumir as despesas sem ter certeza do retorno. Deixo aqui meus parabéns ao Porcelli, por ter feito o evento acontecer e ter assumido praticamente sozinho todos os riscos do negócio.</p>
<p>Não pude ficar até o final, mas acompanhei todas as palestras da parte da manhã, tive o prazer de encontrar vários amigos e conhecer o Alberto Lerner, da 10Gen, empresa mantenedora do MongoDB. As palestras que assisti tiveram um ótimo conteúdo técnico e mostra o quanto os bancos NoSQL podem ser uma ótima alternativa para armazenar e organizar dados, onde o SQL tradicional não se encaixaria de forma eficiente. Ficou claro também que os desenvolvedores não são contra o SQL, apenas criaram uma opção de escolha.</p>
<p>Eu tenho acompanhado esse assunto desde o início do <em>hype</em>, testei o CouchDB, MongoDB e Cassandra. Acabei escolhendo o MongoDB e estou trabalhando em dois projetos onde o MongoDB se encaixou como uma luva, pelo simples motivo de ser orientado a documentos e não precisar de um schema previamente criado. Nas próximas semanas estarei publicando maiores informações sobre o MongoDB e quero compartilhar essa experiência, os benefícios e os problemas que tive durante a construção dessas aplicações.</p>
<p>E já estou aguardando a segunda edição do evento! Até lá, espero ter um <em>caso de sucesso</em> para apresentar.</p>
<p>Site do evento: ﻿<a href="http://nosqlbr.com/" target="_blank">http://nosqlbr.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://christiano.me/2010/05/16/resumo-do-evento-nosqlbr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primeiro projeto com Python, Django e MongoDB</title>
		<link>http://christiano.me/2010/04/27/primeiro-projeto-com-python-django-e-mongodb/</link>
		<comments>http://christiano.me/2010/04/27/primeiro-projeto-com-python-django-e-mongodb/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 15:13:03 +0000</pubDate>
		<dc:creator>Christiano Anderson</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://christiano.me/?p=1075</guid>
		<description><![CDATA[Estou desde o começo deste ano acompanhando o hype dos bancos de dados orientados a documento, também chamado de NoSQL (embora não goste muito deste termo). Como bom curioso, resolvi testar algumas variações como o CouchDB e MongoDB, onde acabei me identificando mais com o segundo. Gostei da praticidade e rapidez em fazer as coisas [...]]]></description>
			<content:encoded><![CDATA[<p>Estou desde o começo deste ano acompanhando o <em>hype</em> dos bancos de dados orientados a documento, também chamado de NoSQL (embora não goste muito deste termo). Como bom curioso, resolvi testar algumas variações como o CouchDB e MongoDB, onde acabei me identificando mais com o segundo. Gostei da praticidade e rapidez em fazer as coisas com ele, também a performance me chamou muito a atenção, tem uma boa biblioteca Python e a documentação é muito objetiva, com exemplos de uso. Esses pontos foram decisivos para a escolha.</p>
<p>Com um banco de dados orientado a documentos, não existe a necessidade de criar o modelo das tabelas, basta definir um documento (estilo JSON) e inserir na base. Esses documentos podem ter campos a mais ou a menos dependendo da necessidade e tudo pode ser indexado e encontrado facilmente.</p>
<p>Estou trabalhando em um projeto onde é necessário indexar uma grande quantidade de informações e documentos. O problema é que muitos documentos não seguem um padrão e existe a necessidade de estar alimentando a base a todo instante com novas informações. Já desenvolvi modelos de busca neste estilo utilizando o Xapian, que é uma excelente ferramenta. Porém a performance fica bastante prejudicada quando a base é atualizada várias vezes ao dia, pois o Xapian mantém muito bem sua performance quando sua base (Quartz) está com os índices devidamente criados e compactados. Ficar atualizando esses índices o tempo todo prejudica a aplicação.</p>
<p>Fiz um teste importando todos esse volume de informações em uma base do MongoDB. Fiquei surpreso pela rapidez em importar os dados, cheguei a acreditar que tivesse acontecido algum problema durante a importação. Mas mexendo no banco, pude observar que tudo foi importado. Com algumas ferramentas desenvolvidas em Python, é possível alimentar a base a todo instante com novas informações e percebi que isso não atrapalha a performance das consultas. Mais um ponto a favor do MongoDB.</p>
<p>A aplicação frontend está sendo desenvolvida em Django, que não suporta oficialmente o MongoDB, mas utilizando módulos externos, é possível fazer o Django falar com MongoDB sem muita dificuldade. Cheguei a testar o <a href="http://hmarr.com/mongoengine/django.html" target="_blank">MongoEngine</a> e outras receitas (como nos posts <a href="http://blog.montylounge.com/2010/02/11/integrating-mongodb-and-django/" target="_blank">integrating MongoDB and Django</a> e <a href="http://nosql.mypopescu.com/post/408753658/python-django-and-mongodb" target="_blank">Python, Django e MongoDB</a>) mas para meu caso, foi mais fácil usar as ferramentas desenvolvidas internamente em Python para inserir e buscar valores da base.</p>
<p>De uma forma geral o MongoDB é uma ótima solução para armazenar e buscar um volume grande de documentos. Não posso dizer que é melhor ou pior que um banco de dados relacional, tudo depende do modelo de negócio, da aplicação e do que pretende fazer com as informações. Cada caso é um caso, seria muito injusto em dizer que vou substituir todas minhas aplicações de banco de dados relacional para o banco de dados orientado a documentos. Mas os testes serviram para mostrar não é apenas um <em>hype</em>, os bancos orientados a documentos podem ser uma ótima solução para casos mais complexos, que não dependem apenas de um simples CRUD.</p>
<p>De bônus, vale a leitura do post <a href="http://blog.boxedice.com/2009/07/25/choosing-a-non-relational-database-why-we-migrated-from-mysql-to-mongodb/" target="_blank">Choosing a non-relational database; why we migrated from MySQL to MongoDB</a>, estou totalmente de acordo com as opiniões do autor e passei por situações bem parecidas.</p>
<p>Nos próximos dias publicarei mais informações sobre MongoDB e um pequeno tutorial. Se desejar ser informado, aproveite para assinar o conteúdo desse blog, basta inserir seu e-mail no campo logo abaixo deste post (e-mails só serão enviados quando existir atualização de conteúdo do blog).</p>
]]></content:encoded>
			<wfw:commentRss>http://christiano.me/2010/04/27/primeiro-projeto-com-python-django-e-mongodb/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>MongoDB e Python</title>
		<link>http://christiano.me/2010/02/20/mongodb-e-python/</link>
		<comments>http://christiano.me/2010/02/20/mongodb-e-python/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 19:13:27 +0000</pubDate>
		<dc:creator>Christiano Anderson</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://christiano.me/?p=975</guid>
		<description><![CDATA[Em novembro de 2009 publiquei minhas impressões sobre o CouchDB, já que estou desde então estudando banco de dados NoSQL para aplicações bem específicas. Permaneci por alguns meses estudando o CouchDB, que é mantido pela Apache Foundation e realizei diversos testes. O banco de dados se demonstrou bem eficiente para o modelo de aplicação que [...]]]></description>
			<content:encoded><![CDATA[<p><!-- noadsense --><br />
Em novembro de 2009 publiquei minhas <a title="Impressões sobre o CouchDB" href="http://christiano.me/2009/11/26/impressoes-sobre-couchdb/" target="_blank">impressões sobre o CouchDB</a>, já que estou desde então estudando banco de dados NoSQL para aplicações bem específicas. Permaneci por alguns meses estudando o CouchDB, que é mantido pela Apache Foundation e realizei diversos testes. O banco de dados se demonstrou bem eficiente para o modelo de aplicação que estou trabalhando, no caso a performance foi bem superior ao MySQL, já que tenho um volume de informações enorme e o fato de trabalhar com documentos &#8212; para esta minha aplicação específica &#8212; foi o que me chamou a atenção para um banco de dados estilo NoSQL.</p>
<p>Resolvi dar uma espiadinha em outro banco de dados no mesmo estilo, o <a href="http://mongodb.org" target="_blank">MongoDB</a>. Instalei no meu ambiente e realizei os mesmos testes. No CouchDB demorei muito tempo para realizar algumas operações simples, enquanto que no MongoDB, realizei  os mesmos procedimentos de maneira mais rápida e sem me enroscar nas configurações e na manutenção do banco. Em termos de performance &#8212; no caso da minha aplicação &#8212; os dois bancos se mostraram praticamente iguais.</p>
<p>Embora o CouchDB também tenha bibliotecas para trabalhar em Python, a do MongoDB parece ser mais simples e direta. Pelo menos me identifiquei melhor com sua biblioteca e consegui adaptar minha aplicação rapidamente para trabalhar com o MongoDB, descartando o tempo que levei para o aprendizado e leitura das documentações, demorei menos tempo para desenvolver um script totalmente funcional para MongoDB do que para CouchDB. Isso não quer dizer que o CouchDB seja ruim e ainda não tenho o volume de informações necessárias para fazer um benchmark ou dar opinião sobre qual é melhor.</p>
<p>É muito simples trabalhar em Python com o MongoDB, veja um exemplo:</p>
<pre name="code" class="python">
#!/usr/bin/python

from pymongo import Connection
import datetime

con = Connection('localhost', 27017)
db = con['teste01']

user = {"nome":"Fulano",
        "sobrenome":"de Tal",
        "email":"fulano@detal.net",
        "data_inclusao": datetime.datetime.now()}

# Insere
users = db.users
users.insert(user)
</pre>
<p>O código acima cria um banco no MongoDB (veja as <a href="http://www.mongodb.org/display/DOCS/Downloads">instruções para instalação</a> e veja também a <a href="http://api.mongodb.org/python/1.4%2B/index.html">documentação Python para MongoDB</a>) e insere um registro no dict user para o banco de dados. Como o trabalho é feito em um banco de dados não relacional, não há necessidades de definir o layout da tabela. O layout é definido à medida que os documentos são definidos e é flexível, podendo ser alterada a qualquer momento. </p>
<p>A pesquisa na base de dados pode ser feita com o seguinte código:</p>
<pre name="code" class="python">
#!/usr/bin/python

from pymongo import Connection

con = Connection('localhost', 27017)
db = con['teste01']

# Pesquisa um só
users = db.users
a = users.find_one({"email":"fulano@detal.net"})
print a

# Pesquisa varios
for u in users.find():
    print u['nome'], u['email']
</pre>
<p>Entre o CouchDB e o MongoDB eu me identifiquei mais com o segundo. Consegui fazer as tarefas de forma mais rápida e eficiente. Mas o primeiro também é um ótimo banco, merece ser estudado. Provavelmente continuarei meus estudos e desenvolvendo a pesquisa em cima do MongoDB, pois tem uma documentação um pouco melhor e mais ferramentas para trabalhar na base de dados. </p>
<p>O próximo passo é integrar uma aplicação Django no MongoDB. Mas isso é motivo para outro post! <img src='http://christiano.me/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://christiano.me/2010/02/20/mongodb-e-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

