2008-08-21 13 views
31

मैं वर्तमान में डीबी 4o (जावा संस्करण) का प्रयास कर रहा हूं और मैं जो कुछ देखता हूं उससे काफी सुंदर हूं। लेकिन मैं यह सोचने में मदद नहीं कर सकता कि यह वास्तविक लाइव (वेब-) वातावरण में कैसे प्रदर्शन करता है। क्या किसी को डीबी 4o चलाने के बारे में साझा करने के लिए कोई अनुभव (अच्छा या बुरा) है?db4o अनुभव?

उत्तर

54

हम एक बड़े ग्राहक/सर्वर प्रोजेक्ट में डीबी 40 .NET संस्करण चलाते हैं।

हमारे अनुभव यह है कि आप संभावित संबंधपरक डेटाबेस की तुलना में संभावित रूप से बेहतर प्रदर्शन प्राप्त कर सकते हैं।

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

एक और दर्द सक्रियण है। जब आप डीबी 4 ओ से ऑब्जेक्ट को पुनर्प्राप्त या हटाते हैं, तो डिफ़ॉल्ट रूप से यह पूरे ऑब्जेक्ट पेड़ को सक्रिय करेगा। उदाहरण के लिए, एक Foo लोड करने से Foo.Bar.Baz.Bat, आदि लोड हो जाएंगे जब तक लोड करने के लिए कुछ भी नहीं बचा है। हालांकि यह प्रोग्रामिंग दृष्टिकोण से अच्छा है, प्रदर्शन आपके ऑब्जेक्ट्स में अधिक घोंसले को धीमा कर देगा। प्रदर्शन में सुधार करने के लिए, आप डीबी 4 ओ को बता सकते हैं कि सक्रिय करने के लिए कितने स्तर गहरे हैं। यदि आपके पास बहुत सारी वस्तुएं हैं तो यह करने में समय लगता है।

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

कुछ एपीआई काम नहीं कर रहे हैं, जैसे गेटफिल्ड एपीआई डेटाबेस उन्नयन लागू करने में उपयोगी हैं। (उदाहरण के लिए, आपने एक संपत्ति का नाम बदल दिया है और आप डेटाबेस में अपनी मौजूदा ऑब्जेक्ट्स को अपग्रेड करना चाहते हैं, तो आपको डेटाबेस में ऑब्जेक्ट्स खोजने के लिए इन "प्रतिबिंब" एपीआई का उपयोग करना होगा। अन्य एपीआई, जैसे कि [इंडेक्स] विशेषता डॉन ' स्थिर 6.4 संस्करण में काम नहीं करते हैं, और आपको कॉन्फ़िगर() इंडेक्स ("कुछ फ़ील्ड") का उपयोग करके इंडेक्स निर्दिष्ट करना होगा, जो दृढ़ता से टाइप नहीं किया गया है।

हमने देखा है कि प्रदर्शन आपके डेटाबेस को बड़ा कर देता है। हमारे पास अभी एक 1 जीबी डाटाबेस और चीजें अभी भी तेज हैं, लेकिन जब तक हम एक छोटे डेटाबेस के साथ शुरू नहीं करते हैं, उतना तेज़ नहीं है।

हमें एक और समस्या मिली है जहां आईडी मौजूद नहीं है तो डीबी 4 ओ.गेटबीआईआईडी डेटाबेस बंद कर देगा अब डेटाबेस में।

हमें मूल क्वेरी सिंटैक्स (प्रश्नों के लिए सबसे प्राकृतिक, भाषा-एकीकृत वाक्यविन्यास) मिल गया है, कम-अनुकूल एसओडीए प्रश्नों की तुलना में बहुत धीमा है। तो लिखने के बजाय:

// C# syntax for "Find all MyFoos with Bar == 23". 
// (Note the Java syntax is more verbose using the Predicate class.) 
IList<MyFoo> results = db4o.Query<MyFoo>(input => input.Bar == 23); 
कि अच्छा क्वेरी कोड की बजाय

, आप एक बदसूरत सोडा क्वेरी जो स्ट्रिंग के आधार पर और न दृढ़ता से टाइप है करने के लिए है।

.NET लोगों के लिए, उन्होंने हाल ही में एक LINQ-to-DB4O प्रदाता पेश किया है, जो अभी तक का सबसे अच्छा वाक्यविन्यास प्रदान करता है। हालांकि, यह अभी तक देखा जाना चाहिए कि बदसूरत सोडा प्रश्नों के साथ प्रदर्शन समान होगा।

डीबी 4 ओ समर्थन सभ्य रहा है: हमने फोन पर कई बार बात की है और उपयोगी जानकारी प्राप्त की है। उनके उपयोगकर्ता मंच बेकार के बगल में हैं, हालांकि, लगभग सभी प्रश्न अनुत्तरित होते हैं। उनके जेआईआरए बग ट्रैकर को बहुत ध्यान मिलता है, इसलिए यदि आपके पास एक नाराज बग है, तो इसे जेरा पर दर्ज करें, अक्सर इसे ठीक कर दिया जाएगा। (हमारे पास 2 बग तय की गई हैं, और एक और जो आधा assed तरीके से पैच किया गया है।)

यदि यह सब आपको डराता नहीं है, तो मुझे बताएं कि हम जिन समस्याओं का सामना कर चुके हैं, उनके बावजूद हम डीबी 4 ओ से बहुत खुश हैं। हमने जो प्रदर्शन किया है, हमने कुछ ओ/आरएम ढांचे को उड़ा दिया है। मेरा यही सुझाव है।

अपडेट जुलाई 2015 ध्यान रखें, यह उत्तर 2008 में लिखा गया था। जबकि मैं उपरोक्तों की सराहना करता हूं, तब से दुनिया बदल गई है, और यह जानकारी तब तक विश्वसनीय नहीं हो सकती है जब यह लिखा गया था।

+0

क्वेरी को प्रोसेस करते समय ब्लॉक करने के लिए आपको अपना सर्वर कार्यान्वयन कैसे प्राप्त हुआ? हमने एक सुंदर बेवकूफ ग्राहक/सर्वर परफ-टेस्ट लागू किया है (और आशा है!), और हमने देखा है कि लंबे समय से चलने वाले प्रश्न सर्वर को दूसरों को संसाधित करने से रोकते हैं। हमारे perf-client संचालन सभी केवल पढ़ने के लिए हैं। –

+4

युगल चीजें जो आप कोशिश कर सकते हैं: एकाधिक डेटाबेस, शायद प्रत्येक उपयोगकर्ता के लिए एक। आप एम्बेडेड मोड की बजाय डीबी 4 ओ क्लाइंट/सर्वर मोड का उपयोग कर सकते हैं, जो थ्रेडिंग को थोड़ा अलग तरीके से संभालता है। –

+1

हाय यहूदा! आपके द्वारा उल्लिखित मुद्दों के बारे में, सक्रियण गहराई को डिफ़ॉल्ट रूप से 5 तक कॉन्फ़िगर किया गया है, इसलिए db4o गहराई से वस्तुओं को सक्रिय करना बंद कर देगा। आप पारदर्शी सक्रियण (अब देशी संग्रहों का समर्थन करने वाले db4o) को भी आजमा सकते हैं और db4o केवल आवश्यक होने पर आपकी ऑब्जेक्ट को सक्रिय करने दें (जब ऑब्जेक्ट का उपयोग किया जाता है)। अधिकांश मामलों में लिंक, मूल प्रश्नोत्तरी और एसओडीए के संबंध में आपके पास कोई समझदार प्रदर्शन अंतर नहीं होना चाहिए (इस तरह के मतभेदों के लिए सबसे आम मामला डीबी 4o से संबंधित असेंबली नहीं ढूंढ रहा है - ऐसे मोनो.सीसिल डीएलएल, डीबी 4objects.Db4o.Instrumentation और सेसिल .FlowAnalysis)। – Vagaus

2

मुख्य समस्या जिसका सामना मैंने किया है रिपोर्टिंग है। डीबी 4o डेटा स्रोत के खिलाफ कुशल रिपोर्ट चलाने के लिए ऐसा कोई प्रतीत नहीं होता है।

+1

कभी-कभी रिपोर्टिंग के लिए SQL सर्वर या एक अच्छा डेटा गोदाम में रिपोर्ट करने के लिए डेटा भेजने की अनुशंसा की जाती है। यह इस तरह से आसान होगा क्योंकि आप आसानी से रिपोर्टिंग के लिए इस भंडारण को denormalize कर सकते हैं। –

3

अधिकांश मूल प्रश्न दृश्यों के पीछे एसओडीए प्रश्नों में कुशलतापूर्वक रूपांतरित हो सकते हैं और इससे कोई फर्क नहीं पड़ता है। एनक्यू का उपयोग करना निश्चित रूप से पसंदीदा है क्योंकि आप मजबूत टाइप की गई भाषा के क्षेत्र में रहते हैं। यदि आपको इंडेक्स का उपयोग करने के लिए एनक्यू प्राप्त करने में समस्याएं हैं, तो कृपया अपनी समस्या db4o forums पर पोस्ट करने के लिए स्वतंत्र महसूस करें और हम आपकी सहायता करने की कोशिश करेंगे।

गोरान

0

यहूदा, यह लग रहा है जैसे आप पारदर्शी सक्रियण, जो नवीनतम उत्पादन संस्करण (7.4) की एक विशेषता है का उपयोग नहीं कर रहे हैं? शायद यदि आपने उस संस्करण को निर्दिष्ट किया है जिसका आप उपयोग कर रहे हैं क्योंकि ऐसे अन्य मुद्दे हो सकते हैं जिन्हें अब नवीनतम संस्करण में हल किया गया है?

+0

लेखन के समय, हम 6.4 का उपयोग कर रहे थे। अब हम 7.8 का उपयोग कर रहे हैं। हालांकि, हम अभी भी पारदर्शी सक्रियण का उपयोग नहीं कर रहे हैं, क्योंकि हमें डीबी 4 ओ सूचियों का उपयोग करने के लिए हमारी सभी सूची प्रकारों को बदलने की आवश्यकता है। –

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