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

सत्र चर:कितना डेटा बहुत अधिक है?

सबसे पहले, PHP सत्र डिफ़ॉल्ट रूप से स्मृति में संग्रहीत नहीं होते हैं , वे डिस्क पर संग्रहीत हैं, इसलिए आपके द्वारा लिखा गया प्रत्येक ब्लॉक/सत्र डिस्क स्थान पर कब्जा करने वाला है और स्मृति नहीं (जब तक आप सत्र डेटा को पढ़ने के लिए PHP का उपयोग नहीं करते)।

हां, आप संभावित रूप से अधिक कुशल हो रहे हैं, लेकिन यदि आप स्केल करना चाहते हैं तो नहीं और यहां बताया गया है:


सत्रों में डेटा संग्रहीत करना

कुछ को स्टोर करना पूरी तरह से स्वीकार्य है सत्र में डेटा। सैद्धांतिक रूप से, इसकी कोई सीमा नहीं है (हालाँकि मैंने कभी इसे तोड़ने या इसे धक्का देने की कोशिश नहीं की है, बस एक अधिक कुशल समाधान की ओर बढ़ें)। हालाँकि, आप डिस्क स्थान और PHP द्वारा सीमित रहेंगे memory_limit()

अक्सर, सत्रों में संग्रहीत डेटा में निम्न चीज़ें शामिल होती हैं:

  • उपयोगकर्ता नाम
  • हैश
  • पंजीकरण तिथियां
  • अन्य चर (उपयोगकर्ता समूह आईडी/कुंजी आदि)
  • फ्लैश संदेश
  • (पासवर्ड नहीं!)

हालाँकि, एक ट्रेडऑफ़ है। यदि आपका ट्रैफ़िक (और उपयोग) बढ़ता है और आप $_SESSION में बहुत सारा डेटा संग्रहीत कर रहे हैं , आपको डिस्क और मेमोरी उपयोग दोनों के संदर्भ में समस्याएं दिखाई देने की बहुत संभावना है।

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

यदि आप डिस्क-आधारित सत्रों को (क्षैतिज रूप से) और बनाए रखना चाहते हैं तो आपके पास विकल्प हैं ( स्टिकी सत्र या स्टोरेज एरिया नेटवर्क एक युगल है) क्योंकि एक सर्वर पर डिस्क उसी सत्र को दूसरे सर्वर पर डिस्क के रूप में संग्रहीत नहीं करता है।


सत्र डेटा स्थान

आप उस स्थान का पता लगा सकते हैं जहां PHP कॉल करके सत्र डेटा संग्रहीत करता है: session_save_path()

या सीएलआई पर:

php -r 'echo session_save_path(), "\n";'

आपने अपने OS का उल्लेख नहीं किया है, लेकिन सत्र फ़ाइलों (विभिन्न OS प्रकारों में) के लिए सामान्य स्थान हैं:

/tmp 
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp

डिस्क पर संग्रहीत सत्रों में आमतौर पर फ़ाइल नाम होते हैं जो इस तरह दिखते हैं ls -al :

-rw-------  1 www www      0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6

यह ध्यान देने योग्य है कि अक्सर कचरा-संग्रह प्रक्रियाएं होती हैं जो विशिष्ट अवधि के बाद मृत सत्रों को साफ करती हैं। यह OS के अनुसार अलग-अलग होता है, लेकिन वे आमतौर पर विभिन्न LAMP-आधारित इंस्टॉल के साथ मौजूद होते हैं।


अन्य सत्र भंडारण विकल्प/दृष्टिकोण

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

किसी भी अन्य समाधान की तरह इसके फायदे और नुकसान हैं (जैसे कि /tmp से सत्र फ़ाइल को हटाने के बजाय क्वेरी चलाकर किसी उपयोगकर्ता को प्रतिबंधित/किक आउट करने में सक्षम होना) )

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

विशेष योग्यता की एक तकनीक है मेमोरी कैशिंग . PHP-संगत ओपन-सोर्स समाधान का व्यापक रूप से उपयोग किया जाने वाला उदाहरण है Memcached , जिसका उपयोग एक सर्वर या कई [वितरित] पर किया जा सकता है। मैंने इसे छोटी फर्मों के साथ-साथ बड़ी कंपनियों द्वारा भी देखा है और आपको केवल यह देखना है कि इसका उपयोग कौन करता है/योगदान करता है...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं पायथन में mysqldump का उपयोग किए बिना एक MySQL डेटाबेस को कैसे डंप कर सकता हूं?

  2. mysql टाइमस्टैम्प कॉलम

  3. mysql सर्वर पोर्ट नंबर

  4. कनेक्ट नहीं हो सका:'प्रारंभिक संचार पैकेट पढ़ने' पर MySQL सर्वर से कनेक्शन टूट गया, सिस्टम त्रुटि:0

  5. एसक्यूएल सर्वर - एसक्यूएल इंजेक्शन हमले से बचने के लिए गतिशील एसक्यूएल को संभालने की एक चाल?