Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

विभाजन करते समय विदेशी कुंजी को कैसे संभालें

पढ़ें:MySQL विभाजन सीमाएं

1.) विभाजित तालिकाओं पर FK समर्थित नहीं हैं।

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

2.) विभाजन के लिए आप किस कॉलम का उपयोग करते हैं, यह इस बात पर निर्भर करेगा कि आप टेबल तक कैसे पहुंच रहे हैं। यदि आपके प्रश्न हमेशा वाहन संख्या पर आधारित होते हैं, तो संभवतः उस कॉलम पर हैश विभाजन करना समझ में आता है। यदि आप "इस महीने कौन से वाहन जोड़े गए हैं" जैसी किसी चीज़ के बारे में अधिक पूछताछ या रिपोर्ट कर रहे हैं या आप एक निश्चित आयु के रूप में विभाजन को "रोल" करना चाहते हैं, तो तिथि पर विभाजन करने का रास्ता हो सकता है। यह कुछ ऐसा है जिसे आपको अपने उपयोग के आधार पर तय करना होगा।

3.) अधिक जानकारी के लिए उपरोक्त लिंक देखें।

उपयोगकर्ता के प्रश्न के आधार पर संपादित करें:

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

एक अन्य विकल्प विभाजन या गैर-विभाजित तालिकाओं के साथ विभाजन को मैन्युअल रूप से करना (यानी शार्डिंग) करना होगा। निश्चित रूप से गैर-विभाजित तालिकाओं के साथ, आप मूल विदेशी कुंजी का उपयोग कर सकते हैं। उदाहरण के लिए आप अपने वाहन तालिका को कई तालिकाओं में विभाजित करेंगे जैसे:(यह मानते हुए कि आप वाहन नंबर को "कुंजी" के रूप में उपयोग करना चाहते हैं)

वाहनNosLessThan1000

वाहनNosLessThan2000

वाहनNosLessThan...

वाहनNosLessThanMAX

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

ध्यान दें कि इसका एक लाभ यह है कि वर्तमान में MyISAM अद्यतन के दौरान संपूर्ण विभाजन तालिका को लॉक कर देता है, न कि केवल उस विभाजन को जिसे वह अद्यतन कर रहा है। किसी तालिका को इस प्रकार साझा करना उस विवाद को कम करता है क्योंकि तालिकाएँ स्वयं "विभाजन" हैं।

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में रैंक की गणना कैसे करें

  2. Php और mysql का उपयोग करके Jquery स्टार रेटिंग ट्यूटोरियल

  3. php:स्ट्रिंग डेटा को कैसे बदलें संख्यात्मक डेटा बनें

  4. पीडीओ एकाधिक प्रश्न:प्रतिबद्ध और रोलबैक लेनदेन

  5. mySQL को Android से कनेक्ट करें