2010-07-23 16 views
7

के लिए एम्बेडेड कुंजी-मूल्य स्टोर का उपयोग करना आसान है, मुझे एक सी ++ एप्लिकेशन लिखना है जो बड़ी मात्रा में डेटा (उपलब्ध रैम से अधिक) को पढ़ता है और लिखता है लेकिन हमेशा अनुक्रमिक तरीके से लिखता है।सी ++

डेटा को भविष्य के सबूत में रखने और दस्तावेज़ के लिए आसान तरीके से रखने के लिए मैं प्रोटोकॉल बफर का उपयोग करता हूं। प्रोटोकॉल बफर हालांकि बड़ी मात्रा में डेटा संभाल नहीं करता है।

मेरा पिछला समाधान प्रति डेटा इकाई (और उन्हें एक निर्देशिका में स्टोर करें) बनाने पर शामिल था, लेकिन यह विशेष रूप से स्केलेबल नहीं लगता है।

इस बार मैं एक एम्बेडेड डेटाबेस का उपयोग करने की कोशिश करना चाहता हूं। समान कार्यक्षमता रखने के लिए मुझे केवल कुंजी-> मूल्य संघों को स्टोर करने की आवश्यकता है (इस प्रकार स्क्लाइट एक ओवरकिल लगता है)। प्रोटोकॉल बफर से वैल्यू बाइनरी सीरियलाइजेशन आउटपुट होगा।

मैं डेटाबेस को "स्मृति में क्या रखना है, डिस्क एएसपी में क्या स्थानांतरित करना है" समस्या का प्रबंधन करने की उम्मीद है, "अनुक्रमिक रूप से डिस्क पर बड़ी मात्रा में डेटा कैसे व्यवस्थित करें" समस्या, और आदर्श रूप से, मेरे अनुक्रमिक पढ़ने को अनुकूलित करने के लिए पैटर्न (अगली प्रविष्टियों को पहले हाथ से पढ़कर)।

विकल्पों की तलाश में मैं विकल्पों की कमी से आश्चर्यचकित था। मैं डेटाबेस को एक अलग प्रक्रिया में नहीं रखना चाहता, क्योंकि मुझे इस अलगाव की आवश्यकता नहीं है (यह नियम रेडिस से बाहर हैं)।

मुझे मिला एकमात्र विकल्प बर्कले डीबी था, लेकिन इसमें अप्रिय निम्न स्तर सी एपीआई है। फिर, मैंने पाया सबसे अच्छा विकल्प बर्कले डीबी के शीर्ष पर stldb4 था। एपीआई काफी अच्छा लगता है और मेरी जरूरतों को फिट करता है।

हालांकि मुझे चिंता है। stldb4 एक अजीब लगता है (यह libferris सामान पर निर्भरता है), अनियमित समाधान (एक साल पहले अंतिम रिलीज), एक समस्या के लिए मैं काफी आम था हालांकि।

क्या आप में से कोई भी इस मुद्दे को प्रबंधित करने के तरीके पर बेहतर सुझाव देता है?

आपके उत्तरों के लिए धन्यवाद।

उत्तर

5

मुझे लगता है कि मुझे अपनी समस्या का उत्तर मिला है।

मैं नोटिस नहीं किया था कि बर्कले DB सी ++ के लिए दो एपीआई प्रदान करता है:

  • API जैसे एक वेनिला सी
  • एक STL API

यह एसटीएल एपीआई एसटीएल संगत वैक्टर और नक्शा प्रदान करता है अवशोषण जो डेटाबेस तक सीधे पहुंच प्रदान करते हैं। इस प्रकार value = data_container[key] करना संभव हो जाता है।

यह मेरे लिए सबसे अच्छा समाधान प्रतीत होता है; बर्कले डीबी एसटीएल एपीआई का उपयोग सीधे प्रोटोकॉल बफर के साथ।

1

BerkleyDB आपकी आवश्यकताओं के अनुरूप लगता है। निश्चित रूप से, इसकी एपीआई थोड़ा अजीब है, लेकिन यदि आप एक अच्छा एपीआई प्राप्त करते हैं, तो SQLite बेहतर समाधान हो सकता है, भले ही मुझे लगता है कि इसका प्रदर्शन उतना अच्छा नहीं हो सकता है।