से

2011-05-13 92 views
9
db

मैं दो अलग अलग तरीकों का उपयोग कर रहा db4o में वस्तुओं क्वेरी करने के लिए और मैं इसके बारे में चर्चा करना चाहते हैं वस्तुओं क्वेरी करने के लिए सबसे अच्छा अभ्यास db4o।से

1) इस पहले उदाहरण में, मैं ObjectContainer का एक उदाहरण बनाने के लिए, मैं कनेक्शन खोलने, और फिर मैं इसे बंद कर दें।

ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), "User"); 
ObjectSet result = db.queryByExample(user); 
db.close(); 

2) इस दूसरे उदाहरण में, मैं एक ObjectServer बना सकते हैं और कनेक्शन आवेदन के पूरे जीवन चक्र के लिए खुला करते हैं। मैं भी ObjectServer से खुला ObjectContainer, मेरी क्वेरी और फिर इसे बंद:

ObjectServer userDb = Db4oClientServer.openServer(Db4oClientServer.newServerConfiguration(), "User", 0); 
ObjectContainer client = client = userDb.openClient(); 
ObjectSet result = client.queryByExample(user); 
client.close(); 

-

दोनों तरीकों के बीच मुख्य अंतर क्या हैं? क्या यह खतरनाक है अगर मैं ऑब्जेक्टसेवर को कभी बंद नहीं करता?

मेरी राय में, दूसरी विधि बेहतर है, क्योंकि यदि दो अलग-अलग उदाहरण पहले उदाहरण में दिखाए गए तरीके को कॉल करते हैं, तो दूसरे कॉलर को अपवाद मिलेगा, क्योंकि डेटाबेस लॉक हो जाएगा, लेकिन दूसरे उदाहरण में मैं करता हूं ऐसी कोई समस्या नहीं है। चूंकि मुझे डीबी 4o के साथ ज्यादा अनुभव नहीं है, इसलिए मैं पूछना पसंद करता हूं कि मैं सही तरीके से हूं या नहीं।

उत्तर

11

db4o सबसे अच्छा है जब आप कनेक्शन पूरे आवेदन जीवन चक्र के लिए खुला रखने के काम करता है।

यदि आप कोई ऑब्जेक्ट पुनर्प्राप्त करते हैं, तो डेटाबेस को बंद करें, फिर से खोलें और ऑब्जेक्ट को फिर से स्टोर करें db4o को यह एहसास नहीं होगा कि ऑब्जेक्ट पहले ही संग्रहीत है (चूंकि आपने कनेक्शन बंद कर दिया है और जब से db4o का संदर्भ सिस्टम भी है) और दूसरा उदाहरण संग्रहीत करेगा ।

एक और मुद्दा (यदि आप एम्बेडेड मोड में डीबी 4o चलाते हैं) यह है कि डेटाबेस खोलना एक समय लेने वाला ऑपरेशन है, इसलिए, यदि आप डेटाबेस खोलना/बंद रखते हैं तो निश्चित रूप से प्रदर्शन समस्याएं होंगी (दूसरी ओर, क्लाइंट खोलना कनेक्शन इतना महंगा नहीं है और इसलिए कोई समस्या नहीं होनी चाहिए)।

+0

वाह, धन्यवाद। मुझे समस्या थी कि मेरी वस्तुओं को दो बार संग्रहीत किया गया था, और मुझे नहीं पता था क्यों। आपका उत्तर अब इस मुद्दे को मेरे लिए स्पष्ट करता है। बहुत बहुत धन्यवाद Vagaus। – jcdmb

+0

Vagaus अरे, मैं सिर्फ देखा कि यू ब्राजील है :) मैं कंप्यूटिंग में मेरी विज्ञान कोर्स पूरा कर रहा हूँ = जर्मनी में प्रौद्योगिकी के किट कार्लज़ूए संस्थान। मैं कुछ समय पता करने के लिए क्षेत्र में किसी ने मुझे कैसे ब्राजील में कंप्यूटर विज्ञान के क्षेत्र में श्रम बाजार, हो जाएगा कि हम इस दिशा में कुछ छोटे विचारों के आदान सकता है में से कुछ जानकारी देने के लिए चाहते हैं के लिए किया गया था? [email protected]: मुझे मेरे ईमेल यदि संभव हो तो कृपया अपना ईमेल भेजें। मैं सहयोग धन्यवाद। गले! – jcdmb

+0

मैं एक सवाल है, हम कैसे की जाँच करते हैं db4o ObjectContainer बंद कर दिया है? –

4

पहले कोड नमूना आप एम्बेडेड मोड का उपयोग कर db4o डेटाबेस खोल रहे हैं में, मूल रूप से आप एक स्थानीय वस्तु कंटेनर मिलता है और आप एक लेन-देन पर काम जब तक आप db बंद कर दें।

दूसरा नमूना में आप एक वस्तु सर्वर instantiating रहे हैं। ऑब्जेक्ट सर्वर के साथ काम करते समय दो मोड होते हैं: स्थानीय मोड (जब आप पोर्ट नंबर 0 चुनते हैं, तो आपने जो किया है) और रिमोट मोड (होस्ट और 0 से अधिक पोर्ट चुनें)। पूर्व में कोई नेटवर्किंग शामिल नहीं है जबकि बाद में (और दूरस्थ रूप से काम कर सकता है (उर्फ सी/एस))।

वैसे भी, एक वस्तु सर्वर के साथ काम करने का लाभ यह है कि आप ग्राहक वस्तु कंटेनर खोलने (openClient()), जब आप एक नए ग्राहक को खोलने आप अपने आप संदर्भ प्रणाली और स्वतंत्र के साथ एक नई वस्तु कंटेनर मिल के माध्यम से अनेक लेन-देन प्राप्त है प्रतिबद्ध/रोलबैक (एक नए लेनदेन की तरह)।

तो आप आमतौर पर आप अनेक ग्राहकों का उद्देश्य एक ही सर्वर पर काम कर के साथ काम करेंगे, तो दूसरा नमूना के साथ जाना होगा और आप लेन-देन जुदाई की जरूरत है।

और जानकारी: http://developer.db4o.com/Documentation/Reference/db4o-8.0/java/reference/index_CSH.html#client-server.htm

बेस्ट!

+0

Danke Schön für die Erklärung ausführliche;) – jcdmb