Bagaimana cara memutuskan antara format penyimpanan dan apa contoh kasus penggunaan untuk beberapa dari mereka?

10

Kami memiliki berbagai cara untuk menyimpan data program (menyimpan file dalam game, database karyawan, konfigurasi program, dll.):

  • Teks biasa (pikirkan .inidan .conf)
  • XML
  • Database (MySQL, SQLite ...)
  • .zip dan sejenisnya yang berisi beberapa file (dengan format berbeda)
  • File biner (pikirkan .docdll., 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
Anto
sumber
wt biner, pertimbangkan Penyangga Protokol Google. Kemampuan deserialisasi yang malas luar biasa, dan Anda selalu memiliki kemungkinan untuk mengekstraknya dan menyimpannya sebagai teks berformat (dalam beberapa bahasa C ++ / Java / Python).
Matthieu M.

Jawaban:

6

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.

Richard Harrison
sumber
4

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.

P.Brian.Mackey
sumber
3

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.

Elad
sumber
2

Saya akan menggunakannya sebagai berikut:

  • Teks biasa : Aplikasi ini memiliki ukuran kecil data terstruktur sederhana (pasangan nilai nama untuk mantan.). Data tidak dimodifikasi secara bersamaan oleh banyak pengguna.
  • XML : Ukuran kecil dari data terstruktur yang tidak dimodifikasi secara bersamaan atau sering.
  • Database : data terstruktur besar atau akses bersamaan dibutuhkan. Kebutuhan untuk bertanya dan mencari adalah suatu keharusan dalam aplikasi.
  • Data biner : Saya akan menggunakannya hanya untuk streaming objek.
  • zipping adalah kompresi yang dapat ditambahkan sebagai proses lain untuk semua hal di atas kecuali database di server.
M.Sameer
sumber
1

Saya telah mendengar bahwa XML menggabungkan fitur teks terburuk (sulit / lambat untuk diproses) dan biner (tidak dapat dibaca).

Ingo
sumber
Bukan jawaban lengkap
Anto