วันนี้ระบบการจัดการฐานข้อมูลส่วนใหญ่(เช่นPostGreSQL , MongoDBและอื่น ๆ ) เก็บข้อมูลไว้ภายในไฟล์ OS (ในอดีต DBMS บางตัวใช้พาร์ติชันดิสก์ดิบโดยตรง)
ในคอมพิวเตอร์ล่าสุดที่ยังใช้ดิสก์หมุนอยู่ดิสก์นั้นช้ามากเมื่อเทียบกับ CPU หรือ RAM - ซึ่งการเพิ่มเลเยอร์ซอฟต์แวร์บางตัวนั้นไม่เกี่ยวข้องกัน เทคโนโลยีSSDอาจเปลี่ยนแปลงเล็กน้อยและระบบไฟล์บางระบบได้รับการปรับให้เหมาะกับ SSD
ไฟล์มีอยู่ในระบบปฏิบัติการส่วนใหญ่โดยทั่วไปด้วยเหตุผลทางประวัติศาสตร์และสังคม (โดยเฉพาะอย่างยิ่งคอมไพเลอร์ C และเครื่องมือส่วนใหญ่ - บรรณาธิการ, ลิ้งค์ - ต้องการไฟล์ดังนั้นจึงมีปัญหาไก่และไข่) และเนื่องจากมีไฟล์ที่ดีมากการใช้งานระบบ
BTW ระบบอำนวยความสะดวกที่จำเป็นบางอย่างสามารถใช้ฐานข้อมูล ตัวอย่างเช่นบน Linux PAMสามารถกำหนดค่าให้ใช้ข้อมูลในฐานข้อมูล (แต่ไม่ค่อยทำในทางปฏิบัติ) นอกจากนี้เมลเซิร์ฟเวอร์บางตัวอาจเก็บข้อมูลบางส่วนหรือส่วนใหญ่ไว้ในฐานข้อมูล (เช่นExim )
ไฟล์เป็น abstractions ที่ต่ำกว่าฐานข้อมูลเล็กน้อยดังนั้นจึงสามารถนำไปใช้งานได้ง่ายขึ้น (เนื่องจากระบบไฟล์ & เลเยอร์VFSในเคอร์เนล Linux) และใช้งานได้เร็วขึ้น โดยเฉพาะอย่างยิ่งการดำเนินการกับไฟล์นั้นถูก จำกัด มากกว่าในฐานข้อมูล ในความเป็นจริงคุณสามารถเห็นไฟล์หรือระบบไฟล์เป็นฐานข้อมูลที่ จำกัด มาก!
คุณสามารถออกแบบระบบปฏิบัติการโดยไม่ต้องไฟล์ใด ๆแต่มีบางฉากอื่น ๆติดตาเครื่องจักร (เช่นมีทุกกระบวนการจะขัดขืนแล้วคุณไม่สนใจมากอย่างชัดเจนเกี่ยวกับการจัดเก็บตั้งแต่ระบบปฏิบัติการคือการจัดการทรัพยากรถาวร) สิ่งนี้ทำในระบบปฏิบัติการทางวิชาการหลายระบบ(1) (และในเครื่อง Smalltalk และLispของทศวรรษ 1980 อย่างใดในระบบ IBM i , aka AS / 400และในบางโครงการของเล่นที่เชื่อมโยงจากosdev) แต่เมื่อคุณออกแบบระบบปฏิบัติการของคุณด้วยวิธีนี้คุณจะไม่สามารถใช้ประโยชน์จากเครื่องมือที่มีอยู่มากมาย (เช่นคุณต้องทำให้คอมไพเลอร์และส่วนต่อประสานผู้ใช้ของคุณเป็นรอยขีดข่วน
โปรดสังเกตว่าระบบปฏิบัติการmicrokernelอาจไม่ต้องการไฟล์ที่จัดทำโดยเคอร์เนลเลเยอร์เนื่องจากระบบไฟล์เป็นเพียงแอปพลิเคชันเซิร์ฟเวอร์ (เช่นตัวแปล Hurd ที่ทำงานใน userland) ดูวิธีunikernelในMirageOSของวันนี้ด้วย
Linux (และอาจเป็น Windows ซึ่งได้รับแรงบันดาลใจส่วนใหญ่จากVMS & Unix ) จำเป็นต้องใช้ไฟล์ในการทำงาน อย่างน้อยที่สุดที่initโปรแกรม (โปรแกรมแรกที่ตั้งขึ้นโดย kernel) ต้องเป็นผู้ที่ปฏิบัติการเก็บไว้ในแฟ้ม (มัก/sbin/init
แต่มันอาจจะsystemdวันนี้) และ (เกือบ) โปรแกรมอื่น ๆ ทั้งหมดจะเริ่มต้นด้วยการexecve (2 ) syscall ดังนั้นจะต้องเก็บไว้ในไฟล์ อย่างไรก็ตามFUSEช่วยให้คุณสามารถให้ความหมายเหมือนไฟล์กับสิ่งที่ไม่ใช่ไฟล์
โปรดสังเกตว่าบน Linux (และบางทีแม้แต่ Windows ที่ฉันไม่รู้จักและไม่เคยใช้) sqliteเป็นห้องสมุดที่จัดการฐานข้อมูล SQL บางไฟล์ในไฟล์และให้ API สำหรับสิ่งนั้น เป็นที่ทราบกันดีว่าAndroid (ตัวแปร Linux) ใช้ไฟล์ sqlite จำนวนมาก (แต่ก็ยังมีระบบไฟล์เหมือน POSIX)
อ่านเพิ่มเติมเกี่ยวกับจุดตรวจสอบแอปพลิเคชัน (ซึ่งในระบบปฏิบัติการปัจจุบันหลายระบบจะถูกนำไปใช้เพื่อเขียนสถานะกระบวนการในไฟล์) ผลักไปสุดขั้ววิธีการนั้นไม่จำเป็นต้องเขียนไฟล์แอปพลิเคชันด้วยตนเอง (แต่เพื่อคงสถานะกระบวนการทั้งหมดโดยใช้เครื่องจักรจุดตรวจ)
ที่จริงแล้วคำถามที่น่าสนใจคือทำไมระบบปฏิบัติการปัจจุบันยังใช้ไฟล์อยู่และคำตอบคือมรดกและเหตุผลทางเศรษฐกิจและวัฒนธรรม (น่าเศร้าภาษาโปรแกรมและไลบรารีส่วนใหญ่ในปัจจุบันยังต้องการไฟล์)
หมายเหตุ 1: ระบบปฏิบัติการทางวิชาการแบบถาวรรวมถึงLisaac & Grasshopperแต่โครงการทางวิชาการเหล่านี้ดูเหมือนจะไม่ทำงาน ดูที่http://tunes.org/ด้วย มันไม่ได้ใช้งาน แต่ได้รับการอภิปรายจำนวนมากรอบหัวข้อดังกล่าว
หมายเหตุ 2: ความคิดของไฟล์ที่มีการเปลี่ยนแปลงอย่างกว้างขวางในช่วงเวลา (ดูที่นี้คำตอบเกี่ยวกับประสบการณ์การเขียนโปรแกรมครั้งแรกของฉัน): ครั้งแรกMSDOSในปี 1980 ไอบีเอ็มพีซี (! ไดเรกทอรีไม่มี) ที่ VMS -ON 1978 Vaxen - (มีทั้งแบบคงที่บันทึก ไฟล์และไฟล์แบบเรียงลำดับที่มีระบบการกำหนดเวอร์ชันดั้งเดิม) เมนเฟรมในยุค 1970 ( IBM / 370 ที่มีOS / VS2 MVS ) มีความคิดที่แตกต่างกันมากในเรื่องของไฟล์และระบบไฟล์ เวลาในการเข้าถึงหน่วยความจำหลักเป็นสองสามพัน - ดังนั้นในเวลานั้นดิสก์ที่รันค่อนข้างเร็วกว่าวันนี้แม้ว่าดิสก์ของวันนี้จะเป็นอย่างแน่นอนเร็วกว่าในศตวรรษที่แล้ววันนี้อัตราส่วนความเร็ว CPU / ดิสก์ประมาณหนึ่งล้าน แต่ตอนนี้เรามี SSD) นอกจากนี้ไฟล์ยังมีประโยชน์น้อยกว่า (หรือแม้กระทั่งไม่ได้) เมื่อหน่วยความจำยังคงอยู่ (เช่นบนถังแม่เหล็กCAB500ยุค 1960 หรือคอมพิวเตอร์ในอนาคตที่ใช้MRAM )