Anda tampaknya membuat banyak asumsi, mungkin berdasarkan pengalaman Anda dengan SVN dan CVS.
Git dan Mercurial pada dasarnya seperti SVN dan CVS
Membandingkan git dan CVS seperti membandingkan iPad dan Atari. CVS diciptakan kembali ketika dinoaurs menjelajahi Bumi . Subversi pada dasarnya adalah versi perbaikan CVS. Dengan asumsi bahwa sistem kontrol versi modern seperti git dan pekerjaan Mercurial seperti mereka sangat tidak masuk akal.
Database relasional lebih efisien daripada database tujuan tunggal
Mengapa? Basis data relasional sangat rumit, dan mungkin tidak seefisien basis data satu tujuan. Beberapa perbedaan dari kepala saya:
- Sistem kontrol versi tidak perlu penguncian yang rumit, karena Anda tidak dapat melakukan banyak komit sekaligus.
- Sistem kontrol versi terdistribusi harus sangat efisien ruang, karena database lokal adalah salinan lengkap dari repo.
- Sistem kontrol versi hanya perlu mencari data dalam beberapa cara tertentu (oleh penulis, dengan revisi ID, terkadang pencarian teks lengkap). Membuat database Anda sendiri yang dapat menangani pencarian ID penulis / revisi itu sepele dan pencarian teks lengkap tidak terlalu cepat dalam database relasional yang saya coba.
- Sistem kontrol versi perlu bekerja pada banyak platform. Ini membuatnya lebih sulit untuk menggunakan database yang perlu diinstal dan dijalankan sebagai layanan (seperti MySQL atau PostgreSQL).
- Sistem kontrol versi pada mesin lokal Anda hanya perlu dijalankan ketika Anda melakukan sesuatu (seperti komit). Membiarkan layanan seperti MySQL berjalan sepanjang waktu untuk berjaga-jaga jika Anda ingin melakukan komit adalah sia-sia.
- Untuk sebagian besar, sistem kontrol versi tidak pernah ingin menghapus riwayat, cukup tambahkan saja. Itu dapat mengarah pada berbagai optimisasi, dan berbagai metode melindungi integritas.
Database relasional lebih aman
Lagi-lagi kenapa? Anda tampaknya berasumsi bahwa karena data disimpan dalam file, sistem kontrol versi seperti git dan Mercurial tidak memiliki komitmen atom , tetapi mereka melakukannya. Database relasional juga menyimpan database mereka sebagai file. Penting dicatat di sini bahwa CVS tidak melakukan komitmen atom, tetapi itu kemungkinan karena itu berasal dari zaman kegelapan, bukan karena mereka tidak menggunakan basis data relasional.
Ada juga masalah melindungi data dari korupsi begitu ada dalam database, dan sekali lagi jawabannya sama. Jika sistem file rusak, maka tidak masalah database mana yang Anda gunakan. Jika sistem file tidak rusak, maka mesin database Anda mungkin rusak. Saya tidak melihat mengapa database kontrol versi akan lebih rentan terhadap ini daripada database relasional.
Saya berpendapat bahwa sistem kontrol versi terdistribusi (seperti git dan Mercurial) lebih baik untuk melindungi database Anda daripada kontrol versi terpusat, karena Anda dapat mengembalikan seluruh repo dari klon mana pun. Jadi, jika server pusat Anda terbakar secara spontan, bersama dengan semua cadangan Anda, Anda dapat memulihkannya dengan menjalankannya git init
di server baru, lalu git push
dari mesin pengembang mana pun .
Menemukan kembali roda itu buruk
Hanya karena Anda dapat menggunakan database relasional untuk masalah penyimpanan apa pun, bukan berarti Anda harus melakukannya . Mengapa Anda menggunakan file konfigurasi alih-alih database relasional? Mengapa menyimpan gambar pada sistem file ketika Anda bisa menyimpan data dalam database relasional? Mengapa menyimpan kode Anda di sistem file ketika Anda bisa menyimpan semuanya dalam database relasional?
"Jika yang kamu miliki adalah palu, semuanya terlihat seperti paku."
Ada juga fakta bahwa proyek-proyek sumber terbuka mampu menemukan kembali roda kapan pun nyaman, karena Anda tidak memiliki jenis kendala sumber daya yang sama dengan proyek-proyek komersial. Jika Anda memiliki sukarelawan yang ahli dalam menulis basis data, mengapa tidak menggunakannya?
Adapun mengapa kami akan mempercayai para penulis sistem kontrol revisi untuk mengetahui apa yang mereka lakukan .. Saya tidak dapat berbicara untuk VCS lain, tetapi saya cukup yakin bahwa Linus Torvalds memahami sistem file .
Mengapa beberapa sistem kontrol versi komersial menggunakan database relasional?
Kemungkinan kombinasi dari yang berikut ini:
- Beberapa pengembang tidak ingin menulis basis data.
- Pengembang sistem kontrol versi komersial memiliki keterbatasan waktu dan sumber daya, sehingga mereka tidak mampu menulis database ketika mereka memiliki sesuatu yang mendekati apa yang mereka inginkan. Juga, pengembang itu mahal, dan pengembang basis data (seperti pada, orang yang menulis database) mungkin lebih mahal, karena kebanyakan orang tidak memiliki pengalaman semacam itu.
- Pengguna sistem kontrol versi komersial cenderung tidak peduli tentang overhead pengaturan dan menjalankan database relasional, karena mereka sudah memilikinya.
- Pengguna sistem kontrol versi komersial lebih cenderung menginginkan database relasional mendukung data revisi mereka, karena ini dapat diintegrasikan dengan proses mereka lebih baik (seperti backup misalnya).