senilai 2 pence saya. Agak rindu tapi ...... Saya memiliki persyaratan serupa di salah satu proyek inkubasi saya. Mirip dengan milik Anda, persyaratan utama saya di mana database dokumen (xml dalam kasus saya), dengan versi dokumen. Itu untuk sistem multi-pengguna dengan banyak kasus penggunaan kolaborasi. Preferensi saya adalah menggunakan solusi sumber terbuka yang tersedia yang mendukung sebagian besar persyaratan utama.
Singkatnya, saya tidak dapat menemukan satu produk pun yang menyediakan keduanya, dengan cara yang cukup skalabel (jumlah pengguna, volume penggunaan, penyimpanan, dan sumber daya komputasi). Saya cenderung pada git untuk semua kemampuan yang menjanjikan, dan (kemungkinan) solusi yang bisa dibuat dari itu. Saat saya lebih banyak bermain-main dengan opsi git, berpindah dari satu perspektif pengguna ke perspektif multi (mili) pengguna menjadi tantangan yang jelas. Sayangnya, saya tidak dapat melakukan analisis kinerja substansial seperti yang Anda lakukan. (.. malas / berhenti lebih awal .... untuk versi 2, mantra) Kekuatan untuk Anda !. Bagaimanapun, ide bias saya sejak itu berubah menjadi alternatif berikutnya (masih bias): mesh-up alat yang terbaik di bidang terpisah, database dan kontrol versi.
Sementara masih bekerja dalam proses (... dan sedikit diabaikan) versi yang diubah hanyalah ini.
- di frontend: (userfacing) menggunakan database untuk penyimpanan tingkat 1 (berinteraksi dengan aplikasi pengguna)
- di backend, gunakan sistem kontrol versi (VCS) (seperti git) untuk melakukan pembuatan versi objek data dalam database
Intinya, ini sama saja dengan menambahkan plugin kontrol versi ke database, dengan beberapa lem integrasi, yang mungkin harus Anda kembangkan, tetapi mungkin jauh lebih mudah.
Cara kerjanya (seharusnya) adalah pertukaran data antarmuka multi-pengguna utama dilakukan melalui database. DBMS akan menangani semua masalah menyenangkan dan kompleks seperti multi-pengguna, konkurensi e, operasi atom, dll. Pada backend, VCS akan melakukan kontrol versi pada satu set objek data (tidak ada masalah konkurensi, atau masalah multi-pengguna). Untuk setiap transaksi yang efektif pada database, kontrol versi hanya dilakukan pada catatan data yang secara efektif akan berubah.
Adapun lem interfacing, akan berupa fungsi interworking sederhana antara database dan VCS. Dalam hal desain, sebagai pendekatan sederhana akan menjadi antarmuka yang digerakkan oleh peristiwa, dengan pembaruan data dari database yang memicu prosedur kontrol versi (petunjuk: dengan asumsi Mysql, penggunaan pemicu dan sys_exec () bla bla ...). Dalam hal kompleksitas implementasi, ini akan berkisar dari yang sederhana dan efektif (misalnya pembuatan skrip) hingga yang kompleks dan indah (beberapa antarmuka konektor terprogram). Semua tergantung pada seberapa gila Anda ingin melakukannya, dan berapa banyak modal keringat yang bersedia Anda keluarkan. Saya rasa skrip sederhana harus melakukan keajaiban. Dan untuk mengakses hasil akhir, berbagai versi data, alternatif sederhana adalah mengisi klon database (lebih merupakan tiruan dari struktur database) dengan data yang direferensikan oleh tag versi / id / hash di VCS. lagi-lagi bit ini akan menjadi tugas kueri / terjemahkan / peta sederhana dari sebuah antarmuka.
Masih ada beberapa tantangan dan hal yang tidak diketahui yang harus dihadapi, tetapi saya kira dampaknya, dan relevansi dari sebagian besar masalah ini akan sangat bergantung pada persyaratan aplikasi dan kasus penggunaan Anda. Beberapa mungkin hanya menjadi bukan masalah. Beberapa masalah termasuk kecocokan kinerja antara 2 modul kunci, database dan VCS, untuk aplikasi dengan aktivitas pembaruan data frekuensi tinggi, Penskalaan sumber daya (penyimpanan dan daya pemrosesan) dari waktu ke waktu di sisi git sebagai data, dan pengguna tumbuh: mantap, eksponensial atau akhirnya dataran tinggi
Dari koktail di atas, inilah yang sedang saya buat
- menggunakan Git untuk VCS (awalnya dianggap CVS lama yang baik karena hanya menggunakan perubahan atau delta antara 2 versi)
- menggunakan mysql (karena sifat data saya yang sangat terstruktur, xml dengan skema xml yang ketat)
- bermain-main dengan MongoDB (untuk mencoba database NoSQl, yang sangat cocok dengan struktur database asli yang digunakan di git)
Beberapa fakta menyenangkan - git sebenarnya melakukan hal-hal yang jelas untuk mengoptimalkan penyimpanan, seperti kompresi, dan penyimpanan hanya delta di antara revisi objek - YA, git hanya menyimpan perubahan atau delta antara revisi objek data, di mana itu berlaku (tahu kapan dan bagaimana) . Referensi: file paket, jauh di dalam inti internal Git
- Review penyimpanan objek git (sistem file beralamat konten), menunjukkan kesamaan yang mencolok (dari perspektif konsep) dengan database noSQL seperti mongoDB. Sekali lagi, dengan mengorbankan modal kerja, ini mungkin memberikan kemungkinan yang lebih menarik untuk mengintegrasikan 2, dan penyesuaian kinerja
Jika Anda sampai sejauh ini, izinkan saya jika hal di atas mungkin berlaku untuk kasus Anda, dan dengan asumsi demikian, bagaimana hal itu akan disesuaikan dengan beberapa aspek dalam analisis kinerja komprehensif terakhir Anda.