2011-03-09 15 views
5

NHibernate (और संभवतः कुछ प्लगइन्स) के नवीनतम संस्करण का उपयोग करना, क्या डीबी लिंक के बिना विभिन्न सर्वरों पर एकाधिक डेटाबेस में इकाइयों को मैप करना संभव है?NHibernate: विभिन्न सर्वरों पर एकाधिक डीबी में मैपिंग इकाइयों w/o डीबी लिंक

पृष्ठभूमि के लिए, मैं इस DBA.SE post में वर्णित कुछ के समान कुछ लागू करने के लिए देख रहा हूं।

+0

क्या यह शेरिंग जैसा ही है? –

+0

@ जेसन: शेडिंग मूल रूप से डेटा विभाजन/प्रतिकृति के बारे में है। मेरे मामले में, मुझे विषम डेटा स्टोर पर एक एकीकृत दृश्य होना चाहिए। –

उत्तर

0

मैं एक interesting answernhusers पर मेलिंग सूची मिल गया है। अंश इस प्रकार है:

से जेसन Meckley

[...] यदि आप डेटाबेस एकाधिक भर में भंडारण एक इकाई के बारे में बात कर रहे हैं, इस सवाल का जवाब नहीं सफाई से है। आप ऑब्जेक्ट को हाइड्रेट करने के लिए कस्टम उपयोगकर्ता प्रकार और/या ईवेंट श्रोताओं के साथ कुछ करने में सक्षम हो सकते हैं, लेकिन जो बनाए रखने के लिए एक गड़बड़ होगी।

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

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

var x = session1.get (id);
var y = session2.get (id);
वापसी विलय (एक्स, वाई);

0

कुछ googeling के बाद (हालांकि मैं अभी तक इस प्रयास नहीं किया है), आप कर सकते हैं जाहिरा तौर पर कम से कम नक्शा कक्षाएं एक ही सर्वर पर विभिन्न डेटाबेस में तालिकाओं के लिए, मानचित्रण में

<class name="..." table="..." schema="database.schema"> 
    ... 
</class> 

का उपयोग कर।

लेकिन आईएमएचओ यह एक क्रोधित समाधान है, क्योंकि यह सर्वर-स्वतंत्र प्रतीत नहीं होता है। जाहिर है, एनएचबीर्नेट बस क्वेरी के निर्माण में तालिका मूल्य के साथ स्कीमा मान को जोड़ता है - और अधिकांश सर्वरों के लिए, "केवल स्कीमा के साथ डेटाबेस डालना" परिणाम सिंटैक्स में होते हैं, जो काम करता है। लेकिन आप एनएचबीर्नेट को स्पष्ट रूप से नहीं बताते हैं कि "यह स्कीमा है" और "यह डेटाबेस है" ताकि एनएचबीर्नेट स्पष्ट रूप से यह निर्णय ले सके कि क्वेरी कैसे बनाएं - आप प्रासंगिक डेटा इंजेक्शन करके इसकी क्वेरी सृजन के साथ गड़बड़ करते हैं, जहां यह संबंधित नहीं है।

आईएमएचओ, एनएचबीरनेट को ऐसे गंदे हैक्स को दबा देना चाहिए और "स्कीमा" मान में एक अपवाद फेंकना चाहिए।

किसी भी तरह, ऐसा कोई तकनीकी कारण नहीं है कि आपको एक कदम आगे जाने और स्कीमा = "server.database.schema" का उपयोग करने में सक्षम नहीं होना चाहिए, जहां "सर्वर" एक लिंक किए गए सर्वर का नाम है (देखें उदाहरण के लिए http://technet.microsoft.com/de-de/library/ms190479.aspx)

उस गंदे हैक के अलावा, हर कोई कई सत्र कारखानों का उपयोग करने की अनुशंसा करता है।

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