<?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>Stiod Blog &#187; BerkeleyDB</title>
	<atom:link href="http://blog.stiod.com/category/berkeleydb/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.stiod.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 22 Feb 2010 14:20:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>BerkeleyDB com Python</title>
		<link>http://blog.stiod.com/2007/01/05/berkeleydb-com-python/</link>
		<comments>http://blog.stiod.com/2007/01/05/berkeleydb-com-python/#comments</comments>
		<pubDate>Fri, 05 Jan 2007 03:04:36 +0000</pubDate>
		<dc:creator>Rafael Sierra</dc:creator>
				<category><![CDATA[BerkeleyDB]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.stiod.com.br/blog2/?p=7</guid>
		<description><![CDATA[Ontem (03/01/2007) eu pude ver o quão rapido é o BerkeleyDB gerenciando 44.000.000+ de registros em uma unica base de dados, e com isso em mente eu pensei em escrever um post pra mostrar ele em funcionamento como buffer, que seria uma fila simples, onde você adiciona e remove registros.
Porém, quando tive alguns contratempos com [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem (03/01/2007) eu pude ver o quão rapido é o <a href="http://www.sleepycat.com">BerkeleyDB</a> gerenciando 44.000.000+ de registros em uma unica base de dados, e com isso em mente eu pensei em escrever um post pra mostrar ele em funcionamento como buffer, que seria uma fila simples, onde você adiciona e remove registros.</p>
<p>Porém, quando tive alguns contratempos com a instalação do módulo <a href="http://pybsddb.sourceforge.net/">pybsddb</a> na versão 4.3, o que me forçou a instalar a versão 4.4 dele, até ai tudo bem, instalei o módulo e o BerkeleyDB na versão 4.4, dai, eu fui no terminal testar o sistema, como eu não lembrava dos comandos exatos resolvi rodar um "help(bsddb3)" e ver como era, mas nesse momento vi uma coisa que não tinha visto versão anterior, três funções no módulo base:</p>
<p>btopen - Abrir uma base de dados em BTree<br />
hashopen - Abrir uma base de dados em Hash<br />
rnopen - Abrir uma base de dados Reqno</p>
<p>Todas com a mesma finalidade, porém com "backends" diferentes e com propostas específicas.<br />
<span id="more-5"></span><br />
O que realmente me surpreendeu, é a facilidade com que se adiciona, altera e remove registros, por exemplo:<br />
[python]import bsddb3<br />
db = bsddb3.btopen('teste.db') # A menos que voce saiba o que esta fazendo, recomendo usar BTree<br />
db['nome'] = 'Rafael "SDM" Sierra'<br />
del db<br />
db = bsddb3.btopen('teste.db')<br />
print db['nome'][/python]</p>
<p>E a saída desse programa será exatamente o nome entrado na variável antes dela ser deletada, incrivel não?!?!</p>
<p>Nesse momento, você que já conhece Python pensa: "Ei, espera um pouco eu sei o que é isso!!", e eu respondo, sim você está certo, isso é exatamente como o <a href="http://www.python.org/doc/2.4/lib/module-shelve.html">Shelve</a> builtin do Python, e em seu direito de questionar-me você o faz: "Mas por que raios eu devo deixar de usar Shelve e passar a usar o BerkeleyDB?"</p>
<p>Bom, eu já vi na lista do <a href="http://www.pythonbrasil.com.br">PythonBrasil</a> varias discuções que diziam que o módulo Shelve não é totalmente portavel devido a seu backend ser em dbm pois ela pode variar um pouco entre as maquinas que rodarem seu sistema, veja o seguinte texto retirado de <a href="http://www.python.org/doc/2.4/lib/node76.html">http://www.python.org/doc/2.4/lib/node76.html</a></p>
<p>"The choice of which database package will be used (such as <a href="http://www.python.org/doc/2.4/lib/module-dbm.html">dbm</a>, <a href="http://www.python.org/doc/2.4/lib/module-gdbm.html">gdbm</a> or <a href="http://www.python.org/doc/2.4/lib/module-bsddb.html">bsddb</a>) depends on which interface is available."</p>
<p>E ao contrário disso, onde quer que você esteja, a interface em BerkeleyDB nativa[1] sempre irá rodar.</p>
<p>[1] - Me refiro a nativa pois o módulo bsddb3 na verdade é uma binding pra biblioteca do BerkeleyDB, então quando ele grava alguma coisa na base de dados, a funcão executada está definida na biblioteca ".so" do Linux (ou na DLL do Windows)</p>
<p><strong>Editado</strong>: Ao contrario do que foi dito, essa funcionalidade é mantida por questões de compatibilidade com o Python, veja mais em <a href="http://pybsddb.sourceforge.net/bsddb3.html">http://pybsddb.sourceforge.net/bsddb3.html</a> no item 1 da introdução (pois é, ler a documentação sempre ajuda).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2007/01/05/berkeleydb-com-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
