2009-04-01 17 views
8

giờ tôi đã dành tìm kiếm ví dụ về cách sử dụng các mô-đun bsddb và những người duy nhất mà tôi đã tìm thấy là những (from here):Tôi có thể tìm các ví dụ về bsddb đang sử dụng ở đâu?

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

Có ai biết nơi tôi có thể tìm thêm (thực tế) ví dụ về cách sử dụng gói này?

Hoặc liệu có ai có thể chia sẻ mã mà họ đã tự viết mà sử dụng không?

Edit:

Lý do tôi chọn Berkeley DB là do khả năng mở rộng của nó. Tôi đang nghiên cứu phân tích ngữ nghĩa tiềm ẩn khoảng 2,2 triệu trang web. Thử nghiệm đơn giản của tôi trong 14 trang web tạo ra khoảng 500.000 bản ghi. Vì vậy, làm toán ra ... sẽ có khoảng 78,6 tỷ bản ghi trong bảng của tôi.

Nếu có ai biết về một mô hình cơ sở dữ liệu hiệu quả, có thể mở rộng khác mà tôi có thể sử dụng python để truy cập, vui lòng cho tôi biết về nó! (lt_kije đã mang nó đến sự chú ý của tôi rằng bsddb bị phản đối bằng Python 2.6 và sẽ biến mất trong 3. *)

+0

Tôi tạo ra một graphdb trên bsddb3 đầu, HTH https://pypi.python.org/pypi/ajgu – amirouche

Trả lời

8

Những ngày này, hầu hết mọi người sử dụng mô-đun meta anydbm để giao tiếp với cơ sở dữ liệu giống như db. Nhưng API về cơ bản giống như dict; xem PyMOTW để biết một số ví dụ. Lưu ý rằng bsddb không được chấp nhận trong 2.6.1 và sẽ bị mất trong 3.x. Chuyển sang anydbm sẽ làm cho việc nâng cấp dễ dàng hơn; chuyển sang sqlite (hiện đang trong stdlib) sẽ cung cấp cho bạn một cửa hàng linh hoạt hơn nhiều.

+0

nhưng SQLLite có thể mở rộng như thế nào? Một trong những lý do tôi chọn sử dụng Berkeley DB là vì "Berkeley DB tăng lên rất tốt. Nó có thể quản lý các bảng nhiều terabyte với các bản ghi đơn lớn tới bốn gigabyte". – tgray

+0

Tôi nghĩ rằng sqlite có thể xử lý cơ sở dữ liệu lên đến 2TB, mặc dù tôi đã không đẩy nó gần như xa đến nay bản thân mình. Trích dẫn của bạn dường như đến từ tài liệu db của Oracle. Tôi không tin rằng điều đó có liên quan nhiều đến việc triển khai được hỗ trợ bởi Python. Chính xác thì bạn đang cố gắng làm gì? –

+0

Ah - nhận xét mới của bạn sẽ giúp ích. ;) Ở quy mô đó, tôi nghĩ bạn nên sử dụng RDBMS (PostgreSQL, MySQL, v.v.). SQLite sẽ là một nơi khởi đầu tốt, vì nó cung cấp một giao diện DBAPI sẽ tương thích với các đầu nối RDBMS chính trong Python. –

4

Tìm kiếm "bsddb nhập khẩu", tôi nhận được:

... nhưng cá nhân tôi rất muốn giới thiệu bạn sử dụng sqlite thay vì bsddb, mọi người đang sử dụng rất nhiều mo lại vì một lý do.

+0

Cảm ơn đã cho tôi làm thế nào bạn tìm thấy chúng quá. Tôi đã quên điều đó. – tgray

+0

Thật không may tôi không nghĩ rằng sqlite sẽ mở rộng đủ cho ứng dụng của tôi (câu hỏi cập nhật). Nếu bạn biết rằng sqlite sẽ làm việc (với một số chắc chắn), xin vui lòng cho tôi biết! – tgray

+0

Tôi không chắc chắn sqlite sẽ quy mô tốt, nhưng tôi cũng không chắc chắn bsddb sẽ quy mô tốt hoặc. Nếu bạn đang tạo ra các dữ liệu và sau đó truy cập vào nó rất nhiều, cdb có thể là đặt cược tốt nhất của bạn. –

5

Nhìn vào: Lib3/bsddb/kiểm tra sau khi tải nguồn từ http://pypi.python.org/pypi/bsddb3/

Sự phân bố dòng có chứa các xét nghiệm sau đây mà rất hữu ích để bắt đầu làm việc với 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

Các bài kiểm tra đôi khi là tài liệu duy nhất trong một số dự án tôi đã nhìn thấy. –

5

Tôi giả định chủ đề này vẫn còn hoạt động, vì vậy ở đây chúng tôi đi. Đây là mã thô và không có kiểm tra lỗi, nhưng nó có thể hữu ích như là một điểm khởi đầu.

Tôi muốn sử dụng các hàm DBA dựng sẵn của PHP và sau đó đọc cơ sở dữ liệu bằng cách sử dụng tập lệnh Python (2.x). Đây là kịch bản PHP tạo ra cơ sở dữ liệu:

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

Bây giờ, đây là các mã PHP để chèn một mục: Tôi sử dụng JSON để giữ "thật" dữ liệu:

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

Bây giờ, đây là đoạn code mà bạn và tôi thực sự quan tâm, và nó sử dụng mô-đun bsddb3 của 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

Chương trình Gramps phả hệ sử dụng bsddb cho cơ sở dữ liệu của nó