2010-04-07 13 views
10

के बीच चयन करना मैं जावा आधारित वेब-ऐप डिज़ाइन कर रहा हूं और मुझे एक कुंजी-मूल्य स्टोर की आवश्यकता है। बर्कले डीबी मेरे लिए काफी उपयुक्त लग रहा है, लेकिन ऐसा लगता है कि चुनने के लिए दो बर्कले डीबी हैं: बर्कले डीबी कोर जो सी में लागू किया गया है, और बर्कले डीबी जावा संस्करण जिसे शुद्ध जावा में लागू किया गया है।बर्कले डीबी कोर और बर्कले डीबी जेई

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

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

उत्तर

2

यदि आप इनके लिए एक सामान्य इंटरफ़ेस प्राप्त करते हैं, और आपके पास यूनिट परीक्षणों का एक उपयुक्त सेट है, तो आप बाद में दो बार त्रैमासिक रूप से स्वैप करने में सक्षम होना चाहिए (शायद जब आपको वास्तव में कठिन तथ्यों के आधार पर निर्णय लेने की आवश्यकता हो जो अभी उपलब्ध नहीं हैं)

+2

बस इसके लिए एक चेतावनी: डेटाबेस स्वयं संस्करणों के बीच पोर्टेबल नहीं होंगे। यदि आप इस मार्ग पर जाते हैं तो आपको डेटा के लिए माइग्रेशन रणनीति की आवश्यकता होगी यदि आप स्वयं को कार्यान्वयन स्वैप करना चाहते हैं। इस कारण से, यदि डेटा में पोर्टेबिलिटी महत्वपूर्ण है, तो आप जावा संस्करण पर बर्कले डीबी और जावा एपीआई के साथ जाने से बेहतर हैं। – Shaun

2

मुझे एक ही समस्या का सामना करना पड़ा और जावा संस्करण के साथ जाने का फैसला किया, मुख्य रूप से इसकी पोर्टेबिलिटी के कारण (मुझे ऐसा कुछ चाहिए जो मोबाइल उपकरणों पर भी चलाएगा)। डायरेक्ट पर्सिस्टेंस लेयर (डीपीएल) एपीआई भी हैं और तथ्य यह है कि पूरा डीबी एक सिंगल जार है जो इसकी तैनाती को काफी सरल बनाता है।

हालिया संस्करण 4 में उच्च उपलब्धता और प्रदर्शन सुधार आया। यह भी तथ्य है कि लंबे समय तक चल रहे जावा एप्लिकेशन इस तरह के अनुकूलन को प्राप्त कर सकते हैं, कि वे कुछ परिदृश्यों में देशी सी अनुप्रयोग प्रदर्शन को पार कर जाएंगे।

यह किसी भी जावा एप्लिकेशन - डेस्कटॉप या वेब के लिए एक प्राकृतिक फिट है।

2

मैं कुछ समय पहले एक ही सवाल कर रहा था, कुछ बेंचमार्क करने के बाद मुझे पता चला कि मूल संस्करण में हैश मोड जावा संस्करण के किसी भी चीज़ की तुलना में बहुत तेज और भंडारण कुशल है, इसलिए मैंने देशी के साथ जाने का फैसला किया कार्यान्वयन।

मेरा सुझाव है कि आप स्टोरेज क्षमताओं के लिए अपने स्वयं के मानक हैं और यह तय करें कि जावा संस्करण पर्याप्त तेज़ है या नहीं।

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

बीटीडब्ल्यू: मेरा बेंचमार्क 20,000,000 रिकॉर्ड से यादृच्छिक कुंजी पूछताछ की गति का परीक्षण करता था, जहां कुंजी एक स्ट्रिंग है और मान एक int (4 बाइट्स) है। मैंने देखा कि आवेषण (बेंचमार्क पॉप्युलेट करना) मूल संस्करण के साथ बहुत तेज़ था, और प्रश्न दो गुना तेजी से थे।

(यह जावा की कमी के कारण नहीं है, लेकिन जावा संस्करण मूल संस्करण - 4.0 बनाम 4.8 आईआईआरसी के समान संस्करण का नहीं है)।

12

मैं काफी दोनों BDB-जेई और जावा के साथ BDB कोर का उपयोग कर अनुभव का एक सा है। यह तय करना कि कौन सा उपयोग करना सरल है: यदि आप सहमति चाहते हैं, तो बीडीबी-जेई का उपयोग करें। यदि आप स्केलेबिलिटी चाहते हैं, तो बीडीबी-कोर का उपयोग करें।

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

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

1

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

यदि आप हालांकि वेब-एप्लिकेशन बना रहे हैं, तो लंबे समय तक आपके लिए समरूपता बहुत महत्वपूर्ण हो सकती है।

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