mysqlnd

mysqlnd एक PHP एक्सटेंशन है जो PHP 5.4 में MySQL के साथ काम करने के लिए डिफ़ॉल्ट ड्राइवर है। यह सीधे MySQL सर्वर के साथ काम करता है, जिसका अर्थ है कि MySQL क्लाइंट, साथ ही इसके साथ काम करने के लिए ओवरहेड की आवश्यकता नहीं है!

छवि



mysqli_fetch_all


इस तथ्य के बावजूद कि MySQL के साथ काम करने के लिए एपीआई (mysqli और PDO एक्सटेंशन) नहीं बदला है , mysqli एक्सटेंशन में नए फ़ंक्शन दिखाई दिए हैं, जिनके बीच mysqli_fetch_all फ़ंक्शन को हाइलाइट करने के लायक है।

पहले, पूरा नमूना परिणाम प्राप्त करने के लिए, हमें एक समान निर्माण लिखना था:

$result = mysqli_query($link, $query); $data = array(); while($row = mysqli_fetch_assoc($result)) { $data[] = $row; } 


यदि आप mysqli_fetch_all का उपयोग करते हैं, तो आप ऐसे निर्माणों का उपयोग करने से बच सकते हैं:

 $result = mysqli_query($link, $query); $data = mysqli_fetch_all($result, MYSQLI_ASSOC); 


मूल स्मृति प्रबंधन


इस तथ्य के कारण कि mysqlnd PHP का एक विस्तार है, हमारे पास अब MySQL के साथ काम करते समय मेमोरी आवंटन ( मेमोरी_गेट_सजेज के माध्यम से मेमोरी आवंटन पर आँकड़े देखने) को नियंत्रित करने का अवसर है।

दूसरे शब्दों में, पहले, निम्न स्क्रिप्ट स्मृति से बाहर हो सकती है, केवल अगर $ डेटा चर का आकार स्क्रिप्ट में निर्दिष्ट मेमोरी आवंटन सीमा से अधिक हो, जबकि डेटाबेस से प्राप्त डेटा की मात्रा असीम रूप से बड़ी हो सकती है:

 ini_set('memory_limit', '1M'); $result = mysqli_query($link, $query); $data = array(); while($row = mysqli_fetch_assoc($result)) { $data[] = $row; } 


Mysqlnd का उपयोग करने के मामले में, ऐसी स्क्रिप्ट मेमोरी से बाहर हो जाएगी, जब डेटाबेस से डेटा की मात्रा स्क्रिप्ट में निर्दिष्ट मेमोरी आवंटन सीमा से अधिक हो जाती है।

वैसे, mysqlnd का उपयोग करने के मामले में, यदि आप एक अनुरोध भेजते हैं, जो लिनक्स में MySQL सर्वर पर max_allowed_packet से अधिक वजन का होता है, तो आपको यह इंगित करने में एक त्रुटि मिलेगी: "1153: एक पैकेट बड़ा हो गया जो max_allowed_packet बाइट्स" पर है, लेकिन विंडोज में या उपयोग के मामले में। पुराने ड्राइवर को त्रुटि मिलेगी: "2006: सर्वर चला गया है"।

अतुल्यकालिक अनुरोध


mysqlnd MySQL में अतुल्यकालिक प्रश्नों को निष्पादित करने का एक तरीका प्रदान करता है, अर्थात, स्क्रिप्ट को जारी रखने के लिए क्वेरी के परिणामों की प्रतीक्षा करने की कोई आवश्यकता नहीं है।

एक अतुल्यकालिक क्वेरी को निष्पादित करने के लिए, आपको mysqli_query में MYSQLI_ASYNC ध्वज निर्दिष्ट करना होगा

क्वेरी के परिणाम mysqli_poll के माध्यम से जांचे जाते हैं , यदि अनुरोध पूरा हो गया है, तो परिणाम mysqli_reap_async_query (कृपया इस फ़ंक्शन पर ध्यान दें) के माध्यम से प्राप्त किए जा सकते हैं।

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

UPD: mysqlnd में अतुल्यकालिक प्रश्नों के बारे में मेरी पोस्ट यहाँ देखी जा सकती है

प्लग-इन


mysqlnd प्लगइन्स लिखने के लिए एक एपीआई प्रदान करता है, जिसके लिए बहुत उपयोगी एक्सटेंशन पैदा हुए थे:

Mysqlnd प्रतिकृति और लोड संतुलन प्लगइन

विस्तार एक सरल कॉन्फिग का उपयोग करके MySQL में प्रश्नों को स्वचालित रूप से वितरित करने के लिए दासों को सभी रीड अनुरोध भेजकर, और मास्टर को अनुरोध लिखकर अनुमति देता है।

Mysqlnd क्वेरी परिणाम कैश प्लगइन

एक्सटेंशन आपको सबसे लोकप्रिय कैशिंग इंजन (एपीसी, मेम्चे, SQLite में ड्राइवर के स्तर पर क्वेरी परिणामों को कैश करने की अनुमति देता है, आप अपना खुद का जोड़ सकते हैं)

उपयोगकर्ता हैंडलर प्लगइन

एक्सटेंशन ड्राइवर को चलाने के दौरान निष्पादित कई हुक प्रदान करता है। इन हुक के लिए हैंडलर्स को PHP में वर्णित किया जा सकता है, जो विस्तार वर्गों को विरासत में मिला है।

Source: https://habr.com/ru/post/In154663/


All Articles