2009-04-01 14 views
8

ore che ho trascorso alla ricerca di esempi di come utilizzare il modulo bsddb e gli unici che ho trovato sono queste (from here):Dove posso trovare esempi di bsddb in uso?

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() 

Qualcuno sa dove potrei trovare di più (pratico) esempi di come utilizzare questo pacchetto?

O qualcuno avrebbe in mente di condividere il codice che hanno scritto da solo che l'ha usato?

Edit:

La ragione per cui ho scelto il Berkeley DB è stato a causa della sua scalabilità. Sto lavorando a un'analisi semantica latente di circa 2,2 milioni di pagine web. La mia semplice verifica di 14 pagine Web genera circa 500.000 record. Così facendo la matematica ... ci saranno circa 78.6 miliardi di dischi nel mio tavolo.

Se qualcuno conosce un altro modello di database efficiente e scalabile a cui posso accedere python, per favore fatemelo sapere! (lt_kije ha portato alla mia attenzione che bsddb è deprecato in Python 2.6 e sarà andato a 3. *)

+0

ho creato un graphdb in cima bsddb3, HTH https://pypi.python.org/pypi/ajgu – amirouche

risposta

8

In questi giorni, la maggior parte delle persone utilizza il meta-modulo anydbm per interfacciarsi con database db-like. Ma lo API è essenzialmente simile a dict; vedi PyMOTW per alcuni esempi. Si noti che bsddb è deprecato in 2.6.1 e andrà in 3.x. Passare a anydbm renderà più semplice l'aggiornamento; passare a sqlite (che ora è in stdlib) ti darà uno store molto più flessibile.

+0

ma quanto è scalabile SQLLite? Uno dei motivi per cui ho scelto di utilizzare il Berkeley DB è stato il fatto che "Berkeley DB è estremamente scalabile e può gestire tabelle multi-terabyte con record singoli fino a quattro gigabyte". – tgray

+0

Penso che sqlite sia in grado di gestire database fino a 2 TB, anche se non l'ho spinto fino a quel punto. La tua citazione sembra provenire dalla documentazione db di Oracle. Non credo che questo abbia molto a che fare con le implementazioni supportate da Python. Che cosa stai cercando di fare esattamente? –

+0

Ah - il tuo nuovo commento ti aiuta. ;) A quella scala, penso che tu stia meglio usando un RDBMS (PostgreSQL, MySQL, ecc.). SQLite sarà un buon punto di partenza, poiché fornisce un'interfaccia DBAPI che sarà compatibile con i principali connettori RDBMS in Python. –

4

Ricerca di "import bsddb", ottengo:

... ma personalmente mi piacerebbe molto consiglia di utilizzare SQLite invece di bsddb, la gente sta usando il primo a mo sacco per una ragione.

+0

Grazie per dirmi come li hai trovati pure. Avevo dimenticato quel trucco. – tgray

+0

Purtroppo non penso che sqlite scalerà abbastanza bene per la mia applicazione (domanda aggiornata). Se sai che sqlite funzionerà (con una certa sicurezza), per favore fammi sapere! – tgray

+0

Non sono sicuro che sqlite scalerà bene, ma non sono sicuro che anche bsddb scalerà bene. Se stai creando i dati e accedendoti molto, cdb potrebbe essere la soluzione migliore. –

5

un'occhiata a: Lib3/bsddb/test dopo aver scaricato la fonte da http://pypi.python.org/pypi/bsddb3/

la distribuzione di corrente contiene i seguenti test che sono molto utili per iniziare a lavorare con 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

I test a volte sono l'unica documentazione in alcuni progetti che ho visto. –

5

Sto assumendo questo thread è ancora attivo, quindi eccoci qui. Questo è codice approssimativo e non c'è controllo degli errori, ma potrebbe essere utile come punto di partenza.

Volevo utilizzare le funzioni DBA integrate di PHP e quindi leggere il database utilizzando uno script Python (2.x). Ecco lo script PHP che crea il database:

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

Ora, ecco il codice PHP per inserire una voce: Io uso JSON per contenere i dati "reali":

<?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); 
?> 

Ora, ecco il codice che io e te siamo realmente interessati e utilizza il modulo bsddb3 di 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

Il programma Gramps genealogia utilizza bsddb per la sua base di dati

Problemi correlati