Mengapa Windows / Linux tidak menggunakan Database relasional (RDBMS)?

32

Mengapa Windows / Linux tidak menggunakan database relasional ( RDBMS )?

Saya tahu mereka menggunakan sistem file untuk menyimpan semua data tetapi bukankah menurut Anda lebih efisien menggunakan database seperti yang kami gunakan di situs web / aplikasi web?

Harap uraikan penggunaan sistem file di atas basis data untuk penyimpanan.

Ini bukan duplikat Kapan sebaiknya penggunaan basis data lebih disukai daripada parsing data dari file teks? Saya berbicara dalam konteks konteks sistem operasi saja, dan pertanyaan itu digeneralisasi.

Pratik
sumber
32
Sistem file adalah database.
20
Karena sistem file diperlukan untuk mengimplementasikan basis data.
Kilian Foth
16
Windows menggunakan database, itu disebut "Registry". Atau maksud Anda "database relasional"? Itu pertanyaan yang berbeda.
Doc Brown
6
@ gnasher729 Sistem file adalah jenis database yang sangat khusus, dan hanya baik untuk jenis data tertentu. Jenis data lain lebih baik disajikan dengan berbagai jenis basis data (misalnya relasional).
6
@KilianFoth, tidak juga. Anda bisa menulis ke partisi disk mentah (yang tidak sebanding dengan file OS).
Paul Draper

Jawaban:

60

Saat ini, sebagian besar sistem manajemen basis data (mis. PostGreSQL , MongoDB , dll ...) secara internal menyimpan data mereka di dalam file OS (di masa lalu, beberapa DBMS menggunakan partisi disk mentah secara langsung).

Pada komputer baru-baru ini masih menggunakan hard disk berputar , disk sangat lambat - relatif terhadap CPU atau RAM - yang menambahkan beberapa lapisan perangkat lunak tidak relevan. Teknologi SSD mungkin berubah sedikit, dan beberapa sistem file dioptimalkan untuk SSD.

File ada di sebagian besar OS secara umum untuk alasan historis dan sosial (khususnya, kompiler C dan sebagian besar alat - editor, penghubung - file yang diinginkan, jadi ada masalah ayam dan telur), dan karena ada banyak file yang sangat bagus implementasi sistem .

BTW, beberapa fasilitas sistem penting dapat menggunakan database. Misalnya pada Linux PAM dapat dikonfigurasi untuk menggunakan informasi dalam database (tetapi ini jarang dilakukan dalam praktiknya). Juga, beberapa server email mungkin menyimpan sebagian atau sebagian besar datanya dalam basis data (mis. Exim ).

File adalah abstraksi yang sedikit lebih rendah daripada database, sehingga mereka dapat lebih mudah diimplementasikan (seperti sistem file & lapisan VFS di kernel Linux) dan lebih cepat digunakan. Secara khusus, operasi pada file jauh lebih terbatas daripada pada database. Bahkan, Anda bisa melihat file atau sistem file karena beberapa database sangat terbatas!

Anda dapat merancang sistem operasi tanpa file , tetapi dengan beberapa mesin persistensi ortogonal lainnya (mis. Memiliki setiap proses persisten, maka Anda tidak terlalu peduli secara eksplisit tentang penyimpanan, karena OS mengelola sumber daya persisten). Ini telah dilakukan di beberapa sistem operasi akademik (1) (dan juga di mesin Smalltalk dan Lisp tahun 1980-an, entah bagaimana di IBM System i , alias AS / 400 , dan di beberapa proyek mainan yang terhubung dari osdev), tetapi ketika Anda mendesain OS Anda dengan cara ini Anda tidak dapat memanfaatkan banyak alat yang ada (mis. Anda juga perlu membuat kompiler dan antarmuka pengguna Anda dari awal, dan itu banyak pekerjaan).

Perhatikan bahwa sistem operasi microkernel mungkin tidak memerlukan file yang disediakan oleh lapisan kernel karena sistem file hanya server aplikasi (misalnya penerjemah Hurd yang berjalan di userland). Lihatlah juga di unikernel pendekatan di hari ini MirageOS

Linux (dan mungkin Windows, yang mendapatkan sebagian besar inspirasinya dari VMS & Unix ) memerlukan file untuk berfungsi. Paling tidak, program init (program pertama dimulai oleh kernel) harus dapat dieksekusi yang disimpan dalam file (sering /sbin/init, tetapi bisa jadi systemd hari ini), dan (hampir) semua program lain dimulai dengan execve (2 ) syscall jadi harus disimpan dalam file. Namun, FUSE memungkinkan Anda untuk memberikan semantik seperti file untuk hal-hal yang bukan file.

Perhatikan juga bahwa di Linux (dan mungkin bahkan Windows, yang saya tidak tahu dan tidak pernah digunakan) sqlite adalah perpustakaan yang mengelola beberapa database SQL dalam file dan menyediakan API untuk itu. Telah diketahui secara luas bahwa Android (varian Linux) menggunakan banyak file sqlite (tetapi masih memiliki sistem file mirip POSIX).

Baca juga tentang pemeriksaan aplikasi (yang, pada banyak OS saat ini, diterapkan untuk menulis status proses dalam file). Didorong ke ekstrem, pendekatan itu tidak perlu secara manual menulis file aplikasi (tetapi hanya untuk mempertahankan seluruh proses menggunakan mesin pemeriksaan).

Sebenarnya, pertanyaan yang menarik adalah mengapa sistem operasi saat ini masih menggunakan file, dan jawabannya adalah warisan, dan alasan ekonomi dan budaya (sayangnya, sebagian besar bahasa pemrograman dan perpustakaan saat ini masih menginginkan file).


Catatan 1: OS akademis yang persisten mencakup Lisaac & Grasshopper , tetapi proyek akademik ini tampaknya tidak aktif. Lihat juga di http://tunes.org/ ; itu tidak aktif, tetapi telah banyak berdiskusi tentang topik-topik seperti itu.

Catatan 2: gagasan file telah banyak berubah dari waktu ke waktu (lihat jawaban ini tentang pengalaman pemrograman pertama saya): MSDOS pertama pada PC IBM tahun 1980-an (tanpa direktori!), VMS -pada 1978 Vaxen - (keduanya memiliki catatan tetap file dan file berurutan, dengan sistem versi primitif), mainframe tahun 1970-an ( IBM / 370 dengan OS / VS2 MVS ) memiliki gagasan yang sangat berbeda tentang file dan sistem file (khususnya karena pada waktu itu rasio waktu akses hard disk ke waktu akses memori inti adalah beberapa ribu - jadi pada saat itu disk berjalan relatif lebih cepat daripada hari ini, bahkan jika disk saat ini benar - benarlebih cepat dari abad sebelumnya, hari ini rasio kecepatan CPU / disk sekitar satu juta; tapi kami sekarang memiliki SSD). Juga, file kurang (atau bahkan tidak) berguna ketika memori persisten (seperti pada drum magnetik CAB500 , 1960-an; atau komputer masa depan menggunakan MRAM )

Basile Starynkevitch
sumber
9
Perlu juga disebutkan bahwa beberapa sistem file sebenarnya memiliki sejumlah fitur RDBMS. Misalnya, file metadata (khususnya metadata yang diperluas) di BeFS diindeks dengan B + tree, dan manajer file BeOS memiliki mesin pencarian seperti SQL yang mencari metadata yang diindeks untuk menemukan file.
greyfade
2
Saya tidak berani memasukkannya ke dalam jawaban saya, tetapi blog tunes.org & J.Pratrat dapat memperluas pandangan Anda tentang perangkat lunak & sistem operasi.
Basile Starynkevitch
4
@greyfade: Sistem file adalah database objek. Tidak ada sistem file yang saya tahu memiliki kemampuan untuk menjawab pertanyaan relasional (misalnya file dengan waktu mod dalam rentang tertentu). Anda harus melakukannya dengan menanyakan waktu mod semua file dan memfilter sendiri. Beberapa sistem file berkinerja baik ketika digunakan secara langsung sebagai objek database (menyimpan jutaan file yang sangat kecil, di mana nama file adalah kuncinya), tetapi yang lain tidak masalah dengan jenis beban kerja ini.
Peter Cordes
3
@PeterCordes: BeFS melakukan itu. Karena semua metadata diindeks oleh B +, itu mendukung berbagai kueri, wildcard, bergabung, dan hal-hal menyenangkan lainnya. Saya ingat pernah mendengar bahwa Microsoft melakukan hal yang sama di WinFS.
greyfade
4
PalmOS adalah salah satu OS yang cukup umum yang tidak memiliki sistem file. Sebaliknya ia memiliki basis data relasional yang diimplementasikan langsung ke RAM / flash (perangkat keras asli tidak menggunakan memori flash seperti iPhone hari ini tetapi menggunakan RAM statis yang didukung baterai untuk RAM dan disk).
slebetman
23

Meskipun ini berdasarkan pendapat, saya pikir itu hanyalah artefak sejarah. OS Awal menggunakan desain sistem file sederhana untuk kinerja yang cukup kuat terkait dengan karakteristik perangkat keras yang tersedia pada saat itu, dan itu sudah menjadi cara yang sama sejak itu. Sulit untuk mengubah API baca / tulis file lama untuk kueri / masukkan API transaksional yang lebih banyak setelah API dibuat.

Semua sistem file saat ini memiliki persyaratan untuk kompatibel dengan API lama ini.

Microsoft memang berpikir tentang mengganti sistem file dengan yang berbasis RDBMS , dalam pengembangan Longhorn . Itu terlalu banyak perubahan bagi mereka untuk melakukan, tetapi Anda melihat upaya mereka terus dalam bentuk Pencarian Windows (di mana RDBMS digunakan untuk menyimpan salinan metadata) dan fitur seperti sistem Filestream SQL Server (di mana tabel database data file diekspos ke OS sebagai direktori biasa yang memungkinkan Windows Explorer mengakses data, dan query SQL dari data yang sama).

OS lain memang memiliki sistem file RDBMS. AS / 400 dulu punya ini, meskipun saya tidak pernah cukup belajar tentang mereka; Saya ingat betapa anehnya itu muncul pada saat itu). Saya pikir sistem mainframe lainnya memiliki pendekatan yang sama.

gbjbaanb
sumber
1
Jika ingatanku, Anda mungkin memikirkan DB2 UDB pada OS / 400 alias i5 / OS (sekarang disebut hanya "IBM i"): publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rzamb/…
Brian Klein
1
Ya, akan lebih baik untuk MULAI TRANSAKSI / KOMIT pada izin file daripada melakukan "find with -exec". Ketinggian sistem file primitif tingkat rendah yang masuk ke adminland tidak disengaja dan harus sesuai dengan plugboard pemrograman. "Filesystem" sebagai penyimpanan bytestream yang tepat dan sistem manajemen metadata (meskipun interpretasi konten bytestream masih harus diserahkan ke lapisan aplikasi, kalau tidak sakit kepala akan terjadi)? Ya, kami mau!
David Tonhofer
12

Alasan sebenarnya adalah kurangnya kebutuhan untuk itu. Meletakkan basis data di atas file, daripada menggabungkannya, menangani sebagian besar situasi setidaknya serta solusi gabungan dengan kompleksitas yang jauh berkurang. Dalam beberapa situasi yang disebutkan orang lain, kami juga melapisi bagian file di atas basis data (seperti struktur izin). Dalam hal ini, basis data yang mengelola izin tersebut jauh lebih sederhana daripada RDBMS komersial.

Ada keuntungan untuk menggabungkannya, tetapi sejauh ini hanya sedikit dan cukup jauh di antara gerakan itu yang tumbuh perlahan. Pertimbangkan betapa jarangnya orang mengatakan "Beri saya kolom ke-3 dari setiap faktur yang saya terima sejak 2010, dan jumlahkan semuanya," atau "jangan biarkan saya menghapus file ini sampai saya menghapusnya dari Excel spreadsheet juga. "

Sistem file memiliki beberapa keunggulan dibandingkan database relasional yang membuat mereka tetap berjalan:

  • Mereka jauh lebih sederhana. Ini masalah besar saat mem-bootstrap komputer. Bahkan di Android , di mana mereka memiliki RDBMS untuk penyimpanan, mereka memiliki gambar-gambar tua polos untuk mengelola proses bootloading awal.
    • Lebih mudah untuk menentukan batasan mereka. Dalam mesin yang tidak terbatas, RDBM menyediakan daya yang cukup besar. Namun, dalam dunia sistem file, ada banyak batasan yang berasal dari mencoba menjadi cepat ketika langsung berlapis di atas disk yang berputar. Lebih sulit untuk membuktikan bahwa permintaan RDBMS tidak melebihi batasan itu daripada memberikan jaminan yang sama untuk sistem file.
  • Mereka menangani struktur hierarkis dengan lebih baik. Dalam banyak kasus, masih wajar bagi orang untuk menyimpan file dalam bentuk hierarkis. Dalam RDBMSes, itu adalah kasus khusus. Sistem file mengoptimalkan untuk kasus khusus itu, RDBMS tidak.
  • Keandalan. Jauh lebih mudah untuk membuktikan bahwa dua lapisan bekerja secara independen daripada membuktikan bahwa satu sistem raksasa bekerja dengan sempurna. Array RAID , jurnal gagal-aman pada saat listrik mati, dan fitur-fitur canggih lainnya lebih mudah diimplementasikan dalam lapisan di bawah lapisan yang berurusan dengan hal-hal seperti ACID atau batasan kunci asing.
Cort Ammon - Reinstate Monica
sumber
1
keandalan: Anda dapat menjalankan DB di atas RAID seperti halnya Anda dapat menjalankan sistem file pada perangkat RAID, vs. menggunakan disk secara langsung. Penjurnalan perlu dilakukan di dalam filesystem / DB, meskipun (kecuali jika Anda tidak ingin memberikan jaminan kebenaran dengan menonaktifkan caching menulis, dan tidak pernah menata ulang syncmode I / Os. ​​Ie .) +1 untuk semua poin Anda yang lain, esp. kinerja hierarki yang cepat di mana banyak hal dalam satu subdir tidak memperlambat kinerja di subdir lainnya. Kecuali setiap dir atau file adalah tabel yang berbeda ...
Peter Cordes
keandalan: OS IBM i series dirancang agar lebih andal dari yang dapat Anda bayangkan, dirancang untuk penggunaan gaya mainframe. Hirarki hanya ada karena keterbatasan sistem file, maka MS ingin mencari dan menjalankan operasi DB di atas sistem file yang ada. Lihatlah ke gmail sebagai contoh bagaimana Anda dapat memiliki hierarki tanpa menggunakan hierarki!
gbjbaanb
3

Saya pikir jawaban lain memberikan spektrum alasan yang luas mengapa sistem operasi tidak bergantung pada basis data relasional secara internal / eksklusif jadi saya hanya akan berbagi informasi menarik yang pernah saya temui.

Rupanya, ada teknologi yang memungkinkan Anda untuk me-mount database relasional sebagai sistem file ketika penggunaannya dibenarkan. Oracle DBFS (Database File System) adalah contohnya. Cuplikan dari dokumentasi ini menjelaskan alasan di baliknya dengan cukup baik:

Database File System (DBFS) memanfaatkan fitur database untuk menyimpan file, dan kekuatan database dalam mengelola data relasional secara efisien, untuk mengimplementasikan antarmuka sistem file standar untuk file yang disimpan dalam database. Dengan antarmuka ini, menyimpan file dalam basis data tidak lagi terbatas pada program yang ditulis khusus untuk digunakan BLOBdan CLOBantarmuka terprogram. File dalam database sekarang dapat diakses secara transparan menggunakan program sistem operasi apa saja yang bekerja pada file.

Solusi ini menyediakan satu set antarmuka (klien baris perintah, pustaka kode) untuk data LOB yang disimpan dalam tabel database. Ini dapat digunakan pada sistem operasi Windows dan Linux (walaupun sejauh yang saya tahu, tingkat integrasi bervariasi di antara mereka)

Komponen Oracle DBFS

Sumber: docs.oracle.com

Menurut dokumentasi, sistem file harus dapat digunakan secara transparan di Linux

Di Linux, ini dbfs_clientjuga memiliki antarmuka pemasangan yang menggunakan FUSEmodul kernel Filesystem di User Space ( ) untuk mengimplementasikan titik pemasangan sistem file yang menyediakan akses transparan ke file yang disimpan dalam database dan tidak memerlukan perubahan pada kernel Linux. Ia menerima panggilan sistem file standar dari FUSEmodul kernel, dan menerjemahkannya menjadi panggilan OCI ke prosedur PL / SQL di DBFS Content Store .

Oleh karena itu, jawaban atas pertanyaan Anda adalah bahwa, secara umum, tidak ada alasan bagi sistem operasi untuk menggunakan basis data relasional sebagai sistem file (dan jika komponen inti OS, ini sebenarnya akan merepotkan). Pada saat yang sama dimungkinkan bagi seseorang untuk melakukannya ketika beberapa masalah membutuhkannya.

toniedzwiedz
sumber
2

Fungsi utama dari setiap OS adalah untuk memfasilitasi interaksi antara aplikasi, perangkat keras dan pengguna.

Jadi .. mengapa Windows / Linux OS tidak menggunakan Database relasional (RDBMS)? Ini adalah pertanyaan tentang proporsi Alkitab, tetapi jawaban singkatnya adalah: Tidak ada manfaat nyata yang dapat diperoleh dari menggunakan struktur yang kompleks seperti rdbms sebagai sistem file.

"Relational" adalah kata yang digunakan dalam "Relational Database" dan sebagian besar data yang disimpan dalam sistem file tidak terkait dengan data lainnya. Sistem file umumnya diimplementasikan sebagai basis data terbatas, tidak hanya yang relasional.

Nik Pfirsig
sumber
Mungkin pertanyaan yang lebih baik adalah - mengapa aplikasi membutuhkan basis data alih-alih sekadar mempertahankan data ke file? Saya tidak pernah menemukan jawaban yang memuaskan untuk pertanyaan ini. Semua manfaat yang seharusnya dari database relasional dapat diperoleh dengan file yang berkelanjutan
Sridhar Sarnobat