2012-03-01 11 views
9

यदि मेरे पास एक php स्क्रिप्ट है जो एक MySQL कनेक्शन पर INSERT, UPDATE, DELETE, आदि को कॉल करती है, और उस स्क्रिप्ट को पोस्ट ऑपरेशन द्वारा अनियंत्रित समय पर बुलाया जाता है, तो यह हमेशा "सुरक्षित" होता है (यानी, भ्रष्ट तालिकाओं का परिणाम नहीं होगा या अनुरोध के दौरान टकराव)?एक php स्क्रिप्ट से MySQL "थ्रेड सुरक्षित" है?

उदाहरण के लिए, यदि 500 ​​अनुरोध 1-सेकंड की अवधि के दौरान आते हैं।

यदि हां, तो php/mysql यह कैसे प्राप्त करता है?

यदि नहीं, तो "धारावाहिक" पहुंच या सुरक्षित एक साथ पहुंच की गारंटी देने के लिए किसी को क्या करने की आवश्यकता है?

+1

'BEGIN; ... काम करो ...; COMMIT; ' –

उत्तर

9

MySQL लॉकिंग का उपयोग करता है (माईसाम के लिए टेबल-स्तर या इनो डीबी के लिए पंक्ति-स्तर), जो एक ही पंक्ति को संशोधित करने के लिए 2 प्रक्रियाओं (स्क्रिप्ट पर 2 कॉल) की अनुमति नहीं देता है। तो तालिका * क्रैश नहीं होगी, लेकिन यह संभव है कि MySQL रीसानोबल समय में अनुरोध की संख्या को संभाल नहीं सके और अनुरोध प्रतीक्षा करेंगे। आपको हमेशा जितनी जल्दी हो सके अपने प्रश्नों को अनुकूलित करना चाहिए।

* MyISAM गहन अनुप्रयोगों को सम्मिलित/अपडेट करने पर क्रैश हो सकता है, लेकिन इसकी स्वचालित पुनर्प्राप्ति है। हालांकि ध्यान रखें कि इस तरह के अनुप्रयोग में, इनो डीबी के पास बेहतर प्रदर्शन

+1

इस प्रश्न के कई उत्कृष्ट उत्तर थे; मैं इस मामले में समुदाय की गति और प्रतिक्रिया पर विश्वास नहीं कर सकता - धन्यवाद।मेरा मानना ​​है कि कुछ अन्य उत्तर रॉक-ठोस, एंटरप्राइज़-स्तरीय कार्यान्वयन बनाने की मांग करने वाले किसी व्यक्ति के लिए अधिक निर्देशक हो सकते हैं - यदि वह आप हैं, तो नीचे देखें। हालांकि, मैं जितना संभव हो उतना कम करने की कोशिश कर रहा हूं और बस जानना चाहता था कि क्या MySQL एक साथ कई अनुरोधों को संभाल सकता है। इसका उत्तर किसी ऐसे व्यक्ति के लिए है जो विशेष रूप से किसी अन्य उत्तर को जानने के लिए भुगतान नहीं किया जा रहा है। धन्यवाद Darhazer। – SG1

2

क्या यह हमेशा "सुरक्षित" होता है (यानी, भ्रष्ट तालिकाओं या अनुरोधों के दौरान टकराव नहीं होगा)?

हाँ

यदि हां, तो कैसे php/mysql इस लक्ष्य को हासिल करता है?

तालिका/पंक्ति ताले।

0

मुझे लगता है कि शब्दावली आप देख रहे हैं लेनदेन और अलगाव स्तर है। यदि ये आपकी आवश्यकता के हिसाब से सेट हैं, तो आपको टकराव के बारे में चिंता करने की आवश्यकता नहीं है। यहां how it works पर ट्यूटोरियल है।

1

आमतौर पर डेटाबेस टकराव के लिए ठोस होते हैं, हालांकि महत्वपूर्ण संचालन उन्हें पूरा या त्याग दिया जाना चाहिए। बैंक खाते पर नकदी जमा के बारे में सोचें।

आदेश में इस परिणाम आप लेन-देन उपयोग करने में रुचि हो सकता है प्राप्त करने के लिए:

PHP + MySQL transactions examples

2

MySQL Isoloation के लिए ताले का उपयोग करता है, और Atomicity के लिए transactions। लेनदेन के लिए इनो डीबी या बीडीबी की आवश्यकता होती है। InnoDB पूर्ण ACID समर्थन का समर्थन करता है।

लॉक और लेनदेन, संयुक्त, आपके समवर्ती मुद्दे को हल करेंगे।

डिफ़ॉल्ट रूप से, MySQL में implicit transactions है।

इन सुविधाओं के बारे में निश्चित रूप से जानें कि वे बिल फिट करते हैं या नहीं। MyISAM टेबल लॉकिंग का उपयोग करता है, जबकि InnoDB पंक्ति स्तर लॉकिंग प्रदान करता है, इसलिए कोई आपकी आवश्यकताओं को दूसरे की तुलना में बेहतर कर सकता है।

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