2009-04-01 6 views
8

J'ai passé des heures à la recherche d'exemples de la façon d'utiliser le module bsddb et les seuls que j'ai trouvé sont ces (from here):Où puis-je trouver des exemples de bsddb en cours d'utilisation?

data = mydb.get(key) 
if data: 
    doSomething(data) 
##################### 
rec = cursor.first() 
while rec: 
    print rec 
    rec = cursor.next() 
##################### 
rec = mydb.set() 
while rec: 
    key, val = rec 
    doSomething(key, val) 
    rec = mydb.next() 

Est-ce que quelqu'un sait où je pourrais trouver plus (pratique) des exemples de comment utiliser ce paquet?

Ou est-ce que quelqu'un voudrait partager le code qu'ils ont écrit eux-mêmes qui l'ont utilisé?

Edit:

La raison pour laquelle j'ai choisi le Berkeley DB était en raison de son évolutivité. Je travaille sur une analyse sémantique latente d'environ 2,2 millions de pages web. Mon simple test de 14 pages Web génère environ 500 000 enregistrements. Donc faire le calcul ... il y aura environ 78,6 milliards d'enregistrements dans ma table.

Si quelqu'un connaît un autre modèle de base de données efficace et évolutif que je peux utiliser pour accéder à python, s'il vous plaît faites le moi savoir! (lt_kije a apporté à mon attention que bsddb est dépréciée en Python 2.6 et seront partis en 3. *)

+0

J'ai créé un graphdb sur bsddb3, HTH https://pypi.python.org/pypi/ajgu – amirouche

Répondre

8

De nos jours, la plupart des gens utilisent le méta-module anydbm pour s'interfacer avec des bases de données de type db. Mais le API est essentiellement dicté; Voir PyMOTW pour quelques exemples. Notez que bsddb est obsolète dans 2.6.1 et sera parti dans 3.x. Passer à anydbm facilitera la mise à niveau. passer à sqlite (qui est maintenant dans stdlib) vous donnera un magasin beaucoup plus flexible.

+0

mais quelle est la taille de SQLLite? L'une des raisons pour lesquelles j'ai choisi d'utiliser Berkeley DB est que "Berkeley DB évolue très bien et peut gérer des tables de plusieurs téraoctets avec des enregistrements uniques de quatre gigaoctets". – tgray

+0

Je pense que sqlite peut gérer des bases de données jusqu'à 2 To, même si je ne l'ai pas poussé aussi loin. Votre citation semble provenir de la documentation db d'Oracle. Je ne crois pas que cela a beaucoup à voir avec les implémentations supportées par Python. Qu'essayez-vous exactement de faire? –

+0

Ah - votre nouveau commentaire aide. ;) A cette échelle, je pense qu'il vaut mieux utiliser un SGBDR (PostgreSQL, MySQL, etc). SQLite sera un bon point de départ, car il fournit une interface DBAPI compatible avec les principaux connecteurs RDBMS de Python. –

4

Recherche de "bsddb d'importation", je reçois:

... mais personnellement, je vous recommande fortement d'utiliser au lieu de vous sqlite bsddb, les gens utilisent l'ancien beaucoup mo re pour une raison.

+0

Merci de me dire comment vous les avez trouvés aussi. J'avais oublié ce truc. – tgray

+0

Malheureusement, je ne pense pas que sqlite évoluera assez bien pour mon application (question mise à jour). Si vous savez que sqlite fonctionnera (avec une certaine certitude), s'il vous plaît faites le moi savoir! – tgray

+0

Je ne suis pas sûr que sqlite évoluera aussi bien, mais je ne suis pas sûr que bsddb évoluera bien non plus. Si vous créez des données et que vous y accédez beaucoup, cdb pourrait être votre meilleur choix. –

5

Regardez: lib3/bsddb/test après avoir téléchargé la source de http://pypi.python.org/pypi/bsddb3/

La distribution actuelle contient les tests suivants qui sont très utiles pour commencer à travailler avec bsddb3:

 
test_all.py 
test_associate.py 
test_basics.py 
test_compare.py 
test_compat.py 
test_cursor_pget_bug.py 
test_dbenv.py 
test_dbobj.py 
test_db.py 
test_dbshelve.py 
test_dbtables.py 
test_distributed_transactions.py 
test_early_close.py 
test_fileid.py 
test_get_none.py 
test_join.py 
test_lock.py 
test_misc.py 
test_pickle.py 
test_queue.py 
test_recno.py 
test_replication.py 
test_sequence.py 
test_thread.py 
+0

Les tests sont parfois la seule documentation dans certains projets que j'ai vus. –

5

Je suppose ce fil est toujours actif, alors on y va. C'est un code approximatif et il n'y a pas de vérification d'erreur, mais cela peut être utile comme point de départ. Je voulais utiliser les fonctions DBA intégrées à PHP, puis lire la base de données à l'aide d'un script Python (2.x). Voici le script PHP qui crée la base de données:

<?php 
$id=dba_open('visitor.db', 'c', 'db4'); 
dba_optimize($id); 
dba_close($id); 
?> 

Maintenant, voici le code PHP pour insérer une entrée: J'utilise JSON pour maintenir les données « réel »:

<?php 
/* 
    record a visit in a BSD DB 
*/ 
$id=dba_open('visitor.db', 'w', 'db4'); 
if (!$id) { 
    /* dba_open failed */ 
    exit; 
} 
$key = $_SERVER['REQUEST_TIME_FLOAT']; 
$rip = $_SERVER['REMOTE_ADDR']; 
$now = date('d-m-Y h:i:s a', time()); 
$data = json_encode(array('remote_ip' => $rip, 'timestamp' => $now)); 
$userdata=array($key => $data); 
foreach ($userdata as $key=>$value) { 
dba_insert($key, $value, $id); 
} 
dba_optimize($id); 
dba_close($id); 
?> 

Maintenant, voici le code que vous et moi sommes réellement intéressés, et il utilise le module bsddb3 de Python.

#!/usr/bin/env python 
from bsddb3 import db 
import json 

fruitDB = db.DB() 
fruitDB.open('visitor.db',None,db.DB_BTREE,db.DB_DIRTY_READ) 
cursor = fruitDB.cursor() 
rec = cursor.first() 

while rec: 
    print rec 
    visitordata = rec[1] 
    print '\t' + visitordata 
    jvdata = json.loads(visitordata) 
    print jvdata 
    rec = cursor.next() 
    print '\n\n' 
print '----'; 

fruitDB.close() 
1

Le programme de généalogie Gramps utilise bsddb pour sa base de données

Questions connexes