Где я могу найти примеры использования bsddb?
Я часами искал примеры того, как использовать модуль bsddb, и единственные, что я нашел, это ( отсюда):
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()
Кто-нибудь знает, где я мог бы найти больше (практических) примеров того, как использовать этот пакет?
Или кто-то мог бы поделиться кодом, который они написали сами, который использовал его?
Редактировать:
Причиной, по которой я выбрал Berkeley DB, была ее масштабируемость. Я работаю над скрытым семантическим анализом около 2,2 миллиона веб-страниц. Мое простое тестирование 14 веб-страниц дает около 500000 записей. Итак, посчитаем... в моей таблице будет около 78,6 миллиардов записей.
Если кто-нибудь знает другую эффективную, масштабируемую модель базы данных, к которой я могу использовать python, пожалуйста, дайте мне знать об этом! (lt_kije довел до моего сведения, что bsddb
устарела в Python 2.6 и исчезнет в 3.*)
5 ответов
В наши дни большинство людей используют метамодуль anydbm для взаимодействия с базами данных, подобными db. Но API по существу похож на диктовку; см. PyMOTW для некоторых примеров. Обратите внимание, что bsddb устарела в 2.6.1 и исчезнет в 3.x. Переход на anydbm облегчит обновление; переход на sqlite (который сейчас находится в stdlib) даст вам гораздо более гибкий магазин.
Посмотрите на: Lib3/bsddb/test после загрузки источника с http://pypi.python.org/pypi/bsddb3/
Текущий дистрибутив содержит следующие тесты, которые очень полезны для начала работы с 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
Я предполагаю, что этот поток все еще активен, так что здесь мы идем. Это грубый код, и нет проверки ошибок, но он может быть полезен в качестве отправной точки.
Я хотел использовать встроенные в PHP функции DBA, а затем читать базу данных, используя скрипт Python (2.x). Вот скрипт PHP, который создает базу данных:
<?php
$id=dba_open('visitor.db', 'c', 'db4');
dba_optimize($id);
dba_close($id);
?>
Теперь вот код PHP для вставки записи: я использую JSON для хранения "настоящих" данных:
<?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);
?>
Теперь, вот код, который нас на самом деле интересует, и он использует модуль Python bsddb3.
#!/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()
Ища "import bsddb", я получаю:
- http://www.mnot.net/python/Cabinet.py
- http://www.java2s.com/Code/Python/Utility/Dumpadatabasefiletoapickle.htm
... но лично я настоятельно рекомендую вам использовать sqlite вместо bsddb, люди используют первое гораздо чаще.
Генеалогическая программа Gramps использует bsddb для своей базы данных