यदि आपका डेटाबेस काफी छोटा है, तो आप फाइलसिस्टम का उपयोग कर सकते हैं। इस दृष्टिकोण का लाभ यह है कि यह बहुत कम तकनीक वाला है, और बहुत कम कोड के साथ हर जगह काम करेगा। यदि कुंजियाँ मुद्रण योग्य वर्णों से बनी होती हैं और उनमें शामिल नहीं होती हैं /
, तो आप उन्हें फ़ाइल नामों के रूप में उपयोग कर सकते हैं:
put () { key=$1; value=$2; printf %s "$value" >"datastore.db/$key"; }
get () { key=$1; cat "datastore.db/$key"; }
remove () { key=$1; rm "datastore.db/$key"; }
मनमानी कुंजी को समायोजित करने के लिए, फ़ाइल नाम के रूप में कुंजी के एक चेकसम का उपयोग करें, और वैकल्पिक रूप से कुंजी की एक प्रति संग्रहीत करें (जब तक आप कुंजी को सूचीबद्ध करने में सक्षम नहीं होते हैं या किसी दिए गए प्रविष्टि के लिए कुंजी क्या है यह बताने में सक्षम नहीं होते हैं)।
put () {
key=$1; value=$2; set $(printf %s "$key" | sha1sum); sum=$1
printf %s "$key" >"datastore.db/$sum.key"
printf %s "$value" >"datastore.db/$sum.value"
}
get () {
key=$1; set $(printf %s "$key" | sha1sum); sum=$1
cat "datastore.db/$1.value"
}
remove () {
key=$1; set $(printf %s "$key" | sha1sum); sum=$1
rm "datastore.db/$1.key" "datastore.db/$1.value"
}
ध्यान दें कि ऊपर दिए गए खिलौने का कार्यान्वयन पूरी कहानी नहीं है: उनके पास कोई उपयोगी लेन-देन की संपत्ति नहीं है जैसे कि परमाणु। फ़ाइल निर्माण और नाम बदलने जैसे बुनियादी फाइल सिस्टम संचालन हालांकि परमाणु हैं, और ऊपर के कार्यों के परमाणु संस्करणों का निर्माण संभव है।
ये प्रत्यक्ष-से-फ़ाइल सिस्टम कार्यान्वयन केवल छोटे डेटाबेस के लिए, कुछ हज़ार फ़ाइलों तक के विशिष्ट फ़ाइल सिस्टम के साथ उपयुक्त हैं। इस बिंदु से परे, अधिकांश फाइल सिस्टम में बड़ी निर्देशिकाओं का सामना करने में कठिन समय होता है। आप स्तरित लेआउट का उपयोग करके योजना को बड़े डेटाबेस में अनुकूलित कर सकते हैं। उदाहरण के लिए, सभी फ़ाइलों को एक निर्देशिका में संग्रहीत करने के बजाय, उन्हें उनके नामों के पहले कुछ वर्णों के आधार पर अलग-अलग उपनिर्देशिकाओं में संग्रहीत करें। उदाहरण के लिए, यह git क्या करता है: SHA-1 हैश द्वारा अनुक्रमित इसकी वस्तुएं, नामक फाइलों में संग्रहीत होती हैं .git/objects/01/2345679abcdef0123456789abcdef01234567
। प्रोग्राम के अन्य उदाहरण जो सिमेंटिक लेयरिंग का उपयोग करते हैं वे हैं वेब कैशिंग प्रॉक्सिस Wwwoffle और पोलिपो ; दोनों एक URL की कैश्ड कॉपी को एक फ़ाइल में URL पर मिली फ़ाइल में संग्रहीत करते हैंwww.example.com/HASH
जहाँ एचएएसएच URL के कुछ हैश की एन्कोडिंग है। encoding
अक्षमता का एक अन्य स्रोत यह है कि ज्यादातर फाइल सिस्टम छोटी फाइलों को स्टोर करते समय बहुत अधिक जगह बर्बाद करते हैं - फाइल के आकार से स्वतंत्र रूप से, विशिष्ट फाइल सिस्टम पर प्रति फ़ाइल 2kB तक की बर्बादी होती है।
यदि आप एक वास्तविक डेटाबेस के साथ जाना चुनते हैं, तो आपको पारदर्शी फाइल सिस्टम एक्सेस की सुविधा से गुजरने की जरूरत नहीं है। वहाँ कई हैं फ्यूज करने के लिए फ़ाइल सिस्टम का उपयोग डेटाबेस बर्कले डीबी (साथ सहित जेफ Garzik के dBFS ), ओरेकल (साथ ओरेकल dBFS ), MySQL (साथ mysqlfs ), आदि
¹
की तरह एक यूआरएल के लिए http://unix.stackexchange.com/questions/21943/standard-key-value-datastore-for-unix
, Polipo फ़ाइल का उपयोग करता है unix.stackexchange.com/M0pPbpRufiErf4DLFcWlhw==
, फ़ाइल स्पष्ट पाठ में वास्तविक URL का संकेत अंदर एक अतिरिक्त हेडर के साथ; फ़ाइल का नाम URL के MD5 हैश (बाइनरी में) का बेस 64 एन्कोडिंग है। Wwwoffle फ़ाइल का उपयोग करता है http/unix.stackexchange.com/DM0pPbpRufiErf4DLFcWlhw
; फ़ाइल का नाम MD5 हैश की एक घर-निर्मित एन्कोडिंग है, और एक साथी फ़ाइल http/unix.stackexchange.com/UM0pPbpRufiErf4DLFcWlhw
में URL है।