db4o

2009-10-25 95 views
18

के साथ काम करने के बारे में कुछ प्रश्न मैं db4o ऑब्जेक्ट डेटाबेस की कोशिश कर रहा हूं और अब तक मुझे जो कुछ भी दिखाई दे रहा है, मैं इसे पसंद करता हूं, लेकिन मैंने यह पोस्ट स्टैक ओवरफ्लो db4o experiences? पर भी पढ़ा है जो इंगित करता है कि इतना आसान नहीं लगता है।db4o

अभी, मेरे पास कुछ सवाल हैं कि असली दुनिया ऐप्स में डीबी 4o का उपयोग कैसे किया जाता है। तो यदि आपके पास डीबी 4o के साथ काम करने में विशेष रूप से वेब ऐप संदर्भ में कोई अनुभव है, तो मुझे उन्हें सुनना अच्छा लगेगा।

यहाँ मेरी प्रश्न हैं:

  1. कैसे आप जब db4o संग्रहीत वस्तुओं के साथ काम कर वस्तु पहचान प्रबंधन **
    आरडीबीएमएस पृष्ठभूमि से आ रहा है जहाँ आप सामान्य हमेशा हर के लिए एक प्राथमिक कुंजी/पहचान स्तंभ है? टेबल, मैं अभी कल्पना नहीं कर सकता कि डीबी 4o में ऑब्जेक्ट पहचान कैसे प्रबंधित करें।

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

  2. वहाँ db4o में इस तरह के कोई विकल्प नहीं है के रूप में, मेरे विचार क्रम में वस्तु डेटाबेस में कुछ वस्तुओं की पहचान करने के लिए एक Guid struct उपयोग कर रहा था।

  3. डीबी में संग्रहीत वस्तुओं को देखने के लिए कोई उपकरण?

    क्या डीबी 4o दुनिया में SQL सर्वर प्रबंधन स्टूडियो (शायद कम परिष्कृत) की तरह कुछ है? मैं डीबी फ़ाइल में पहले से संग्रहीत डेटा/ऑब्जेक्ट्स देखना चाहता हूं।

  4. क्या आप अपनी डोमेन ऑब्जेक्ट्स का नाम बदलते समय खराब हो जाते हैं?

    जहां तक ​​मुझे पता है कि जब आप किसी वर्ग का नाम बदलते हैं, तो डीबी में पहले से संग्रहीत उदाहरण अब पुनर्प्राप्त नहीं किए जा सकते हैं। क्या इस मुद्दे के आसपास काम करने का कोई तरीका है? आप लाइव डेटाबेस के अपडेट के साथ कैसे निपटते हैं जिसमें पहले से ही कई ऑब्जेक्ट्स हैं?

  5. क्या मैं संपत्तियों को डीबी में सहेजने से बाहर कर सकता हूं?

    हैं, उदाहरण के लिए एक डोमेन वस्तु के लिए एक (स्टेटलेस) सेवा ऑब्जेक्ट के संदर्भ रखती है, तो सेवा वस्तु भी यदि डोमेन वस्तु कायम हो जाता है, सही कायम किया जाएगा?

यह कम से कम मेरे लिए डेटाबेस में एक सेवा इंस्टेस सहेजा गया है, यह थोड़ा अजीब लगता है।

क्या आप सेवा उदाहरण सहेजे जाने से बाहर कर सकते हैं? यदि डोमेन ऑब्जेक्ट को फिर से पुनर्प्राप्त किया जाता है, तो मैं यह कैसे सुनिश्चित कर सकता हूं कि सेवा को फिर से उदाहरण में इंजेक्शन दिया गया है?

+0

+1 यह एक अच्छा सवाल है - काश मैं आपकी मदद कर सकता हूं। –

उत्तर

13

1) डीबी 4o संग्रहीत वस्तुओं के साथ काम करते समय आप ऑब्जेक्ट पहचान कैसे प्रबंधित करते हैं? डीबी 4o में आपके पास सामान्य रूप से कोई आईडी नहीं है। ऑब्जेक्ट को अलग करने के लिए db4o object-identity का उपयोग करता है। तो स्मृति में एक ही वस्तु डेटाबेस के लिए एक ही वस्तु होने जा रही है।

जब तक आप ऑब्जेक्ट को क्रमबद्ध नहीं करते हैं तो यह ठीक काम करता है। हालांकि जैसे ही वस्तुओं को क्रमबद्ध/डिस्कनेक्ट किया जाता है, यह अब और काम नहीं करता है। उदाहरण के लिए वेब-परिदृश्य में: आप ब्राउज़र को डेटा भेजते हैं। अब आपको कुछ आईडी द्वारा बाद में वस्तुओं की पहचान करने की आवश्यकता है।

मुझे लगता है कि यह तीन विकल्प संभव हैं: - db4o internal id का उपयोग करें। हालांकि यह आईडी हमेशा के लिए नहीं है। डेटाबेस को डिफ्रैगमेंट करने से यह आईडी बदल जाती है। - db4o's UUIDs का उपयोग करना। लेकिन डीबी 4o यूयूआईडी काफी बड़े हैं - स्वयं द्वारा आईडी बनाकर

2) डेटाबेस देखने के लिए ऑब्जेक्ट-मैनेजर टूल है। हालांकि यह अपने वर्तमान राज्य में बेहद सीमित है। मेरी राय में यह db4o के लिए एक बड़ी कमी है।

3) आप aliases, rename classes and fields etc बना सकते हैं। हालांकि विरासत-पदानुक्रम बदलना काम नहीं करता है। फिर आपको पुराने डेटा को नए उदाहरणों में कॉपी करने की आवश्यकता है।

4) हां। आप फ़ील्ड को transient के रूप में .NET-NonSerialized विशेषता या कस्टम विशेषताओं के साथ चिह्नित कर सकते हैं।

+0

db4o ने अपनी वेबसाइट को पुनर्गठित किया है, जो ऊपर पोस्ट किए गए सभी लिंक को तोड़ देता है। – Tom

+0

मैंने सभी लिंक अपडेट किए। – Gamlor

1

डीबी 4 ओ के साथ कुछ काम करते समय, मैंने एक साधारण डीबी 4 ओ ऑब्जेक्ट ब्राउज़र लिखा जो शामिल एक से बेहतर काम करता है। इसे आज़माएं, यह खुला स्रोत है।

http://sourceforge.net/projects/db4oviewer/develop

2

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

'नेविगेशन' का अर्थ है कि आप किसी भी लोड ऑब्जेक्ट में फ़ील्ड/संदर्भों का पालन करते हैं।

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