17

प्रारंभ करना मेरे पास एक ऐप है जो सभी अलग-अलग डीबी में सभी डेटा स्टोर करने के लिए SQL एंटरप्राइज़ का उपयोग करता है। मुझे अपने उपयोगकर्ताओं के लिए "ऑफ़लाइन" काम करने की क्षमता में निर्माण करने की आवश्यकता थी। मैंने इसे Merge Replication के माध्यम से स्थानीय SQL Express सभी के लिए इंस्टॉल किया। यह "काम करता है" लेकिन स्लेज हथौड़ा दृष्टिकोण की तरह लगता है।एसक्यूएल डीबी के साथ सिंक फ्रेमवर्क:

उदाहरण के लिए, मैं सभी 14000 लोगों को प्रत्येक डीबी में दोहरा रहा हूं जब कोई भी व्यक्तिगत उपयोगकर्ता केवल 100 या उससे भी अधिक समय से बातचीत कर सकता है। यह इस तथ्य की भी गिनती नहीं कर रहा है कि वे सेंट्रल डीबी के कनेक्शन के बीच 5 ईश के साथ कभी भी बातचीत नहीं करेंगे।

जो मैं खोज रहा हूं वह युक्तियाँ, पॉइंटर्स और शायद, सिंक फ्रेमवर्क 2 (डेटाबेस के साथ) पर एक अच्छा ट्यूटोरियल है। आपके हाथों के लिए काम करने वाले पहले हाथों का विवरण और क्यों स्वागत किया जाएगा। Sync Framework के साथ काम करने के लिए मुझे अभी तक एक स्पष्ट और संक्षिप्त (वर्तमान का उल्लेख नहीं करना) ट्यूटोरियल में आना है।

मेरे विनिर्देश MS SQL Server 2005 या 2008, किसी भी संस्करण हैं। कोई भी .Net संस्करण (3.5 या 4)। वर्तमान डेटा परत सभी LinqToSQL है। वर्तमान में उपयोग में कोई Sprocs नहीं है।

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

बोनस के रूप में, क्या कोई मुझे बता सकता है कि इसे किस रूप में संदर्भित किया जाता है? मैं हर समय "कभी-कभी कनेक्ट" होता हूं लेकिन यह गलत लगता है। उन्हें "कभी-कभी डीआईएस-कनेक्ट" कहने के लिए और अधिक सटीक होगा, विचार?

+0

कृपया मुझे बताएं कि क्या इसे अधिक विस्तार, पुनः शब्द या बेहतर फोकस की आवश्यकता है। यह मेरे लिए बहुत महत्वपूर्ण है। –

+0

मैं उन सभी के लिए बहुत आभारी हूं जिन्होंने जवाब देने का समय लिया है। मैं ** ** में निराश हूं, मेरे प्रश्न को उत्तर के रूप में बेहतर नहीं कहने के लिए, अब तक, मेरी चिंता को वास्तव में संबोधित नहीं करते हैं। मैं कोशिश करने और इसकी मदद करने के लिए एक और बार संपादित करूंगा। –

+0

मुझे लगता है कि आपने शायद इस समस्या को हल कर लिया है, लेकिन यदि नहीं, तो मैं एसक्यूएल 2005 या 2.1 के साथ सिंक फ्रेमवर्क 2.0 या 2.1 का उपयोग करने के कुछ तरीकों का सुझाव दे सकता हूं। मैंने 400 उपयोगकर्ताओं के लिए कभी-कभी कनेक्ट किए गए .NET 4 ऐप के लिए कुछ समान कार्यान्वित किया है। – stombeur

उत्तर

0

यह अनिवार्य रूप से Distributed Computing कहलाता है।

किसी भी ऐसी प्रणाली में जिस पर मैंने काम किया है, मैंने आमतौर पर N-Tier Architecture का उपयोग किया है ताकि सीआरयूडी संचालन के लिए बैक-एंड पर डेटाबेस सर्वर पर कभी-कभी क्लाइंट प्रोग्राम को कनेक्ट किया जा सके। क्लाइंट को जो भी काम करता है उसे कनेक्शन-कम माना जाता है, क्योंकि जब तक वे अपने परिवर्तनों को सहेजते हैं तब तक वे सर्वर से बातचीत नहीं करते हैं।

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

मुझे यह कहना होगा कि स्थानीय एसक्यूएल एक्सप्रेस इंस्टॉल के साथ मर्ज प्रतिकृति का उपयोग करना निश्चित रूप से एक स्लेज हथौड़ा दृष्टिकोण है। इसके बारे में बहुत बुरा मत मानो, हम सभी इसे समय-समय पर करते हैं: पी।

संपादित

मैं सिंक फ्रेमवर्क अपने आप उपयोग नहीं किया है, लेकिन यह अच्छा लगता है। इसके बारे में कुछ और जानकारी के लिए Sync Framework Developer Center देखें।

0

यह मुझे लगता है जैसे माइक्रोसॉफ्ट सिंक आपके लिए एक अच्छा विकल्प हो सकता है। यहां डेटाबेस को सिंक्रनाइज़ करने का एक सिंहावलोकन है, http://msdn.microsoft.com/en-us/sync/bb887608.aspx। इसे देखो और देखें कि क्या यह आपकी आवश्यकताओं को पूरा करता है। यह आपकी समस्या के सही समाधान की तरह लगता है।

+1

धन्यवाद, मैंने इसे देखा है। मैं बस कुछ और हाथों की उम्मीद कर रहा था। आपके समय के लिए धन्यवाद। –

0

सवाल यह है कि, क्या आपके ऐप को स्थानीय रूप से संग्रहीत डिस्कनेक्ट किए गए डेटा के साथ डिवाइस पर चलाने की आवश्यकता है, या आप वेब फ्रंट एंड का मोबाइल संस्करण बना सकते हैं क्योंकि उन्हें हमेशा सर्वर से कनेक्ट होने की आवश्यकता होती है डेटा के साथ काम कर रहे हैं?

जिन परियोजनाओं पर मैंने काम किया था (लंबे समय पहले) ने कॉम्पैक्ट फ्रेमवर्क और एक्टिवसिंक का उपयोग या तो एक्सेस या एसक्यूएल सर्वर बैक एंड के साथ किया था क्योंकि प्रत्येक डिवाइस को फोन की तरह हर डिवाइस कनेक्ट करना बहुत महंगा था। उन्होंने डिवाइस को क्षेत्र में ले लिया, डिस्कनेक्ट डीबी से डेटा तक पहुंचने के लिए आवश्यक, उनके मोड किए, और जब वे कार्यालय में वापस आ गए तो समन्वयित हो गए।

यदि आप यही कर रहे हैं, तो आप अपने डिवाइस आईडी का उपयोग यह पता लगाने के लिए कर सकते हैं कि प्रत्येक डिवाइस को कौन से मामलों/पंक्तियों की आवश्यकता है, लेकिन यदि आप एक कस्टम सिंक समाधान विकसित करने के बारे में सोच रहे हैं, तो मुझे लगता है कि आप गलत लड़ाई लड़ रहे हैं। यह पहले से ही किया गया है। एक सिद्ध सिंक समाधान, सीमाएं और सभी का उपयोग करें, और उन मानदंडों पर ध्यान केंद्रित करें जिनका उपयोग आप सिंक किए गए डेटा को सीमित करने के लिए कर सकते हैं।

+1

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

+0

मुझे आश्चर्य है कि वे टैबलेट नहीं चाहते हैं। अधिकांश लोग मैदान में लैपटॉप लेते हैं उन्हें बोझिल लगता है। दोबारा, मैं कुछ स्वतंत्र रूप से उपलब्ध सिंक समाधान का उपयोग करता हूं, भले ही इसका अर्थ यह होगा कि आप वास्तव में क्षेत्र में आवश्यकतानुसार अधिक डेटा समन्वयित कर रहे हैं। अधिकांश सिंक समाधान तालिका और फ़ील्ड स्तर होते हैं, पंक्ति स्तर नहीं। – Beth

0

ऐसा लगता है कि आप विलय डेटा विकल्पों पर अधिक नियंत्रण की आवश्यकता है। इस आवश्यकता के साथ मैं देख सकता हूं कि 2 प्रकार के डेटा हैं; डेटा जो सदस्य से संबंधित है (केस किसी सदस्य से संबंधित है), और साझा डेटा (संदर्भ, मास्टर डेटा)।

मैं इस मामले बातें अर्द्ध तेजी से बनाने के लिए इन तकनीकों का मिश्रण होता है।

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

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

ऊपर उल्लेख किया है, आप सिंक फ्रेमवर्क डेवलपर केंद्र या ActiveSync का उपयोग कर सकते हैं।

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

/केपी

1

मैं सुझाव और संकेत है कि या स्पष्ट/सहायक नहीं हो सकता की एक जोड़ी है।

मेरे लिए यह है कि यह एक समस्या यह है कि 3 अलग पहलुओं में विभाजित किया जा सकता है की तरह लगता है:

तुल्यकालन प्रक्रिया

  • आप निश्चित रूप से यह सुनिश्चित करना चाहिए कि सभी पंक्तियों "last_update" कॉलम में किसी प्रकार का है ताकि आपकी सिंक्रनाइज़ेशन प्रक्रिया कुशलता से और भरोसेमंद ढंग से निर्धारित कर सके कि कौन से डेटा पहले से अद्यतित हैं - इस तरह आप रिकॉर्ड की संख्या के साथ बहुत अधिक आक्रामक हो सकते हैं।
  • मैं जटिल सिंक्रनाइज़ेशन प्रक्रियाओं से बचने से बचूंगा और जहां भी संभव हो वहां ब्रूट फोर्स दृष्टिकोण का उपयोग करूँगा। 14,000 रिकॉर्ड मेरे लिए बहुत से नहीं लगते हैं - ऑप्टिमाइज़ेशन के साथ आप पाते हैं कि उचित समय में कनेक्शन के बीच किए गए सभी परिवर्तनों को सिंक्रनाइज़ करना संभव है। यदि नहीं तो मैं अभी भी बिना किसी समझ के डेटा के साथ काम करने वाले उपयोगकर्ताओं से बचने के लिए सिंक्रनाइज़ करने के बारे में काफी उदार हूं।

ऑफलाइन मोड में बनाया मैं शायद बस ऑफलाइन मोड में बदले जाने को अस्वीकार होगा

तो बिल्कुल भी संभव परिवर्तन धक्का - यह तो संभव नहीं thats तो आपको एक अलग रूप में होने के रूप में परिवर्तन धकेलने पर विचार करना चाहिए (और शायद काफी जटिल) प्रक्रिया अपने ही अधिकार में।

लेकिन कुछ चीजें आवेदन अच्छा सुझाव देने के लिए के रूप में तुल्यकालन प्रक्रिया बहुत व्यापार निर्भर है इसकी मुश्किल के बारे में अधिक जानने, विचार करने के लिए बिना कर रहे हैं:

  • चाहिए का उपयोग करता है (या बाहर की जाँच) लॉक करने के लिए सक्षम होने के एक आइटम को ऑफ़लाइन काम करते समय इसे बदलने से रोकने के लिए आइटम?
  • लॉक अतिसंवेदनशील होना चाहिए?
  • यदि कोई लॉक ओवरराइड किया गया है, तो क्या होगा जब कोई परिवर्तनों को सहेजने का प्रयास करता है (एक मर्ज प्रक्रिया एक समझदार पसंद की तरह लगती है)
  • क्या कोई ऐसी वस्तु को संपादित करने में सक्षम होना चाहिए जिसे उन्होंने चेक आउट नहीं किया है?

यदि आप एक जटिल ऑफ़लाइन परिवर्तन प्रक्रिया को लागू करने का निर्णय लेते हैं तो आप प्रेरणा के लिए सामान्य वितरित वीसीएस में उपयोग किए गए वर्कफ़्लो को देखना चाहेंगे।

ऑफ़लाइन डेटा की दुकान बदलने

आप एक और अधिक सुरुचिपूर्ण समाधान (यह निश्चित रूप से स्थापना की प्रक्रिया को आसान बनाने के हैं), आपके स्थानीय डेटा स्टोर के रूप में SQL Compact या SQLite का उपयोग कर यदि आप LINQ का उपयोग कर तो मैं कर रहे हैं मिल सकती है डी शायद एसक्यूएल कॉम्पैक्ट के पक्ष में स्विंग कर रहा है क्योंकि इसमें निश्चित रूप से LINQ से SQL समर्थन है।

मैं उपर्युक्त दो पर ध्यान केंद्रित करता हूं क्योंकि यह परिवर्तन कम-से-कम उपयोगकर्ता सुधारों के संदर्भ में कम से कम बचाता है और शायद सबसे अधिक काम है - उपरोक्त दो स्थानीय डेटा स्टोर के रूप में SQL सर्वर एक्सप्रेस का उपयोग करते हुए पूरी तरह से प्राप्त करने योग्य हैं।

+0

इसके अलावा - शुभकामनाएँ :-) – Justin

0

सिंक ढांचे के साथ संघर्ष करने के कई दिनों बाद मैं इसे कुचलने पर विचार कर रहा हूं और बस कुछ सरल डब्ल्यूसीएफ सेवाओं और कोड लिख रहा हूं। मेरी आवश्यकताएं मोबाइल डिवाइस पर SQL2008 से SQL CE तक एक-तरफा सिंक्रनाइज़ेशन हैं। मेरे अनुभव से इसे अनुकूलित करना बहुत मुश्किल है (केवल कुछ फ़ील्ड सिंक करें) और बेहद धीमी और अक्षम। मुझे लगता है कि माइक्रोसॉफ्ट को इसका उपयोग करने में थोड़ा आसान बनाने के लिए कुछ और काम करने की ज़रूरत है।

चीयर्स

मार्क

3

हम हमारी परियोजनाओं (SQL सर्वर के साथ एक, pgSQL के साथ) की जोड़ी में सिंक ढांचे का उपयोग कर रहा है तो मैं कह सकता हूँ कि यह काफी अच्छी तरह से काम करता है।

इस बात के बारे में जानने के लिए कि आप क्या कर सकते हैं, इस walkthrough एप्लिकेशन को देखें।

http://code.msdn.microsoft.com/sync/Release/ProjectReleases.aspx?ReleaseId=4835

यह बताएंगे कि कैसे कई एसक्यूएल सर्वर डेटाबेस के बीच डेटा सिंक्रनाइज़ होगा। आप इन पैरामीटरों के आधार पर कस्टम पैरामीटर और फ़िल्टर डेटा लेने के लिए संग्रहीत प्रक्रियाओं को 'वृद्धि' संग्रहित भी कर सकते हैं (उदाहरण के लिए क्लाइंट-उपयोगकर्ता यात्रा करने की योजना बना रहे हैं)।

मैं यह भी सुझाव दूंगा कि यदि आप त्रुटिपूर्ण त्रुटियों को देखते हैं तो सिंक फ्रेमवर्क कोड को डीकंपाइल करने के लिए आप एक परावर्तक का उपयोग करते हैं - कभी-कभी यह पता लगाना संभव नहीं है कि त्रुटि तब तक है जब तक आप फ्रेमवर्क कोड में पकड़े गए अपवाद को नहीं देखते हैं। Redgate मेरे लिए पूरी तरह से काम करता है!

अगर आपको और मदद की ज़रूरत है तो मुझे बताएं!

+0

बीटीडब्ल्यू - दिया गया उदाहरण काफी विस्तृत है और दिखाता है कि सिंक तीन अलग-अलग डेटाबेस (एक सर्वर और दो क्लाइंट) में केवल दो तालिकाओं के साथ कैसे काम करता है। आपको प्राथमिक कुंजी पर संघर्ष बनाने वाले क्लाइंट आवेषण के परिदृश्यों को संभालना होगा - हमने प्रत्येक क्लाइंट पर व्यापक रूप से अलग अनुक्रमों के साथ किया था। –

+0

नोट: आप वास्तव में लोगों को सीधे देने में सक्षम नहीं हो सकते हैं, लेकिन आप वृद्धि एसपी में फ़िल्टरिंग मानदंड (स्थान? खाता?) का उल्लेख करने में सक्षम होंगे। –

0

क्या आपने अभी तक पंक्ति स्तर पर अपने मर्ज प्रतिकृति लेखों को फ़िल्टर करने का प्रयास किया है? यह आपके 14k पंक्ति आकार को कुछ प्रबंधित करने में कम करेगा।

1

http://code.msdn.microsoft.com/sync/Release/ProjectReleases.aspx?ReleaseId=3422 यह SQL सर्वर सीई का उपयोग करके एक अच्छा चलना है, जो आप करने की कोशिश कर रहे हैं उसके लिए बहुत अच्छा काम करना चाहिए और इसमें बहुत छोटा पदचिह्न है। मुझे लगता है कि आप जिस कार्यक्षमता को खो देते हैं, उसमें बाधा नहीं है जो आप कम से कम करने की कोशिश कर रहे हैं।

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