หากฐานข้อมูลของคุณมีขนาดเล็กเพียงพอคุณสามารถใช้ระบบไฟล์ได้ ข้อดีของวิธีนี้คือมันใช้เทคโนโลยีต่ำมากและจะทำงานได้ทุกที่ด้วยรหัสน้อยมาก หากคีย์นั้นประกอบด้วยอักขระที่พิมพ์ได้และไม่มีอยู่/
คุณสามารถใช้เป็นชื่อไฟล์ได้:
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"
}
โปรดทราบว่าการใช้งานของเล่นด้านบนไม่ได้เป็นเรื่องราวทั้งหมด: พวกเขาไม่มีคุณสมบัติการทำธุรกรรมที่เป็นประโยชน์เช่น atomicity การดำเนินการของระบบไฟล์พื้นฐานเช่นการสร้างและการเปลี่ยนชื่อไฟล์เป็นอะตอมมิกและเป็นไปได้ที่จะสร้างฟังก์ชั่นเวอร์ชันอะตอมมิกของฟังก์ชั่นด้านบน
การใช้งานระบบไฟล์โดยตรงไปยังไฟล์เหล่านี้เหมาะสมกับระบบไฟล์ทั่วไปสำหรับฐานข้อมูลขนาดเล็กมากถึงสองพันไฟล์ นอกเหนือจากจุดนี้ระบบไฟล์ส่วนใหญ่มีปัญหาในการจัดการกับไดเรกทอรีขนาดใหญ่ คุณสามารถปรับโครงร่างเป็นฐานข้อมูลขนาดใหญ่โดยใช้เลย์เอาต์เลเยอร์ ตัวอย่างเช่นแทนที่จะเก็บไฟล์ทั้งหมดไว้ในไดเรกทอรีเดียวให้เก็บไว้ในไดเรกทอรีย่อยแยกกันโดยพิจารณาจากอักขระสองสามตัวแรกของชื่อ นี่คือสิ่งที่คอมไพล์ไม่ตัวอย่างเช่น: วัตถุของดัชนีโดย SHA-1 hashes .git/objects/01/2345679abcdef0123456789abcdef01234567
จะถูกเก็บไว้ในไฟล์ที่เรียกว่า ตัวอย่างอื่น ๆ ของโปรแกรมที่ใช้ layering ความหมายคือพร็อกซี่แคชเว็บWwwoffleและpolipo ; ทั้งเก็บสำเนาแคชของหน้าเว็บที่พบใน URL ในไฟล์ที่เรียกว่าwww.example.com/HASH
โดยที่ HASH เป็นการเข้ารหัสแฮชบางส่วนของ URL
แหล่งที่มาของความไม่มีประสิทธิภาพอีกอย่างคือระบบไฟล์ส่วนใหญ่เสียพื้นที่จำนวนมากเมื่อจัดเก็บไฟล์ขนาดเล็ก - มีมากถึง 2kB ต่อไฟล์ในระบบไฟล์ทั่วไปโดยไม่ขึ้นกับขนาดของไฟล์
หากคุณเลือกที่จะไปกับฐานข้อมูลจริงคุณไม่จำเป็นต้องสละความสะดวกสบายในการเข้าถึงระบบไฟล์แบบโปร่งใส มีระบบไฟล์FUSEหลายระบบในการเข้าถึงฐานข้อมูลรวมถึง Berkeley DB (กับdbfs ของ Jeff Garzik ), Oracle (กับOracle DBFS ), MySQL (พร้อมmysqlfs ) เป็นต้น
¹
สำหรับ URL อย่างhttp://unix.stackexchange.com/questions/21943/standard-key-value-datastore-for-unix
Polipo ใช้ไฟล์unix.stackexchange.com/M0pPbpRufiErf4DLFcWlhw==
โดยมีส่วนหัวเพิ่มเติมภายในไฟล์เพื่อระบุ URL จริงในข้อความที่ชัดเจน ชื่อไฟล์คือการเข้ารหัส base64 ของแฮช MD5 (ในไบนารี) ของ URL Wwwoffle ใช้ไฟล์http/unix.stackexchange.com/DM0pPbpRufiErf4DLFcWlhw
; ชื่อของไฟล์คือการเข้ารหัสแฮช MD5 และโฮมไฟล์http/unix.stackexchange.com/UM0pPbpRufiErf4DLFcWlhw
ประกอบด้วย URL