Veritabanınız yeterince küçükse, dosya sistemini kullanabilirsiniz. Bu yaklaşımın avantajı, çok düşük teknolojili olması ve her yerde çok az kodla çalışmasıdır. Anahtarlar yazdırılabilir karakterlerden oluşuyorsa ve içermiyorsa /
, bunları dosya adları olarak kullanabilirsiniz:
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"; }
İsteğe bağlı anahtarları yerleştirmek için, dosya adı olarak anahtarın bir sağlama toplamı kullanın ve isteğe bağlı olarak anahtarın bir kopyasını saklayın (anahtarları listelemekten veya belirli bir giriş için anahtarın ne olduğunu söylemekten memnun değilseniz).
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"
}
Yukarıdaki oyuncak uygulamalarının tüm hikaye olmadığını unutmayın: atomiklik gibi herhangi bir yararlı işlem özelliği yoktur . Bununla birlikte, dosya oluşturma ve yeniden adlandırma gibi temel dosya sistemi işlemleri atomiktir ve yukarıdaki işlevlerin atomik sürümlerini oluşturmak mümkündür.
Bu dosya sistemine doğrudan uygulamalar, yalnızca küçük veritabanları için, birkaç bin dosyaya kadar olan tipik dosya sistemleri için uygundur. Bu noktanın ötesinde, çoğu dosya sistemi büyük dizinlerle baş etmekte zorlanır. Katmanlı bir düzen kullanarak şemayı daha büyük veritabanlarına uyarlayabilirsiniz. Örneğin, tüm dosyaları tek bir dizinde saklamak yerine, adlarının ilk birkaç karakterine göre ayrı alt dizinlerde saklayın. Bu nedir git SHA-1 sağlamalarının tarafından dizine onun nesneler, denilen dosyalarında saklanır: örneğin, yapar .git/objects/01/2345679abcdef0123456789abcdef01234567
. Bir semantik katmanlarını kullanan programlar diğer örnekleri proxy önbelleğe web olan Wwwoffle ve Polipo ; her ikisi de bir URL'de bulunan sayfanın önbelleğe alınmış kopyasını adlı bir dosyada saklarwww.example.com/HASH
burada HASH, URL'nin bazı karma değerlerini kodlamaktadır.
Bir başka verimsizlik kaynağı, çoğu dosya sisteminin küçük dosyaları depolarken çok fazla yer kaplamasıdır - dosya boyutundan bağımsız olarak tipik dosya sistemlerinde dosya başına 2kB'a kadar atık vardır.
Gerçek bir veritabanıyla gitmeyi seçerseniz, şeffaf dosya sistemi erişiminin rahatlığından vazgeçmeniz gerekmez. Berkeley DB ( Jeff Garzik's dbfs ile ), Oracle ( Oracle DBFS ile ), MySQL ( mysqlfs ile ), vb. Veritabanlarına erişmek için birkaç FUSE dosya sistemi vardır .
¹
gibi bir URL için http://unix.stackexchange.com/questions/21943/standard-key-value-datastore-for-unix
, Polipo dosyası kullanır unix.stackexchange.com/M0pPbpRufiErf4DLFcWlhw==
açık metin olarak gerçek bir URL gösteren dosyası içinde ilave bir başlık ile; dosya adı, URL'nin MD5 karmasının (ikili olarak) base64 kodlamasıdır. Wwwoffle dosyayı kullanır http/unix.stackexchange.com/DM0pPbpRufiErf4DLFcWlhw
; dosyanın adı, MD5 karmasının evde oluşturulmuş bir kodlamasıdır ve tamamlayıcı bir dosya http/unix.stackexchange.com/UM0pPbpRufiErf4DLFcWlhw
URL'yi içerir.