2009-04-01 9 views
8

मैं बिताया है और केवल लोगों को कैसे bsddb मॉड्यूल का उपयोग करने के लिए के उदाहरण के लिए खोज घंटे कि मैंने पाया हैं इन (from here):मैं उपयोग में 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() 

किसी को भी पता है कि मैं कहाँ मिल सकता है और अधिक (व्यावहारिक) इस पैकेज का उपयोग कैसे करें इसके उदाहरण?

या क्या कोई भी साझा करने वाले कोड को याद रखेगा जिसे उन्होंने स्वयं लिखा है?

संपादित करें:

कारण मैं चुना है बर्कले DB अपनी क्षमता की वजह से था। मैं 2.2 मिलियन वेब पृष्ठों के एक गुप्त अर्थपूर्ण विश्लेषण पर काम कर रहा हूं। 14 वेब पेजों का मेरा सरल परीक्षण लगभग 500,000 रिकॉर्ड उत्पन्न करता है। तो गणित कर रहे हैं ... मेरी मेज में लगभग 78.6 बिलियन रिकॉर्ड होंगे।

यदि कोई अन्य कुशल, स्केलेबल डेटाबेस मॉडल के बारे में जानता है जिसे मैं पाइथन तक पहुंचने के लिए उपयोग कर सकता हूं, तो कृपया मुझे इसके बारे में बताएं!

+0

मैं शीर्ष bsddb3 पर एक graphdb, HTH https://pypi.python.org/pypi/ajgu – amirouche

उत्तर

8

इन दिनों, अधिकांश लोग anydbm मेटा-मॉड्यूल का उपयोग डीबी-जैसे डेटाबेस के साथ इंटरफेस करने के लिए करते हैं। लेकिन API अनिवार्य रूप से dict-like है; कुछ उदाहरणों के लिए PyMOTW देखें। ध्यान दें कि bsddb को 2.6.1 में बहिष्कृत किया गया है और 3.x में चला जाएगा। किसी भी डीडीबीएम पर स्विचिंग अपग्रेड को आसान बना देगा; एसक्लाइट (जो अब stdlib में है) पर स्विचिंग आपको एक और अधिक लचीला स्टोर देगा। से http://pypi.python.org/pypi/bsddb3/

स्रोत मौजूदा वितरण निम्नलिखित परीक्षणों में शामिल है डाउनलोड करने के बाद Lib3/bsddb/परीक्षण है कि बहुत bsddb3 साथ काम शुरू करने के सहायक होते हैं:

+0

लेकिन SQLLite कितना स्केलेबल है? बर्कले डीबी का उपयोग करने के लिए मैंने जिन कारणों का चयन किया था, उनमें से एक कारण था क्योंकि "बर्कले डीबी बहुत अच्छी तरह से बढ़ता है। यह बहु-टेराबाइट टेबल को एकल रिकॉर्ड के साथ चार गिगाबाइट्स के रूप में प्रबंधित कर सकता है।" – tgray

+0

मुझे लगता है कि स्क्लाइट 2TB तक डेटाबेस को संभाल सकता है, हालांकि मैंने इसे लगभग अपने आप को धक्का नहीं दिया है। आपका उद्धरण ओरेकल के डीबी दस्तावेज से आता है। मुझे विश्वास नहीं है कि पाइथन द्वारा समर्थित कार्यान्वयन के साथ इसका बहुत कुछ करना है। आप वास्तव में क्या करने की कोशिश कर रहे हैं? –

+0

आह - आपकी नई टिप्पणी मदद करता है। ;) उस पैमाने पर, मुझे लगता है कि आप एक आरडीबीएमएस (PostgreSQL, MySQL, आदि) का उपयोग कर सबसे अच्छा है। SQLite एक अच्छी प्रारंभिक जगह होगी, क्योंकि यह एक डीबीएपीआई इंटरफेस प्रदान करता है जो पाइथन में प्रमुख आरडीबीएमएस कनेक्टर के साथ संगत होगा। –

4

"आयात bsddb" की खोज की ( lt_kije यह मेरा ध्यान कि bsddb अजगर 2.6 में हटा दिया गया है और 3 * में चला जाएगा करने के लिए लाया गया है), मैं मिलता है:

... लेकिन व्यक्तिगत रूप से मैं भारी चाहते सुझाव है कि आप bsddb के बजाय SQLite उपयोग करते हैं, लोगों को पूर्व एक बहुत मो उपयोग कर रहे हैं एक कारण के लिए फिर से।

+0

मुझे बता आप उन्हें कैसे पाया के लिए धन्यवाद बनाया भी। मैं उस चाल को भूल गया था। – tgray

+0

दुर्भाग्यवश मुझे नहीं लगता कि स्क्लाइट मेरे आवेदन (अद्यतन प्रश्न) के लिए पर्याप्त पैमाने पर स्केल करेगा। यदि आप जानते हैं कि स्क्लाइट काम करेगा (कुछ निश्चितता के साथ), कृपया मुझे बताएं! – tgray

+0

मुझे यकीन नहीं है कि स्क्लाइट उस पैमाने पर स्केल करेगा, लेकिन मुझे यह भी यकीन नहीं है कि bsddb अच्छी तरह से स्केल करेगा। यदि आप डेटा बना रहे हैं और फिर इसे बहुत एक्सेस कर रहे हैं, तो सीडीबी आपकी सबसे अच्छी शर्त हो सकती है। –

5

पर देखो

 
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

परीक्षण कभी-कभी मैंने देखा है कि कुछ परियोजनाओं में एकमात्र दस्तावेज हैं। –

5

मैं यह सोचते हैं रहा हूँ यह धागा अभी भी सक्रिय है, इसलिए हम यहां जाते हैं। यह किसी न किसी कोड है और कोई त्रुटि जांच नहीं है, लेकिन यह एक शुरुआती बिंदु के रूप में उपयोगी हो सकता है।

मैं PHP के अंतर्निहित डीबीए फ़ंक्शंस का उपयोग करना चाहता था और फिर पाइथन (2.x) स्क्रिप्ट का उपयोग कर डेटाबेस पढ़ना चाहता था। यहाँ PHP स्क्रिप्ट है कि डेटाबेस बनाता है: मैं JSON "वास्तविक" डेटा रखने के लिए उपयोग करें::

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

अब, यहाँ एक प्रविष्टि सम्मिलित करने के लिए PHP कोड है

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

अब, यहाँ कोड है कि आप और मैं वास्तव में रुचि रखते हैं, और यह पायथन के 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() 
1

Gramps वंशावली कार्यक्रम अपने डेटाबेस के लिए bsddb का उपयोग करता

संबंधित मुद्दे