तालिका 1: रसोई सिंक समेत सबकुछ। गलत स्वरूप में दिनांक (साल आखिरी है कि आप उस कॉलम पर सॉर्ट नहीं कर सकते हैं), VARCHAR के रूप में संग्रहीत नंबर, 'सड़क' कॉलम में पहला पता, प्रथम नाम कॉलम में पहला नाम और अंतिम नाम, अंतिम नाम कॉलम में शहर, अपूर्ण पते, पंक्तियां पिछले कुछ वर्षों में बदल गए नियमों के कुछ सेट के आधार पर डेटा को एक फ़ील्ड से दूसरे स्थान पर ले जाकर पंक्तियों को आगे बढ़ाएं, डुप्लिकेट रिकॉर्ड, अपूर्ण रिकॉर्ड, कचरा रिकॉर्ड ... आप इसे नाम दें ... ओह और निश्चित रूप से टाइमस्टैम्प या प्राथमिक नहीं दृष्टि में कुंजी कॉलम।परम MySQL विरासत डेटाबेस दुःस्वप्न
तालिका 2: सामान्यीकरण की कोई उम्मीद इस बच्चे को खोलने पर खिड़की से बाहर निकल गई। हमारे पास तालिका में पंक्तियों की प्रत्येक प्रविष्टि और अद्यतन के लिए एक पंक्ति है। तो डुप्लीकेट्स जैसे कल (800 एमबी लायक) और फोन 1 फोन 2 फोन 3 फोन 4 जैसे कॉलम नहीं हैं ... फोन 15 (उन्हें फोन नहीं कहा जाता है। मैं इसका इस्तेमाल उदाहरण के लिए करता हूं) फोरीगन कुंजी है .. अच्छी तरह से अनुमान लगाएं। तालिका 1
तालिका 3: में यह किस प्रकार का डेटा पंक्ति में था, इस पर निर्भर करता है कि यह तीन और उम्मीदवार हैं। अरे हाँ। "विदेशी कुंजी डैश, डॉट्स, संख्याओं और अक्षरों का एक वर्चर कॉलम संयोजन है! अगर वह मैच प्रदान नहीं करता है (जो अक्सर नहीं होता है) तो समान उत्पाद कोड का दूसरा कॉलम होना चाहिए। कॉलम जिनके नाम हैं उनके भीतर डेटा के साथ कोई सहसंबंध नहीं है, और अनिवार्य फोन 1 फोन 2 फोन 3 फोन 4 ... फोन 15। तालिका 1 से डुप्लिकेट किए गए कॉलम हैं और दृष्टि में टाइमस्टैम्प या प्राथमिक कुंजी कॉलम नहीं हैं।
तालिका 4: एक कार्य के रूप में वर्णित किया गया था प्रोजेस और किसी भी पल में बदलाव के अधीन है। यह दूसरों के लिए संक्षेप में समान है।
1 मीटर पंक्तियों के करीब यह एक बड़ी गड़बड़ है। सौभाग्य से यह मेरी बड़ी गड़बड़ी नहीं है। असल में मुझे इसे एक संग्रह से बाहर निकालना है प्रत्येक "ग्राहक" के लिए रिकॉर्ड।
प्रारंभ में मैंने तालिका 1 का एक चार चरण अनुवाद तैयार किया जिसमें प्राथमिक कुंजी जोड़कर सभी तिथियों को क्रमबद्ध प्रारूप में परिवर्तित किया गया। फिर प्रश्नों के कुछ और कदम जो फ़िल्टर किए गए डेटा लौटे, जब तक कि मेरे पास टेबल 1 नहीं था, जहां मैं इसे अन्य टेबलों से संग्रहित करने के लिए उपयोग कर सकता था। सप्ताह के काम के बाद मुझे कुछ चालों का उपयोग करके इसे एक कदम तक नीचे चला गया। तो अब मैं अपने ऐप को गड़बड़ पर इंगित कर सकता हूं और मिश्रित डेटा की एक अच्छी साफ मेज खींच सकता हूं। सौभाग्य से मुझे केवल अपने उद्देश्यों के लिए फोन नंबरों में से एक की आवश्यकता है ताकि मेरी तालिका को सामान्य बनाना कोई मुद्दा न हो।
हालांकि यह वास्तविक कार्य शुरू होता है, क्योंकि हर दिन सैकड़ों कर्मचारी इस डेटाबेस को जोड़ते/अपडेट/हटाते हैं, जिस तरह से आप कल्पना नहीं करना चाहते हैं और हर रात मुझे नई पंक्तियां पुनर्प्राप्त करनी होंगी।
चूंकि किसी भी तालिका में मौजूदा पंक्तियों को बदला जा सकता है, और चूंकि अद्यतन कॉलम पर कोई टाइमस्टैम्प नहीं है, इसलिए मुझे यह जानने के लिए लॉग का सहारा लेना होगा कि क्या हुआ है। बेशक यह मानता है कि एक बाइनरी लॉग है, जो नहीं है!
अवधारणा का परिचय लीड गुब्बारे की तरह नीचे चला गया। मैंने उन्हें यह भी बताया होगा कि उनके बच्चों को प्रयोगात्मक सर्जरी से गुजरना होगा। वे बिल्कुल हाई तकनीक नहीं हैं ... यदि आप एकत्र नहीं हुए थे ...
स्थिति थोड़ा नाजुक है क्योंकि उनके पास कुछ मूल्यवान जानकारी है जो मेरी कंपनी बुरी तरह से चाहता है। मुझे एक बड़े निगम के सीनियर मैनेजमेंट द्वारा भेजा गया है (आप जानते हैं कि वे कैसे हैं) "इसे करने के लिए"।
मैं दिन के दौरान उस डेटाबेस में जो कुछ किया है, उसके बाद बिन लॉग फ़ाइल को पार्स करने के बजाय, रात के अपडेट को संभालने के किसी भी अन्य तरीके के बारे में नहीं सोच सकता, और उसके अनुसार मेरी तालिका को समग्र रूप से मिश्रित करें। मेरी मेज पर क्या करना है यह जानने के लिए मुझे वास्तव में केवल अपनी तालिका 1 को देखने की आवश्यकता है।अन्य टेबल सिर्फ रिकॉर्ड को बाहर निकालने के लिए फ़ील्ड प्रदान करते हैं। (मास्टर स्लेव का उपयोग करने में मदद नहीं होगी क्योंकि मेरे पास गड़बड़ी का डुप्लिकेट होगा।)
विकल्प उनकी तालिका 1 की प्रत्येक पंक्ति के लिए एक अद्वितीय हैश बनाने और हैश टेबल बनाने का विकल्प है। फिर मैं हर रात एंटीयर डेटाबेस से गुजरता हूं कि यह देखने के लिए कि हैश मैच है या नहीं। यदि वे नहीं करते हैं तो मैं उस रिकॉर्ड को पढ़ता हूं और जांचता हूं कि यह मेरे डेटाबेस में मौजूद है या नहीं, अगर ऐसा होता है तो मैं इसे अपने डेटाबेस में अपडेट कर दूंगा, अगर यह तब एक नया रिकॉर्ड नहीं है और मैं इसे शामिल कर दूंगा। यह बदसूरत और तेज़ नहीं है, लेकिन बाइनरी लॉग फ़ाइल को पार्स करना भी सुंदर नहीं है।
मैंने समस्या के बारे में स्पष्ट होने में सहायता के लिए यह लिखा है। अक्सर इसे किसी और को बताते हुए समाधान को और अधिक स्पष्ट बनाने में समस्या को स्पष्ट करने में मदद मिलती है। इस मामले में मुझे सिर्फ एक बड़ा सिरदर्द है!
आपके विचारों की बहुत सराहना की जाएगी।
* एकमात्र समस्या जो मैं देख सकता हूं वह है यदि कुछ तालिकाओं में प्राथमिक कुंजी नहीं है। * - जो वे नहीं करते हैं ... आज और अधिक वार्ता के बाद उन्होंने मुझे बताया कि वे "शायद ही कभी" अपडेट अपडेट/हटाते हैं। .. जो भी था मतलब है। किसी अन्य डेटाबेस डेवलपर से बात करने में यह सही तरीके से करने का सबसे अच्छा (एकमात्र) तरीका प्रतीत होता है, हैश को हर एक डार्न पंक्ति है और हैश को एक टेबल में स्टोर करना है। फिर, हर रात प्रत्येक पंक्ति के लिए हैश बनाने वाले संपूर्ण डेटाबेस को फिर से पढ़ें और बस एक साधारण तुलना करें। मैं बस इसके चारों ओर एक रास्ता नहीं देख सकता। द्विआधारी लॉग फ़ाइलों को समझने की कोशिश करना खतरे से भरा होगा। –