2010-02-18 9 views
5

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

अभिभावक तालिकाओं से अलग-अलग बाल सारणी को समन्वयित करने के लिए मैं अपने एप्लिकेशन को कैसे डिज़ाइन कर सकता हूं?

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

मेरे कुछ विचार अब तक नीचे पोस्ट किए गए हैं।

उत्तर

2

सिंक फ्रेमवर्क का उपयोग करके संबंधित तालिकाओं को अपने स्वयं के सिंक समूह में जोड़ें। जैसे ऑर्डरहेडर नामक अपने स्वयं के सिंक समूह में ऑर्डरहेडर और ऑर्डर डेंटल टेबल जोड़ें।

सिंक समूह में कुछ भी न डालें जब तक कि यह सीधे संबंधित न हो।

फिर लेनदेन में प्रत्येक सिंक समूह को सिंक करें। इस तरह आपको दोनों या किसी भी तालिका को सिंक्रनाइज़ करने की गारंटी नहीं है ...

कृपया पूछें कि क्या आपको इस प्रक्रिया पर अधिक जानकारी की आवश्यकता है या नहीं।

+0

लगता है कि यह काम कर सकता है, लेकिन यह कैसे स्केल करेगा? क्या सिंक फ्रेमवर्क अभी भी सभी ऑर्डर सिंक करेगा, फिर सभी ऑर्डर विवरण? क्या होगा यदि मेरे पास 100 आइटम के साथ 100 नए ऑर्डर हैं? अगर 99 वें में कोई त्रुटि है, तो क्या यह सब कुछ वापस करने जा रहा है? –

+0

यह उत्तर तालिका-दर-तालिका को समन्वयित करने में निहित समस्याओं का समाधान नहीं करता है: यदि मुझे 20 संबंधित तालिकाओं को सिंक करना है तो क्या होगा? क्या मैं पूरे लेनदेन को एक लेनदेन में सिंक करता हूं? यदि मैं एक लेनदेन में कई तालिकाओं डालता हूं, तो मैं लेनदेन को बहुत अधिक समय तक चला रहा हूं। यदि यह समय समाप्त हो जाता है, तो मैं कुछ भी सिंक करने में सक्षम नहीं होगा। -1। –

+0

जब आपके द्वारा कुछ सिंक्रनाइज़ेशन करने का इरादा रखने वाले अनुप्रयोगों का निर्माण करते समय, आपको अनुप्रयोग डेटा को डिज़ाइन करते समय उस पर ध्यान देना होगा। कारण की प्रकृति से आप सिंक करना चाहते हैं। यानी, आप कुछ समय से डिस्कनेक्ट हो जाते हैं, या कुछ समय में एक लिंक विफल रहता है (एक 3 जी लिंक कहें)। यदि आप एप्लिकेशन को चरण में 20 टेबल रखने की आवश्यकता के लिए डिज़ाइन करते हैं, तो हां आपको डिज़ाइन द्वारा लंबे समय से चलने वाले लेन-देन की आवश्यकता होती है, और जैसा कि आप कहते हैं कि यह विफल रहता है तो आपको सभी को वापस रोल करने की आवश्यकता होती है .. एक तरीका बनाना है लॉग फ़ाइल प्रकार सिस्टम जहां आप परिवर्तन लिखते हैं, एक ट्रिगर द्वारा एक टेबल पर कहें, फिर उसे सिंक करें .. – JohnnyJP

0

मैं इसे डेटाबेस संबंधों का सम्मान करने के लिए सिंक फ्रेमवर्क को अनुकूलित कर सकता हूं। जब कस्टम सिंक एडाप्टर परिवर्तन के साथ एक पंक्ति में आता है, तो यह संबंधित पंक्तियों में किसी भी बदलाव को लेने के लिए डेटाबेस स्कीमा में बाल संबंधों को पार कर सकता है। ये परिवर्तन सभी एक ही डेटासेट में जोड़े जाएंगे और एक ही लेनदेन के रूप में समन्वयित किए जाएंगे।

सकारात्मक:

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

विपक्ष:

  • सिंक फ्रेमवर्क इस तरह से अनुकूलित बहुत काम हो सकता है और ढांचे के internals का विस्तृत ज्ञान की आवश्यकता होगी।
  • कस्टम एडाप्टर को परिपत्र डेटाबेस संबंधों का पता लगाने और उन्हें संभालने की आवश्यकता होगी।
0

एप्लिकेशन डिज़ाइन करें ताकि इससे कोई फर्क नहीं पड़ता कि डेटा अलग-अलग समय पर दिखाई देता है या नहीं। ऐप उस समय उपलब्ध डेटा पर प्रदर्शित या संचालित करेगा। यदि अधिक डेटा बाद में दिखाई देता है, तो यह भी प्रदर्शित होगा।

सकारात्मक:

  • इस डेटा से निपटने का एक लचीला और मजबूत तरीका हो सकता है और जटिल तुल्यकालन कोड का एक बहुत पर निर्भर नहीं करता।

विपक्ष:

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

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

सकारात्मक:

  • आवेदन के डोमेन मॉडल के लिए एक काफी सरल परिवर्तन यह है कि सिंक फ्रेमवर्क के internals बदल रहा है को शामिल नहीं करता हो सकता है।

विपक्ष:

  • आवेदन सभी पंक्तियां स्मृति में हर बार यह कोई परिवर्तन नहीं करता इकाई से संबंधित पढ़ने के लिए की आवश्यकता होगी।
  • यदि एप्लिकेशन को एकाधिक क्लाइंट से आने वाली एक ही इकाई के अपडेट का समर्थन करना पड़ता है तो यह बहुत अधिक जटिल हो जाएगा।
  • ध्यान से योजना की आवश्यकता है कि प्रत्येक दिशा में कौन से परिवर्तन सिंक हो जाएं और जब संबंधित हैश की गणना की जाए। आपके डेटा के आधार पर, आपको कई बार एक ही सारणी को सिंक करने की आवश्यकता हो सकती है।
  • बेस्पाक एक आवेदन के लिए; आप एक ही कोड नहीं ले सकते थे और इसे किसी और चीज़ पर लागू कर सकते थे।
0

सब कुछ denormalize। एक डेटाबेस दृश्य बनाएं जो संबंधित तालिकाओं को एक एकल जुड़ने वाले परिणाम सेट में फ़्लैट करता है, या बस अपने डेटा को पहले स्थान पर एक बड़ी तालिका में संग्रहीत करें। उस तालिका को सिंक करने के लिए सिंक फ्रेमवर्क को कॉन्फ़िगर करें, इसे दृश्य में "बाएं-सबसे" कुंजी द्वारा बैच करना, जो पदानुक्रम में रूट तालिका की प्राथमिक कुंजी होना चाहिए। क्लाइंट पर प्रत्येक लेनदेन में अब एक ही इकाई में किए गए सभी परिवर्तन होते हैं।

सकारात्मक:

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

विपक्ष:

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

    सिंक्रनाइज़ मास्टर संस्थाओं के बजाय रिलेशनल डेटा:

0
मेरे विचारों के लिए

टिप्पणी बॉक्स के अंदर पर्याप्त स्थान नहीं है? मुझे नहीं पता कि हम सिंक फ्रेमवर्क के साथ ऐसा कर सकते हैं ... शायद एक कस्टम प्रदाता को कार्यान्वित कर रहा है?

लेनदेन के बारे में अभी भी एक समस्या है। आइए एक गूंगा नमूना लें, आपके पास खाते हैं, प्रत्येक खाता एक मास्टर इकाई है।

डाटाबेस एक

BeginTransaction 
    Substract $500 from account 1 
    Add $200 to account 2 
    Add $300 to account 3 
EndTransaction 

डाटाबेस बी

BeginTransaction 
    Substract $100 from account 1 
    Add $100 to account 4 
EndTransaction 

जब आप सिंक्रनाइज़, तो आप 1 पर एक संघर्ष की पहचान करेगा लेकिन 2, 3 और 4 इस नमूने के साथ पर नहीं आप किसी मर्ज विस्तृत कर सकते हैं रणनीति लेकिन यह हमेशा मामला नहीं है।

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