2009-01-25 7 views
5

मैंने PHP में एक छोटी वेब सेवा बनाई है। मैं एक विशिष्ट एपीआई विधि में कॉल की संख्या को नियंत्रित करना चाहता हूं।केवल एक पूर्णांक को स्टोर करने के लिए क्या चुनना है? SQLite? या पाठ फ़ाइल?

मैंने पहले टेक्स्ट फ़ाइल का उपयोग करने के बारे में सोचा था, क्योंकि यह सिर्फ एक पूर्णांक है। लेकिन SQLite पर एक अच्छा नज़र डालने के बाद यह और अधिक सुविधाजनक लग रहा था। तो कोड बस है: SQLite से "काउंटर" प्राप्त करें और उस विधि को कॉल करते समय इसे बढ़ाएं, फिर उसे SQLite डीबी पर संग्रहीत करें।

क्या यह करने का यह सही तरीका है? क्या यह फ़ाइल का उपयोग करने के लिए सरल और अधिक स्केलेबल होगा ... शायद कुछ और?

अग्रिम धन्यवाद।

उत्तर

1

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

+0

SQLite निश्चित रूप से एक ही डीबी में एकाधिक प्रक्रियाओं/धागे/हैंडल के साथ copes। – Javier

+0

लेकिन वे अभी भी फाइलें हैं। MySQL जैसे पूर्ण डीबीएमएस 1000 एक साथ लिखने के लिए बहुत बेहतर है। – UnkwnTech

+2

आपको लगता है कि MySQL इसका डेटा संग्रहीत करता है? एक जादुई खजाना बॉक्स में? – jcollum

3

एक डेटाबेस आमतौर पर फाइल सिस्टम से बेहतर स्केल करेगा, लेकिन आपको सावधान रहना होगा और या तो तंत्र के साथ उपयुक्त ताले का उपयोग करना होगा।

+0

ध्यान दें कि एसक्लाइट को पढ़ने के लिए अनुकूलित किया गया है, लिखते हैं पूरे डीबी लॉक ... –

+0

एसक्यूएल डेटाबेस सिर्फ एक पूर्णांक को संग्रहीत करने के लिए? मैं वास्तव में चौंक गया हूं कि आपका जवाब बहुत अधिक है, यह सॉफ्टवेयर विकास की दुखद स्थिति है। –

+0

@ लुब्स हैस्को: मैं केवल तथ्यों को बता रहा हूं। पोस्टर एक वेब सेवा के बारे में बात कर रहा है; क्या फाइल सिस्टम एक ही फाइल में हजारों कॉलों को स्केल करेगा? –

2

बेशक फ्लैट फ़ाइल का उपयोग करें।

  • यह
  • अत्यंत सरल
  • तृतीय-पक्ष लाइब्रेरी पर कोई निर्भरता
  • तुम सिर्फ सादा नोटपैड के साथ या अद्यतन काउंटर देखने में सक्षम हो जाएगा ऐसा करना सही नहीं होगा।
  • SQLite (कोई एसक्यूएल पार्स, कोई अन्य भूमि के ऊपर)
  • और SQLite के रूप में के रूप में स्केलेबल से तेज़ (SQLite बस और अधिक जटिल फ्लैट फ़ाइलें हैं)

क्या तुमने कभी के रूप में तेजी से संभव के रूप में कुछ की आवश्यकता होगी, तो I/O बाधा को खत्म करने के लिए आपको स्मृति में लगातार प्रक्रिया करना होगा। लेकिन कृपया ... एकल पूर्णांक को स्टोर करने के लिए बस SQL ​​डेटाबेस का उपयोग न करें।

+1

आप लॉकिंग और संभावित लेन-देन को संभालने के तरीके का कोई जिक्र नहीं करते हैं ... इस चीज़ को विश्वसनीय तरीके से काम करने के लिए लॉक करना महत्वपूर्ण है। –

+0

ओह, और आप क्या सोचते हैं, SQLite कैसे लॉकिंग संभालती है? यह या तो रीड-ओनली मोड या अनन्य रीड-राइट मोड में फ़ाइल खोलता है .... कोई जादू नहीं है। –

+0

वास्तव में जादू है, इसमें से बहुत सारे http://www.sqlite.org/lockingv3.html –

5

एक तीसरी संभावना: memcachedb। यह memcached के साथ संगत है, लेकिन इसकी मुख्य-मूल्य स्टोर को बीडीबी फ़ाइल में संग्रहीत करता है। इसमें न केवल पढ़ने-लिखने के आदेश हैं, बल्कि संख्यात्मक मूल्यों के लिए परमाणु वृद्धि/कमी भी है।

एक और विकल्प 'काउंटर सर्वर' लिखना होगा। एक स्वतंत्र प्रक्रिया जो सॉकेट पर 'पढ़ी' और 'वृद्धि' कमांड प्राप्त करती है। लाभ यह है कि 'परमाणु' वृद्धि करना वास्तव में आसान है। यह एक सरल फ़ाइल पर इसके काउंटर (ओं) को समेकित समस्याओं के बिना स्टोर करता है क्योंकि कभी भी एक से अधिक सर्वर नहीं होते हैं।

सी के सौ से भी कम लाइनों में लिखना आसान होना चाहिए। एक तंग लूप एक समय में एक कमांड प्रोसेसिंग, हर कुछ सेकंड में डिस्क पर फ्लश करना। चूंकि प्रसंस्करण इतना आसान है, विलंबता न्यूनतम है।

1

आप काउंटर को पकड़ने के लिए shared memory का उपयोग कर सकते हैं, और सुरक्षित वृद्धि सुनिश्चित करने के लिए locking का उपयोग कर सकते हैं।

0

SQLite के अनुसार यह "100K [sic] हिट/दिन तक जाने वाली साइटों को संभाल सकता है"। यदि आप उस पर जा रहे हैं, तो आपको MySQL जैसे अधिक मजबूत डेटाबेस की जांच करने की आवश्यकता हो सकती है।लेकिन यदि आप एक वेबसाइट के लिए हर दिन डेटाबेस में 100k रिकॉर्ड लिख रहे हैं तो मुझे लगता है कि आप जो कर रहे हैं उसके साथ कुछ गलत है, आपके उदाहरण के आधार पर। यह वास्तव में कैशिंग के लिए नौकरी की तरह लगता है। जो मुझे PHP में कुछ भी नहीं पता, क्षमा करें।

उनके पास यह फाइल बनाम SQLite के बारे में कहना है: "कई कार्यक्रम घरेलू विकसित प्रारूपों में डेटा की फ़ाइलों को बनाने और प्रबंधित करने के लिए fopen(), fread(), और fwrite() का उपयोग करते हैं। SQLite विशेष रूप से अच्छी तरह से काम करता है इन विज्ञापन डेटा फ़ाइलों के लिए प्रतिस्थापन। " (source)