2010-10-11 12 views
18

मैंने सुना है कि बी-ट्री डेटाबेस हैश टेबल की तुलना में तेज़ हैं, इसलिए मैंने अपने प्रोजेक्ट के लिए बी-ट्री डेटाबेस का उपयोग करने के बारे में सोचा। क्या पाइथन में कोई मौजूदा ढांचा है जो हमें ऐसी डेटा संरचना का उपयोग करने की अनुमति देता है या क्या मुझे स्क्रैच से कोड करना होगा?क्या पाइथन में कोई बी-ट्री डेटाबेस या ढांचा है?

+8

यह आपके आवेदन को समय-समय पर अनुकूलित करने से बचने के लिए एक अच्छा अवसर है। बस एक कामकाजी आवेदन प्राप्त करें और फिर कैंडी कैरेट होने पर प्रदर्शन में सुधार के अवसरों की तलाश करे। वैसे, आप हमेशा अपने प्रश्न के उत्तर के लिए Google में 'पायथन बी-पेड़' डालने का प्रयास कर सकते हैं। –

+1

अच्छी तरह से मेरे पास मेरे आवेदन का प्रोटोटाइप है, लेकिन समस्या यह है कि मुझे डेटा सेट जो मुझे संभालना है, सचमुच लाखों के करीब है, परंपरागत हैशिंग मुझे इतनी तेज गति नहीं दे सकती .. इसलिए बी-पेड़ तक पहुंचने का विचार किया गया। – Rahul

+0

सभी डाउनवॉट्स के साथ क्या हो रहा है? (मैं सिर्फ काउंटर करने के लिए उभरा।) यदि आपको लगता है कि यह प्रश्न और उत्तर बराबर नहीं हैं, तो कृपया टिप्पणी करें। –

उत्तर

22

एक हैश तालिका पर बी-ट्री चुनने का एकमात्र कारण, स्मृति में या ब्लॉक स्टोरेज (डेटाबेस में) के साथ, बराबर के अलावा अन्य प्रश्नों का समर्थन करना है। एक बी-पेड़ आपको अच्छे प्रदर्शन के साथ रेंज पूछताछ करने की अनुमति देता है। कई कुंजी-मूल्य भंडार (जैसे बर्कले डीबी) इस बाहरी रूप से दृश्यमान नहीं होते हैं, हालांकि, क्योंकि वे अभी भी चाबियाँ हैं, लेकिन यह आपको अभी भी पूरे डेटासेट को तेज़ी से और स्थिर रूप से फिर से चालू करने देता है (अगर जोड़े जोड़े जाते हैं तो भी यह मान्य रहता है या हटा दिया जाता है, या पेड़ को पुनर्वित्त किया जाना चाहिए)।

यदि आपको सीमा प्रश्नों की आवश्यकता नहीं है, और आपको समवर्ती पुनरावृत्ति की आवश्यकता नहीं है, तो आपको बी-पेड़ की आवश्यकता नहीं है, हैश तालिका का उपयोग करें, यह किसी भी पैमाने पर तेज़ होगा।

संपादित करें: मेरे ऊपर उपरोक्त वास्तव में सत्य होने का मौका मिला है; इसके लिए, blist पैकेज एक क्रमबद्ध कंटेनर लाइब्रेरी का सबसे पूर्ण कार्यान्वयन प्रतीत होता है।

+0

बर्कले डीबी निश्चित रूप से आपको कर्सर के साथ रेंज पूछताछ करने देता है। Http://docs.oracle.com/cd/E17076_02/html/gsg/CXX/Positioning.html – Gurgeh

+1

"एक हैश तालिका पर बी-ट्री चुनने का एकमात्र कारण, या तो मेमोरी में या ब्लॉक स्टोरेज के बारे में विशेषता ... बराबर के अलावा अन्य प्रश्नों का समर्थन करना है "गलत है। रेंज गुणों के अलावा, बी-पेड़ कुशल आदेशित ट्रैवर्सल प्रदान करते हैं। यह बहुत महत्वपूर्ण हो सकता है। – Christopher

+0

"ऑर्डर ट्रैवर्सल" एक अवधारणा है जो सीमा प्रश्नों से निकटता से संबंधित है, और इसलिए मैं उन्हें अपने उत्तर में एक साथ लंप रहा हूं। – SingleNegationElimination

3

प्रोग्राम जो आप पहले करने की कोशिश कर रहे हैं, फिर आवश्यक होने पर अनुकूलित करें। अवधि।

संपादित करें: अजगर की सूची में बनाया के लिए प्रतिस्थापन में

http://pypi.python.org/pypi/blist

ड्रॉप।

+0

तकनीकी रूप से यह मेरे कार्यक्रम का हिस्सा है, मैं नहीं चाहता MySQL जैसे पारंपरिक डीबी का उपयोग करने के लिए .. और मुझे यह ध्यान में रखने के लिए कहा गया है कि डेटा सम्मिलन बड़े सेट – Rahul

+0

में होगा, इसलिए हैश टेबल द्वारा ऑफ़र किया गया निरंतर लुकअप/एक्सेस टाइम तेज़ नहीं है जो आप कर रहे हैं और आप देख रहे हैं बी-पेड़ों की ओर चीजों को गति देने के लिए? मैं उनके बारे में प्रश्न पूछने से पहले बी-पेड़ और हैंश के बारे में पढ़ने का सुझाव देता हूं। – user318904

+0

अच्छी तरह से मैंने कुछ बुनियादी साहित्य सर्वेक्षण किया और इस http://www.igvita.com/2009/02/13/tokyo-cabinet-beyond-key-value-store/ पर दिए गए आंकड़ों ने मुझे बी के लिए जाने के लिए प्रेरित किया -Trees, दुर्भाग्य से कार्यक्रम के एक अजगर कार्यान्वयन नहीं है। – Rahul

2

SQLite3 आंतरिक रूप से बी + पेड़ का उपयोग करता है, लेकिन ऐसा लगता है कि आप एक कुंजी-मूल्य स्टोर चाहते हैं। इसके लिए बर्कले डीबी आज़माएं। यदि आपको लेनदेन की आवश्यकता नहीं है, तो HDF5 आज़माएं। यदि आप एक वितरित कुंजी-मूल्य स्टोर चाहते हैं, तो http://scalien.com/keyspace/ भी है, लेकिन यह एक सर्वर-क्लाइंट प्रकार प्रणाली है जो सभी प्रकार के NoSQL कुंजी-मूल्य स्टोर खोल देगा।

इन सभी प्रणालियों में प्रवेश (पुनर्प्राप्ति और पुनर्प्राप्ति) के लिए ओ (लॉग (एन)) होगा, इसलिए वे शायद वर्तमान में उपयोग कर रहे हैंश टेबल की तुलना में धीमे हो जाएंगे।

क्योटो कैबिनेट एक हैश पेड़ प्रदान करता है, ताकि आप जो भी देख रहे हों, उससे अधिक हो सकता है क्योंकि यह सम्मिलन और पुनर्प्राप्ति के लिए ओ (1) होना चाहिए, लेकिन अगर आपको इसकी आवश्यकता हो तो आप इन-ऑर्डर ट्रैवर्सल नहीं कर सकते (हालांकि आप वर्तमान में हैश पेड़ का उपयोग कर रहे हैं, यह एक मुद्दा नहीं होना चाहिए)।

http://fallabs.com/kyotocabinet/

आप प्रदर्शन के लिए देख रहे हैं, तो आप गति महत्वपूर्ण एक संकलित भाषा में लागू आइटम नहीं हैं करने के लिए और उसके बाद अजगर में एक आवरण एपीआई है की आवश्यकता होगी।

2

आप mxBeeBase पर एक नज़र डालना चाहते हैं जो ईजिनिक्स एमएक्स बेस वितरण का हिस्सा है। इसमें एक तेज ऑन-डिस्क बी + ट्री कार्यान्वयन शामिल है और स्टोरेज क्लास प्रदान करता है जो पाइथन में ऑन-डिस्क शब्दकोश या डेटाबेस बनाने की अनुमति देता है।

1

Here एक अच्छा बीटी शुद्ध पायथन कार्यान्वयन है। यदि आवश्यक हो तो आप इसे अनुकूलित कर सकते हैं।

3

आपको वास्तव में ज़ोडब को देखना चाहिए। http://www.zodb.org/en/latest/

मैं के बारे में यह लंबे समय से जाने एक monography बनाया है, हालांकि अंग्रेजी में अपने स्पेनिश http://sourceforge.net/projects/banta/files/Labs/zodb/Monografia%20-%20ZODB.pdf/download

सूचना हर जगह है।

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