Kami memiliki berbagai cara untuk menyimpan data program (menyimpan file dalam game, database karyawan, konfigurasi program, dll.):
- Teks biasa (pikirkan
.ini
dan.conf
) - XML
- Database (MySQL, SQLite ...)
.zip
dan sejenisnya yang berisi beberapa file (dengan format berbeda)- File biner (pikirkan
.doc
dll., Misalnya dibuat oleh alat serialisasi)
Apa perbedaan kasus penggunaan untuk format yang tercantum di atas, dan apa kelebihannya bertentangan dengan kekurangan (pikirkan kecepatan, fleksibilitas, ukuran file, kemudahan penggunaan ...)? Bagaimana cara memutuskan di antara mereka untuk tugas yang berbeda?
Tentang format zip: Ini hanya digunakan untuk memuat file lain. Bisa juga format kompresi lain. Ini memungkinkan struktur beberapa file, termasuk file gambar, file suara, dan file teks. Sebagai contoh, misalkan Anda memiliki format penyimpanan untuk pesan, yang mungkin berisi file. Anda dapat memiliki file berikut di dalam file zip:
message.txt (containing the message)
attachments (folder containing attachments)
audio.wav
picture.jpg
Jawaban:
Saya menggunakan sebagai berikut:
Teks biasa
Untuk konfigurasi - biasanya menggunakan YAML atau .ini. Dihentikan oleh saya untuk sebagian besar kegunaan kecuali ketika file teks adalah hasil yang diinginkan (mis. Cetak ke teks, simpan ke teks dll.)
XML
Untuk konfigurasi dan transportasi data; mis. ekspor, format melalui XSLT dll. Baik sebagai format file portabel (mis. SVG). Alat dan filter manipulasi yang sangat baik.
Basis data
Penyimpanan data utama dari dalam aplikasi / webapp. Gunakan itu sepanjang waktu sebagai tempat penyimpanan pilihan. Ini dapat diandalkan, kuat, dan Anda mendapatkan banyak hal (transaksi, integritas referensial, penghapusan / pembaruan cascading, indeks, kecepatan). Paling baik digunakan dengan layer, atau ORM (IMO).
Arsip file tunggal (mis. Zip)
Cocok untuk menyimpan beberapa aliran biner terkait secara kompak, mis. Gambar ROM untuk emulator. Terbaik untuk hal-hal yang tidak sering atau tidak harus diperbarui. Ini berat, lambat dan sulit untuk dimanipulasi;
Biner
Hanya di mana basis data tidak tersedia untuk menyimpan data aplikasi. Paling mudah dengan serialisasi (C ++). Format biner yang sangat disetel akan mengungguli yang lainnya untuk kecepatan dan ukuran.
sumber
Tidak ada peluru perak. Dalam pengalaman saya:
Teks biasa sebagai media penyimpanan adalah no otomatis. Beberapa kasus saya bahkan akan mempertimbangkan akan lebih baik ditutupi oleh file .config di mana saya memiliki skema dan tipe keamanan. Tampaknya kebutuhan akan keamanan jenis dan ekstraksi data hampir selalu muncul. Teks biasa membuat proses ini mimpi buruk.
XML : Ketik keamanan, validasi data, volume rendah, dan dalam beberapa kasus saya menggunakannya karena .NET memiliki dukungan bawaan yang kuat untuk serialisasi objek XML.
Basis data : Default saya. Ketik keamanan, kecepatan, transaksi, dipercaya dan sulit disalahkan karena memilih DB sebagai media penyimpanan jika sesuatu tidak berjalan sesuai rencana.
.zip adalah format kompresi, tidak yakin bagaimana ini bisa bertahan ..?
Biner : Saya hanya menggunakan biner ketika saya perlu membuat aliran memori sementara. Binary tidak menambah nilai dalam kemampuan query dibandingkan dengan DB atau XML di mana data saya diatur dengan skema.
Kemudahan penggunaan adalah relatif dan tergantung pada apa yang ingin Anda capai secara spesifik. Kecepatan serupa di luar apa yang saya katakan di atas mengenai volume. Jika ukuran file menjadi perhatian dan normalisasi yang tepat diterapkan, saya akan mengompresnya melalui zip atau format kompresi lain, tetapi ini adalah proses yang terpisah.
sumber
Saya menggunakannya sebagai berikut:
Teks Biasa
Jika kategori itu mencakup format yang sedikit lebih rumit, seperti YAML atau file properti, maka itu adalah pilihan terbaik untuk apa pun yang Anda harapkan orang baca dan edit dengan tangan. Keuntungan besar lainnya adalah kesederhanaan memodifikasinya melalui skrip kecil (mis. Sed).
Tidak ada yang mengalahkan kesederhanaan dan kemudahan penggunaan. Ketika tim dukungan harus mengonfigurasi sesuatu pada mesin jarak jauh (mis. Menyelesaikan masalah klien), atau IT harus mengkonfigurasi ulang sekelompok server yang menjalankan perangkat lunak Anda, mereka akan berterima kasih telah memilih format ini. Ini juga akan menyelamatkan Anda dari menulis beberapa perangkat lunak satu kali yang melakukan itu untuk mereka.
XML
Saya setuju dengan @Ingo di sini - tidak seperti teks biasa, XML lebih sulit diproses melalui skrip, dan mimpi buruk untuk diedit dengan imo tangan.
Namun, jika Anda memiliki data dengan beberapa struktur rumit di mana YAML menjadi tidak dapat dipahami dan masih ingin agar dapat dibaca dan diedit oleh manusia, maka XML mungkin merupakan pilihan terbaik.
Database relasional
Pilihan tepat ketika Anda memiliki banyak data (yang akan membuat teks biasa dan XML tidak praktis) yang mungkin Anda masih ingin mengizinkan pihak ketiga mengedit secara manual - melalui perintah SQL dan bahkan GUI.
Keuntungan lain adalah bahwa kode Anda yang mengelola konten sangat mudah dibaca. @ Richard-Harrison memberikan daftar keunggulan lainnya dalam jawabannya.
Database NoSQL
Satu kelebihan dibandingkan RDBMS adalah skalabilitas melalui distribusi, yang mungkin tidak terlalu relevan dengan pertanyaan Anda. Keuntungan yang mungkin lebih relevan adalah kesederhanaan toko kunci-nilai dan fleksibilitas schemalessness (apakah ini kata?). Ketika Anda menemukan diri Anda melanggar paradigma relasional: hanya menyimpan gumpalan ke database, mengaksesnya dengan kunci, dan memprosesnya melalui kode, kemudian pertimbangkan opsi ini. Beberapa pilihan (misalnya CouchDB) sangat portabel, memiliki tapak kecil dan juga skala sehingga mereka menawarkan alternatif non-relasional yang baik untuk MySQL dan SQLite.
Biner
Keuntungan dari biner adalah ia cepat dan ringkas. Ketika satu-satunya hal yang perlu dibaca dan diubah file Anda adalah sebuah program dan data tidak sesuai dengan paradigma atau kecepatan relasional sangat penting maka ini mungkin merupakan pilihan yang baik. Mungkin yang paling cocok untuk file media.
Saya harus menunjukkan bahwa saya belum menemukan kasus di mana akses sederhana ke data program tidak diperlukan di beberapa titik karena alasan yang tidak dipertimbangkan selama desain awal. Saat ini saya secara pribadi mencari opsi database untuk hal lain selain file yang memiliki format standar dan perlu dikodekan / didekodekan oleh perangkat lunak lain (misalnya audio, video).
Catatan: ada kesalahpahaman umum bahwa biner buram dan karenanya lebih aman. Tanpa perlindungan tambahan, itu bukan - jika seseorang ingin meretas perangkat lunak Anda maka cukup menyimpan konfigurasi Anda atau apa pun dalam biner tidak akan menghentikannya.
Arsip Terkompresi
Bukan benar-benar alternatif di atas, tetapi lebih merupakan tindakan ekstra.
Menguntungkan ketika Anda perlu mengirimkan hal-hal melalui jaringan, atau ketika Anda menyimpan banyak dan banyak data dan ingin menghemat ruang. Perhatikan bahwa ruang penyimpanan biasanya berlimpah hari ini, jadi pertimbangkan platform target Anda.
Berkinerja sangat cepat pada hampir semua hal hari ini (hukum Moore sedang beraksi, sayang), jadi satu-satunya alasan untuk tidak menggunakannya adalah karena menambah kompleksitas pada kode Anda. Tidak banyak kerumitan, tetapi masih merupakan pelanggaran prinsip KISS. Terutama rumit untuk file konfigurasi yang perlu diedit secara manual atau melalui skrip - dan jika Anda benar-benar perlu menghemat ruang di sana, maka Anda mungkin harus menggunakan opsi database.
sumber
Saya akan menggunakannya sebagai berikut:
sumber
Saya telah mendengar bahwa XML menggabungkan fitur teks terburuk (sulit / lambat untuk diproses) dan biner (tidak dapat dibaca).
sumber