2011-05-21 22 views
6

संभव डुप्लिकेट:
Can't pass mysqli connection in session in phpभंडारण डेटाबेस कनेक्शन

हमें पीएचपी अनुप्रयोग जो डेटाबेस की आवश्यकता होती है लिखा है में से कई; ज्यादातर MySQL, लेकिन मैंने अक्सर कम तकनीकी रूप से सक्षम लोगों के लिए बहुत छोटे एमएस एक्सेस डेटाबेस का उपयोग किया है ताकि वे उन्हें ट्विक/बैकअप/आदि सहेज सकें। अपने आप पर (चाहे यह सही है या नहीं, मुझे कोई जानकारी नहीं है)।

मुझे क्या पता है, एक ही प्रश्नों को जोड़ने और चलाने में बहुत समय लगता है। इस वजह से मेरे पास एक दिलचस्प विचार था: कनेक्शन को संग्रहीत करना और संभावित परिणाम सेट जो $_SESSION चर में अधिक स्थिर हैं क्योंकि बोझ को कम करने के लिए उपयोगकर्ता साइट को नेविगेट करता है।

स्पष्ट रूप से ऐसा करने के लिए बहुत अधिक विचार की आवश्यकता है। जब सत्र नष्ट हो जाता है तो कनेक्शन बंद करने जैसी चीजें सिर्फ शुरुआत होती है।

मेरा प्रश्न नीचे उबलता है: क्या यह वास्तव में कुछ संभव है? और यदि हां, तो मुझे किस चीज के बारे में पता होना चाहिए (session fixation के अलावा, क्योंकि यह अपनी समस्या है जो सभी सत्रों पर लागू होती है)?

उत्तर

10

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

एक विकल्प के रूप में, मैं अत्यधिक कैशिंग तकनीकों की अनुशंसा करता हूं जो विशेष रूप से डेटाबेस लोड को कम करने और कनेक्शन के समय को कम करने के लिए डिज़ाइन किए गए हैं। इसकी सरलता से, कुछ का उपयोग करके, memcached नाटकीय रूप से आसपास के प्रदर्शन में सुधार करेगा, और आप यह निर्दिष्ट करने में सक्षम होंगे कि कितने सिस्टम संसाधन कैश में जाते हैं - जबकि डेटाबेस को डेटा प्राप्त करने का अपना काम करने की आवश्यकता होती है सेवा मेरे।

+0

मैंने कनेक्शन समस्या के बारे में नहीं सोचा था। यही कारण है कि मैंने पूछा :) – steveo225

+0

Memcached पर देखो। मैं इसे बिना डाटाबेस के साइटों पर भी उपयोग करता हूं ... मुझे एक जटिल PHP पृष्ठ बनाने के लिए एक बार, और इसे पूरे दिन (बिना पुन: प्रस्तुत करने के) यूनिटल की सेवा करने देता है, यह एक एसवीएन चेकइन द्वारा अमान्य हो जाता है। –

11

आप के बाद से उन संसाधनों हैं, सत्र में डेटाबेस कनेक्शन या परिणाम सेट स्टोर कर सकते हैं नहीं है, और:

डेटा के कुछ प्रकार के इस प्रकार सत्र में संग्रहीत नहीं किया जा सकता धारावाहिक। इसमें सर्कुलर संदर्भों के साथ संसाधन चर या ऑब्जेक्ट्स शामिल हैं (यानी ऑब्जेक्ट्स जो किसी अन्य ऑब्जेक्ट को संदर्भित करता है)।

http://php.net/manual/en/intro.session.php

आप एक परिणाम के एक सामान्य सरणी में सेट निकालने और स्टोर है कि किसी भी अन्य चर की तरह सत्र में कर सकते हैं। वैसे भी सत्रों के लिए यह काफी सामान्य उपयोग केस होगा। बस सत्र में बहुत अधिक डेटा स्टोर न करने के लिए सावधान रहें, क्योंकि यह डेटाबेस से इसे लाने से अधिक कर लग सकता है।

+0

यह स्वीकार्य उत्तर होना चाहिए। –

1

आपको बेहतर उपयोग के लिए कुछ कॉन्फ़िगरेशन फ़ाइल में उन लोगों को चाहिए। सत्र विशिष्ट सत्रों के लिए हैं, न कि वैश्विक के लिए।

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