BerkeleyDB com Python
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 a instalação do módulo pybsddb 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:
btopen - Abrir uma base de dados em BTree
hashopen - Abrir uma base de dados em Hash
rnopen - Abrir uma base de dados Reqno
Todas com a mesma finalidade, porém com "backends" diferentes e com propostas específicas.
O que realmente me surpreendeu, é a facilidade com que se adiciona, altera e remove registros, por exemplo:
[python]import bsddb3
db = bsddb3.btopen('teste.db') # A menos que voce saiba o que esta fazendo, recomendo usar BTree
db['nome'] = 'Rafael "SDM" Sierra'
del db
db = bsddb3.btopen('teste.db')
print db['nome'][/python]
E a saída desse programa será exatamente o nome entrado na variável antes dela ser deletada, incrivel não?!?!
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 Shelve 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?"
Bom, eu já vi na lista do PythonBrasil 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 http://www.python.org/doc/2.4/lib/node76.html
"The choice of which database package will be used (such as dbm, gdbm or bsddb) depends on which interface is available."
E ao contrário disso, onde quer que você esteja, a interface em BerkeleyDB nativa[1] sempre irá rodar.
[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)
Editado: Ao contrario do que foi dito, essa funcionalidade é mantida por questões de compatibilidade com o Python, veja mais em http://pybsddb.sourceforge.net/bsddb3.html no item 1 da introdução (pois é, ler a documentação sempre ajuda).
Sem comentários (ainda) para “BerkeleyDB com Python”
Deixe um comentário |


OmG!!! It’s new blog domain of death!!!!
oh!! email de boy!!!
heheheheeheh!!
|_|
layout |_| !!
\o/
BerkeleyDB é baum… Python é baum tb… com ctypes então…