BerkeleyDB com Python

Postado por Rafael Sierra em 5/01/2007

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”

  1. Gabriel disse em 5/01/2007 as 00:36

    OmG!!! It’s new blog domain of death!!!! :D
    oh!! email de boy!!!
    heheheheeheh!!

  2. Gabriel disse em 5/01/2007 as 18:23

    |_|

  3. Gabriel disse em 5/01/2007 as 19:04

    layout |_| !!

  4. [Yy]oshio disse em 5/01/2007 as 23:16

    \o/
    BerkeleyDB é baum… Python é baum tb… com ctypes então…

Trackback URI | RSS dos comentários

Deixe um comentário

Av. Conselheiro Nébias, 368A, Cj. 413
Vila Mathias - Santos - SP
Telefone: (13) 3345-4580

© 2008 - 2009 Stiod. Todos os direitos reservados.