2009-04-01 9 views
8

horas que he pasado en busca de ejemplos de cómo utilizar el módulo bsddb y los únicos que he encontrado son los siguientes (from here):¿Dónde puedo encontrar ejemplos de bsddb en 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() 

¿Alguien sabe dónde puedo encontrar más (práctica) ejemplos de cómo usar este paquete?

¿O alguien le importaría compartir el código que ellos mismos han escrito que lo usó?

Editar:

La razón por la que elegí el Berkeley DB era debido a su escalabilidad. Estoy trabajando en un análisis semántico latente de alrededor de 2,2 millones de páginas web. Mi simple prueba de 14 páginas web genera alrededor de 500,000 registros. Así que al sacar las matemáticas ... habrá alrededor de 78.6 mil millones de registros en mi mesa.

Si alguien sabe de otro modelo de base de datos eficiente y escalable al que puedo utilizar Python para acceder, ¡por favor hágamelo saber! (lt_kije ha traído a mi atención que bsddb está en desuso en Python 2.6 y habrá desaparecido en 3. *)

+0

creé una graphdb en la parte superior bsddb3, HTH https://pypi.python.org/pypi/ajgu – amirouche

Respuesta

8

En la actualidad, la mayoría de las personas usan el meta-módulo anydbm para interactuar con bases de datos similares a db. Pero el API es esencialmente similar a un dictado; ver PyMOTW para algunos ejemplos. Tenga en cuenta que bsddb está en desuso en 2.6.1 y desaparecerá en 3.x. Cambiar a anydbm facilitará la actualización; cambiar a sqlite (que ahora está en stdlib) te dará una tienda mucho más flexible.

+0

, pero ¿cuán escalable es SQLLite? Una de las razones por las que elegí usar el DB de Berkeley fue porque "Berkeley DB se adapta muy bien. Puede administrar tablas de varios terabytes con registros únicos de hasta cuatro gigabytes". – tgray

+0

Creo que sqlite puede manejar bases de datos de hasta 2TB, aunque yo mismo no lo he llevado tan lejos. Su cita parece provenir de la documentación de db de Oracle. No creo que eso tenga mucho que ver con las implementaciones compatibles con Python. ¿Qué estás tratando de hacer exactamente? –

+0

Ah, tu nuevo comentario ayuda. ;) En esa escala, creo que es mejor utilizar un RDBMS (PostgreSQL, MySQL, etc.). SQLite será un buen punto de partida, ya que proporciona una interfaz DBAPI que será compatible con los principales conectores RDBMS en Python. –

4

La búsqueda de "bsddb importación", me sale:

... pero personalmente había gran medida recomiendan utiliza SQLite en lugar de bsddb, la gente está utilizando el primero un montón mo re por una razón.

+0

Gracias por decirme cómo has encontrado también. Había olvidado ese truco. – tgray

+0

Lamentablemente, no creo que sqlite se escale suficientemente bien para mi aplicación (pregunta actualizada). Si sabes que sqlite funcionará (con cierta certeza), ¡házmelo saber! – tgray

+0

No estoy seguro de que sqlite se escale bien, pero tampoco estoy seguro de que bsddb se escale bien. Si está creando los datos y luego accediéndolos mucho, cdb podría ser su mejor opción. –

5

Mira: Lib3/bsddb/prueba después de la descarga de la fuente de la http://pypi.python.org/pypi/bsddb3/

La distribución actual contiene las siguientes pruebas que son muy útiles para empezar a trabajar 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

Las pruebas son a veces la única documentación en algunos proyectos que he visto. –

5

Asumo este hilo todavía está activo, así que aquí vamos. Este es un código aproximado y no hay verificación de errores, pero puede ser útil como punto de partida.

Quería usar las funciones integradas de DBA de PHP y luego leer la base de datos usando una secuencia de comandos de Python (2.x). Aquí está el script PHP que crea la base de datos:

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

Ahora, aquí está el código PHP para insertar una entrada: Consumo JSON para mantener la "real" de datos:

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

Ahora, aquí está el código que usted y yo estamos realmente interesados, y que utiliza el módulo 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

El programa utiliza la genealogía Gramps bsddb de su base de datos

Cuestiones relacionadas