2008-10-03 16 views
8

PHP में, जो तेज़ है; include('somefile.php') का उपयोग कर या एक ही जानकारी प्राप्त करने के लिए एक सरल SELECT क्वेरी के साथ एक MySQL डेटाबेस से पूछताछ?तेज क्या है; PHP में एक MySQL डेटाबेस सहित किसी अन्य फ़ाइल या क्वेरी सहित?

उदाहरण के लिए, कहें कि आपके पास एक जावास्क्रिप्ट स्वत: पूर्ण खोज फ़ील्ड था जिसके लिए 3,000 शब्द की आवश्यकता थी। क्या include का उपयोग करके या किसी साधारण SELECT क्वेरी का उपयोग करके उन्हें MySQL डेटाबेस से पढ़ने के लिए उन शर्तों को किसी अन्य फ़ाइल से पढ़ने में तेज़ है?

संपादित करें: यह माना जा रहा है कि डेटाबेस और फ़ाइल जो मैं शामिल करना चाहता हूं वह मेरे कोड के समान स्थानीय मशीन पर है।

+0

ध्यान दें कि डेटा में पढ़ना एक बात है, लेकिन उस डेटा के साथ मिलान करना एक और कदम है जो महत्वपूर्ण प्रदर्शन के अनुसार है। तो आपका प्रश्न आपके द्वारा आवश्यक उत्तर को आमंत्रित नहीं कर सकता है। – bart

उत्तर

14

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

Buuuuut, क्योंकि यह आपके सिस्टम पर निर्भर करता है, यह सच नहीं हो सकता है। मैं तुम्हें करने के लिए सुझाव एक PHP परीक्षण स्क्रिप्ट बनाने के लिए और यह कमांड लाइन से 100 बार चलाने के लिए, और (cURL का प्रयोग करके) HTTP के माध्यम से परीक्षण दोहराने के लिए

उदाहरण:

use_include.php

<?php 

    start = microtime(true); 

    include('somefile.php'); 

    echo microtime(true)-start; 

?> 

use_myphp।php

<?php 

    start = microtime(true); 

    __put_here_your_mysql_statements_to_retrieve_the_file__ 

    echo microtime(true)-start; 

?> 
-3

मुझे बिल्कुल पता नहीं है, लेकिन MySQL का उपयोग करके मेरी राय में, धीमा हो सकता है, अगर सामग्री गतिशील है तो इसका उपयोग किया जाएगा। लेकिन मुझे यकीन है कि इसमें शामिल हैं, बड़ी सामग्री के लिए, यह तेज़ है।

0

निश्चित रूप से जब तक फ़ाइल बहुत बड़ी नहीं है शामिल हैं और आप बहुत अधिक स्मृति जो मामले में एक डेटाबेस

2

सिफारिश की जाएगी का उपयोग कर अंत यह बहुत कठिन/असंभव के रूप में देखते हैं, एक सटीक जवाब देने के लिए है बहुत सारे अज्ञात चर - क्या होगा यदि फाइल सिस्टम को NFS पर रखा गया है जो दुनिया के दूसरी तरफ रहता है? या आपके पास स्मृति में पूरा MySQL डेटाबेस है। डेटाबेस का आकार भी इसमें लगाया जाना चाहिए।

लेकिन, अधिक उत्तर-वाई नोट पर, एक सुरक्षित अनुमान यह होगा कि MySQL तेजी से है, अच्छी इंडेक्स, अच्छी डेटाबेस संरचना/सामान्यीकरण और बहुत फैंसी/जटिल प्रश्न नहीं है। I/O संचालन हमेशा महंगे होते हैं (पढ़ें: धीमा), जबकि जैसा कि पहले उल्लेख किया गया है, पूरे डेटासेट को पहले से ही MySQL द्वारा स्मृति में कैश किया गया है।

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

0

फ़ाइल से किसी स्क्रिप्ट पर कच्चे डेटा में पढ़ना आम तौर पर डेटाबेस से तेज़ होगा।

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

एक बड़ी फ़ाइल में पढ़ना भी कम स्केलेबल है क्योंकि आप स्क्रिप्ट निष्पादित करते समय बहुत सारी सर्वर मेमोरी का उपयोग करेंगे।

1

यह कुछ आप एक नियमित आधार पर प्राप्त करने में कठिनाई करने जा रहे हैं यह डेटा prefetch सार्थक हो सकता है (डिस्क या डेटाबेस से, कोई फर्क नहीं पड़ता) है और अपनी स्क्रिप्ट खींच है रैम कैश से memcached की तरह।

3

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

इसके बजाय मैं खुद से पूछूंगा कि रखरखाव में क्या अंतर होगा। क्या आप कभी डेटा बदल सकते हैं? यदि नहीं, तो बस इसे एक सादे फ़ाइल में पॉप करें। क्या आप कभी भी सामग्री के बिट्स को इतनी बार बदल सकते हैं? यदि ऐसा है, तो डेटाबेस में हेरफेर करना आसान तरीका है। डेटा की संरचना के लिए वही बात, अगर इसे "पुनर्गठन" की आवश्यकता है, तो शायद इसे डेटाबेस में रखना अधिक कुशल है?

तो: जो भी आपको लगता है वह आपके लिए और कोड और डेटा के भविष्य के रखरखाव के लिए सबसे सुविधाजनक है। :-)

4

फ़ाइल सहित लगभग हमेशा तेज होना चाहिए। यदि आपका डेटाबेस किसी अन्य मशीन पर है (उदा। साझा होस्टिंग में) या बहु-सर्वर सेटअप में लुकअप को अतिरिक्त हॉप बनाना होगा।

हालांकि, व्यवहार में अंतर शायद कोई फर्क नहीं पड़ता है। यदि सूची गतिशील है तो इसे MySQL में संग्रहीत करने से आपका जीवन आसान हो जाएगा। स्टेटिक सूचियां (जैसे देश या राज्य) को PHP में संग्रहीत किया जा सकता है। यदि सूची काफी छोटी है (कुछ सौ प्रविष्टियां) और अक्सर उपयोग की जाती है, तो आप इसे सीधे जावास्क्रिप्ट में लोड कर सकते हैं और AJAX से दूर कर सकते हैं।

यदि आप MySQL मार्ग जा रहे हैं और गति के बारे में चिंतित हैं तो कैशिंग का उपयोग करें।

$query = $_GET['query']; 
$key = 'query' . $query; 
if (!$results = apc_fetch($key)) 
{ 
    $statement = $db->prepare("SELECT name FROM list WHERE name LIKE :query"); 
    $statement->bindValue(':query', "$query%"); 
    $statement->execute(); 
    $results = $statement->fetchAll(); 
    apc_store($key, $results); 
} 

echo json_encode($results); 
+0

यह कल्पना करने का सबसे अच्छा तरीका है। यहां तक ​​कि यदि फाइल सिस्टम प्रारंभ में तेज़ी से है, तो आप उन पीडीओ ड्राइवर का निर्माण करने वाले लोगों की तुलना में तेज़ फ़ाइल चयन तर्क लिखने वाले नहीं हैं। – Kris

0

यह दोनों तरीकों से क्यों न करें और देखें कि तेज़ क्या है? दोनों समाधान बहुत तुच्छ हैं।

0

यदि आप बाद की तारीख में शर्तों की संख्या बड़ी होने की उम्मीद करते हैं, तो आप fulltext search फ़ील्ड के साथ MySQL का उपयोग बंद कर सकते हैं।

0

मुझे हाल ही में यह समस्या थी। मेरे पास mysql में कुछ डेटा था कि मैं प्रत्येक पृष्ठ अनुरोध पर पूछताछ कर रहा था। मेरे डेटा सेट के लिए, MySQL का उपयोग करने के बजाय एक निश्चित रिकॉर्ड लंबाई फ़ाइल लिखना तेज़ था।

कुछ विभिन्न कारकों है कि मेरे लिए MySQL की तुलना में तेजी एक फाइल बना रहे थे: - पाठ डेटा

  • मैं बेतरतीब ढंग से उठा रहा था और खोज नहीं की 100kb तहत -

    1. फ़ाइल का आकार छोटा था अनुक्रमित कोई फर्क नहीं पड़ता
    2. कनेक्शन समय - फ़ाइल खोलना और इसे पढ़ने में सर्वर लोड होने पर डेटाबेस से कनेक्ट करने से तेज़ था। यह विशेष रूप से सच था क्योंकि ओएस ने स्मृति

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

  • 0

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

    ऐसा लगता है कि आप डेटाबेस को मारने से बचने के लिए, जो PHP स्क्रिप्ट में शामिल हैं, के आस-पास स्थिर डेटा रखने पर विचार कर रहे हैं। आप मूल रूप से एक प्राथमिक कैश कर रहे हैं। यह ठीक काम कर सकता है, जब तक आपके पास उस फ़ाइल को रीफ्रेश करने का कोई तरीका है, जब डेटा बदलता है। स्थिर आंकड़ों के खिलाफ एसक्यूएल क्वेरीज को तेज करने के लिए आप MySQL क्वेरी कैश के बारे में भी जानना चाहेंगे। या स्मृति में स्थिर डेटा रखने के लिए Memcached।