2009-03-29 5 views
9

official sqlite3 web page पर लिखा गया है कि मुझे fopen() फ़ंक्शन के प्रतिस्थापन के रूप में स्क्लाइट के बारे में सोचना चाहिए।fqen() के प्रतिस्थापन के रूप में स्क्लाइट?

आप इसके बारे में क्या सोचते हैं? एसक्लाइट के साथ एप्लिकेशन आंतरिक डेटा भंडारण को फिर से भरना हमेशा अच्छा समाधान है? इस तरह के समाधान के प्लस और minuses क्या हैं?

क्या आपके पास कुछ अनुभव है?

संपादित करें: आपके अनुभव के बारे में कैसे? क्या यह प्रयोग करने में आसान है? क्या यह दर्दनाक या बल्कि खुश था? क्या आपको यह पसंद है?

उत्तर

9

यह निर्भर करता है। वहाँ कुछ विपरीत संकेत कर रहे हैं:

  • विन्यास फाइल, सादा पाठ या XML के उपयोग के लिए ज्यादा डिबग करने के लिए आसान है या एक संबंधपरक डेटाबेस का उपयोग करने से बदलने के लिए, यहां तक ​​कि एक SQLite के रूप में के रूप में हल्के।

  • वृक्ष संरचना (उदाहरण के लिए) का उपयोग कर का वर्णन करने के एक्सएमएल आसान संबंधपरक टेबल

  • SQLite एपीआई काफी बुरी तरह से प्रलेखित है का उपयोग करके की तुलना में कर रहे हैं - वहाँ पर्याप्त उदाहरण नहीं हैं, और हाइपरलिंकिंग गरीब है। ओटीओएच, अगर आप इसके लिए खुदाई करते हैं तो जानकारी वहां सब कुछ है। ऐप्स-विशिष्ट बाइनरी स्वरूपों में से

  • उपयोग सीधे

  • डेटाबेस भ्रष्टाचार एक डेटाबेस में एक बूँद के समान प्रारूप भंडारण सभी अपने बजाय डेटा है कि एक ही बुरा में लॉस मतलब हो सकता है की तुलना में तेजी हो जाएगा फ़ाइल

OTOH, अपने आंतरिक डेटा संबंधपरक मॉडल के साथ अच्छी तरह से में फिट बैठता है और अगर वहाँ इसके बारे में आ बहुत कुछ है, मैं SQLite की सलाह देते हैं, तो - मैं इसे अपने आप अपनी परियोजनाओं में से एक के लिए इस्तेमाल करते हैं।

अनुभव के संबंध में - मैं इसका उपयोग करता हूं, यह अच्छी तरह से काम करता है और मौजूदा कोड के साथ एकीकृत करना आसान है। अगर प्रलेखन नेविगेट करना आसान था तो मैं इसे 5 सितारे दूंगा - क्योंकि यह है कि मैं इसे चार दूंगा।

+5

बुरी तरह से प्रलेखित? मुझे लगता है कि यह अन्य एफओएसएस परियोजनाओं की तुलना में वास्तव में अच्छा है। वे पूर्व और सब कुछ के लिए postconditions सूची, और मैं किसी भी मुसीबत एपीआई समझ नहीं था - एक अपवाद के साथ। (उनके पोस्टकंडिशन में से एक बहुत अच्छा "todo" नोट है कि उन्हें यह निर्धारित करने की आवश्यकता है कि यह क्या करता है) – jalf

+0

डेटाबेस भ्रष्टाचार के बारे में, आप बस अपने डेटा को अलग डेटाबेस में विभाजित कर सकते हैं। अपनी फाइलों का भ्रष्टाचार उतना ही बुरा होगा - और होने की संभावना अधिक होगी। डेटाबेस मजबूत होने के लिए डिज़ाइन किए गए हैं और लगातार बने रहेंगे। लेकिन मैं अपने सामान्य बात से सहमत हैं। मेरे लिए कार्डिनल पाप जहाँ तक प्रलेखन जाता है - – jalf

+1

@jalf लगभग कोई उदाहरण नहीं है। इसके अलावा हाइपरटेक्स्ट लिंकिंग बेहद खराब है। –

1

SQLite की परमाणु एक प्लस है। यह जानकर कि यदि आप कुछ डेटा लिखते हैं (शायद बीच में क्रैश हो), तो यह आपकी डेटा फ़ाइल को दूषित नहीं करेगा। मैं सामान्य रूप से एक सफल लोड पर फ़ाइल का बैक अप ले कर xml कॉन्फ़िगरेशन फ़ाइलों के साथ कुछ समान करता हूं, और भविष्य में असफल लोड (भ्रष्टाचार का संकेत) स्वचालित बैकअप को स्वचालित रूप से पुनर्स्थापित करता है। बेशक यह दानेदार नहीं है और न ही यह परमाणु है, लेकिन यह मेरी इच्छाओं के लिए पर्याप्त है।

+0

सच है, किसी मौजूदा डेटाफ़ाइल का बैकअप बनाने और नए तरीके को इस तरह से लिखने का 'सही' तरीका आज़माएं कि आप किसी भी समय विफल नहीं हो सकते हैं। –

+0

आपकी राय में "सही" तरीका क्या होगा? – AaronLS

4

हमेशा की तरह यह निर्भर करता है, तो आप एक स्टैंड-अलोन फ़ाइल में डाटा स्टोर करने की जरूरत है और आप SQLite से एक SQL डेटाबेस के रिलेशनल डेटाबेस क्षमताओं का लाभ उठाने कर सकते हैं कोई समाधान

"एक आकार सभी फिट बैठता है" देखते हैं महान है।

यदि आपका डेटा किसी संबंध मॉडल (उदाहरण के लिए पदानुक्रमित डेटा) के लिए उपयुक्त नहीं है या आप चाहते हैं कि आपका डेटा मानव रूप से पठनीय (कॉन्फ़िगरेशन फाइल) हो या आपको SQLite की तुलना में किसी अन्य सिस्टम के साथ इंटरऑपरेट करने की आवश्यकता हो सहायक और एक्सएमएल बेहतर हो सकता है।

यदि दूसरी तरफ आपको एक ही समय में एकाधिक प्रोग्राम या कंप्यूटर से डेटा तक पहुंचने की आवश्यकता है, तो SQLite एक इष्टतम विकल्प नहीं है और आपको "वास्तविक" डेटाबेस सर्वर (एमएस एसक्यूएल, ओरेकल, MySQL, PosgreSQL की आवश्यकता है) ...)।

1

मैं SQLite के साथ काम करने के लिए एक खुशी मिल जाए, लेकिन मैं इसे (fopen के लिए एक एक आकार फिट सभी प्रतिस्थापन) पर विचार नहीं होगा।

उदाहरण के लिए, मैं सिर्फ सॉफ्टवेयर है कि एक वेब सर्वर से छवियों को डाउनलोड करना और उन्हें स्थानीय स्तर पर कैशिंग है का एक टुकड़ा लिखा था। उन्हें व्यक्तिगत फाइलों के रूप में संग्रहीत करना, मैं उन्हें विंडोज एक्सप्लोरर में देख सकता हूं, जो निश्चित रूप से लाभ प्राप्त करता है। लेकिन मुझे कैश का उपयोग करने के लिए एक यूआरएल और छवि फ़ाइल के बीच एक इंडेक्स रखना होगा। उन्हें SQLite डेटाबेस में संग्रहीत करना, वे सभी एक साफ छोटी फ़ाइल में बैठते हैं, और मैं उन्हें URL द्वारा एक्सेस कर सकता हूं (कैश से imgdata का चयन करें जहां url = 'http://foo.bar.jpg') कम प्रयास के साथ।

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