2012-08-31 26 views
5

से निर्देशिका निर्देशिका बनाम पढ़ना मेरा मुख्य कारण विभिन्न विकल्पों पर एक राय प्राप्त करता है। मेरे पास एक निर्देशिका में फ़ाइलें/अंगूठे हैं जो एक वीडियो से जुड़े होते हैं और जब मुझे उन्हें प्राप्त करना होता है तो मैं ग्लोब() फ़ंक्शन ग्लोब (DIRECTORY./file_name*.jpg) का उपयोग करता हूं; और यह वीडियो की सभी जेपीजी फ़ाइलों की एक सरणी देता है।PHP - डेटाबेस

ग्लोब फ़ंक्शन स्वयं बहुत तेज है लेकिन फिर भी मैं उपयोग के बारे में चिंतित हूं क्योंकि प्रत्येक पृष्ठ पर 20 से 50 वीडियो हो सकते हैं, इसलिए 20 से 50 ग्लोब कॉल होंगे, क्या मुझे इसका उपयोग करना चाहिए या डेटाबेस में डेटा डालना शुरू करना चाहिए ग्लोब() के बजाय वहां से फाइल सूची लाएं; ?

यदि कोई बेहतर विकल्प है, तो कृपया मुझे बताएं।

धन्यवाद।

+0

पर विचार करते हुए 50+ उपयोगकर्ता एक बार ऑनलाइन होते हैं। – ArslanCb

+0

इस प्रश्न में मूल समस्या यह प्रतीत होती है कि आप "उपयोग के बारे में चिंतित हैं", लेकिन यह स्पष्ट नहीं है कि आप इसका क्या मतलब रखते हैं। कृपया उस समस्या की व्याख्या करें जो आपको अधिक स्पष्ट रूप से चिंतित करती है ताकि हम सहायता कर सकें। आपकी राय में, अब आप जिस तरह से कर रहे हैं उसके साथ समस्या क्या है? –

+0

धन्यवाद नाट। हां मेरी मुख्य चिंता सीपीयू/मेमोरी है या आप प्रदर्शन कह सकते हैं। कौन सा विकल्प बेहतर है। – ArslanCb

उत्तर

6

प्रदर्शन प्रश्नों के साथ सामान्य रूप से, परिणाम काफी भिन्न हो सकते हैं, इसलिए उत्तर यह है: के लिए तेज़ी से क्या काम करता है।

शुरू करने की जगह यह मापने के लिए है कि चीजें करने में कितना समय लगता है जैसे आप उन्हें कर रहे हैं। एक बार ऐसा करने के बाद, खुद से पूछें: क्या यह पर्याप्त तेज़ है? ऐसा हो सकता है कि, हालांकि यह चीजों को करने का सबसे तेज़ तरीका नहीं हो सकता है, फिर भी यह इतना तेज है कि गति चिंता का विषय नहीं है।

फ़ाइल ग्लोब प्राप्त करने में कितना समय प्रसंस्करण होता है? 1%? 10%? 50%? यह प्रतिशत जितना अधिक होगा, उतना ही सार्थक होगा कि आप चीजों को कैसे बदलते हैं।

इसके अलावा, संपूर्ण रूप से साइट प्रदर्शन कैसा है? यदि आप प्रत्येक पृष्ठ लोड की गति को दोगुना करते हैं, तो क्या लोग नोटिस करेंगे? यदि नहीं, तो यह वास्तव में प्रदर्शन ट्यूनिंग करने के लायक नहीं हो सकता है, भले ही आपको ऐसा करने के लिए स्पष्ट स्थान दिखाई दे।

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

मैं जोड़ता हूं कि जिस तरह से आप चीजें कर रहे हैं अब सरल और अधिक रखरखाव लगता है, क्योंकि यह आपकी डिस्क पर वास्तविक फ़ाइलों के आधार पर फ़ाइल नाम पाता है। यदि आप डेटाबेस का उपयोग करने का प्रयास करते हैं, तो आपको फाइल सिस्टम में फ़ाइलों की सूची के साथ डेटाबेस में फ़ाइल नामों की सूची सिंक्रनाइज़ करने की चिंता करनी होगी।

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

(संपादित करें टिप्पणी :)

जब से तुम परिणाम पूर्व कंप्यूटिंग और डेटाबेस में उन भंडारण के बारे में बात कर रहे हैं, मेरा सुझाव है कि एक डेटाबेस में बातें डाल तुलना में एक बेहतर दृष्टिकोण एक कैशिंग सर्वर का उपयोग करने के लिए है के आधार पर जैसे http://memcached.org/। आप इसे एक संकर दृष्टिकोण के रूप में देख सकते हैं: आप अभी भी वही काम करते हैं जिस तरह से आप उन्हें कर रहे हैं, लेकिन हर बार जब आप परिणाम चाहते हैं, तो आप पहली बार कैश को जांचने के लिए जांचें कि इसमें परिणाम है या नहीं; यदि ऐसा होता है, तो कैश किए गए परिणाम का उपयोग किया जाता है, अन्यथा नए ग्लोब की गणना करें।यह डेटाबेस और फाइल सिस्टम को सिंक में रखने की समस्या से बचाता है, क्योंकि पुरानी कैश प्रविष्टियां समाप्त हो सकती हैं और नए, सही वाले लोगों द्वारा प्रतिस्थापित की जा सकती हैं।

+0

धन्यवाद, अब मैं एक परीक्षण करूँगा, यह स्थानीय वातावरण पर होगा इसलिए परिणाम अलग-अलग हो सकते हैं लेकिन फिर भी मैं लाइव होने से पहले एक अच्छा अभ्यास कर सकता हूं। – ArslanCb

+0

फ़ाइल नाम अद्वितीय है और अंगूठे फ़ाइलें फ़ाइल नाम की तरह हैं- 1.jpg, filename-2.jpg, filename-3.jpg और इसी तरह, प्रत्येक वीडियो के 1 से 30 अंगूठे हो सकते हैं। मैं उपयोग डेटाबेस के बारे में सोच रहा था क्योंकि एक बार डेटा सहेजा जाता है मुझे हर बार ग्लोब नहीं करना पड़ता है। बस पहले से सहेजे गए डेटा का पुन: उपयोग करें और जेसन (एड) सरणी के संयोजन के साथ चीजें बहुत तेजी से हो सकती हैं ... – ArslanCb

+0

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

0

यदि आप पहले ही डेटाबेस में वीडियो के लिए जानकारी संग्रहीत कर रहे हैं, तो आप वीडियो डेटा रखने वाली तालिका में प्रति वीडियो अंगूठे की संख्या को संग्रहीत करने पर विचार कर सकते हैं। यह पूर्ण फ़ाइल नामों की एक अलग तालिका से पूछने के लिए बहुत तेज़ होगा क्योंकि आपको केवल उस रिकॉर्ड में एक फ़ील्ड का संदर्भ देना होगा जिसे आपने पहले ही पूछताछ की है। यह आपके दो मौजूदा विचारों के बीच एक अच्छा समझौता हो सकता है। आपको यह सुनिश्चित करना होगा कि आपके अंगूठे के नाम सुसंगत और प्रोग्राम योग्य हैं। उदाहरण के लिए, केवल उस वीडियो 123 को 4 अंगूठे दिए गए हैं, आप उत्पन्न कर सकते हैं:

/path/to/video_123/thumb_01.jpg 
/path/to/video_123/thumb_02.jpg 
/path/to/video_123/thumb_03.jpg 
/path/to/video_123/thumb_04.jpg 
+0

इसके लिए धन्यवाद लेकिन अंगूठे के अलग-अलग आकार भी हैं और उपयोगकर्ता कस्टम अंगूठे भी अपलोड कर सकते हैं और मौजूदा को हटा सकते हैं, फ़ाइल नाम मूल रूप से अंगूठे का उपसर्ग है। अंगूठे के नाम पर फ़ाइल नाम भी हो सकता है- 300x240-2.jpg मेरा पुराना कोड केवल वृद्धि का उपयोग कर रहा था और मैं संख्या संग्रहित कर रहा था लेकिन अब यह केवल वृद्धि से थोड़ा अधिक है। सुझाव के लिए धन्यवाद, मैं अब एक जेसन (एड) सरणी संग्रहीत कर रहा हूं और मुझे लगता है कि यह उद्देश्य को पूरा करेगा। एसओ में बहुत बढ़िया लोग और महान समुदाय हैं। – ArslanCb

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

  • कोई संबंधित समस्या नहीं^_^