Pertanyaan Praktik terbaik untuk struktur file kustom


Saat ini saya cukup ingin tahu bagaimana programmer lain mengatur data ke dalam file. Adakah yang bisa merekomendasikan artikel atau buku bagus tentang praktik terbaik untuk membuat struktur file?

Misalnya, jika Anda telah membuat perangkat lunak sendiri untuk tujuan apa pun, apakah Anda membiarkan data yang disimpan sebagai teks biasa, membuat serial, mengkode ke xml, dan mengapa Anda melakukan ini?

Apakah ada rahasia yang saya lewatkan?


5
2018-03-01 22:49


asal


Jawaban:


Umumnya, gunakan hal paling sederhana yang mungkin bisa berhasil, setidaknya pada awalnya. Pertimbangkan, misalnya, UNIX, di mana sebagian besar file-file konfigurasi tidak ada apa-apanya kecuali field yang dibatasi oleh whitepace, atau field yang dibatasi dengan karakter lain (seperti / etc / passwd, yang menggunakan ":" pembatas karena kolom GCOS dapat berisi kosong.)

Jika data Anda membutuhkan lebih banyak struktur, maka tanyakan pada diri Anda "alat apa yang dapat saya gunakan dengan mudah?" Python dan Ruby memiliki JSON dan YAML, misalnya.

XML pada dasarnya berguna jika Anda memiliki banyak hal berbasis XML, ATAU Anda berharap untuk mengubah XML menjadi bentuk yang dapat ditampilkan dalam browser. Jika tidak, biasanya sangat berat (ukuran kode, kompleksitas) untuk apa yang Anda dapatkan darinya.


7
2018-03-01 22:55



Tidak peduli format apa yang Anda pilih, ingat untuk menyimpan semacam nomor versi di dalam (saya cukup yakin bahwa Anda harus memperkenalkan beberapa perubahan).

Format sangat bergantung pada aplikasi dan jumlah data. Untuk beberapa aplikasi XML sudah sesuai, untuk aplikasi lain, struct ukuran tetap yang disimpan dalam file biner sudah bagus.

Saya menggunakan banyak format berbeda, tergantung situasinya, misalnya:

  • file teks biasa (delimited) untuk menyimpan dataset untuk analisis Matlab dan R
  • file biner - untuk menyimpan struktur ukuran tetap (dengan ukuran dinamis, akses acak menjadi sulit tanpa mempertahankan array terpisah dari offset untuk elemen). Salah satu hal positif yang Anda miliki kinerja dan efisiensi ruang (mengapa sebagian besar database menyimpan data dalam format biner?), Tetapi tidak terlalu baik bagi manusia untuk bekerja dengan. Ingat tentang endianess.
  • XML - biasanya untuk data konfigurasi, atau data yang ingin saya berikan kepada aplikasi pengguna lain (bersama dengan XSD). Sisi lain dapat menulis transformasi XSLT yang bagus atau mengkonsumsi data dengan cara lain (tentu saja mereka bisa melakukan hal yang sama dengan teks biasa atau data biner yang diberikan deskripsi format)

5
2018-03-01 22:56



Kecuali Anda memiliki persyaratan khusus, gunakan sesuatu yang sudah ada pustaka yang matang, sehingga Anda dapat menghindari menulis kode parsing Anda sendiri. Itu berarti XML / JSON, dll, seperti yang dikatakan orang.

Satu lagi yang bagus adalah buffer protokol Google (http://code.google.com/p/protobuf). Di sana Anda menulis definisi pesan umum dan compiler penyangga protokol menghasilkan objek untuk pengisian, pembuatan serial, dan deserialisasi data untuk Anda. Biasanya formatnya biner, tetapi Anda dapat menggunakan kelas TextFormat untuk menulis teks biasa seperti JSON juga. Yang menyenangkan tentang protobuf adalah bahwa kode versi dibuat untuk Anda. Dalam versi 2 dari format file Anda, yang harus Anda lakukan adalah menambahkan field ke file definisi .proto. Versi baru dapat membaca format file lama, dan hanya meninggalkan bidang baru kosong. Ini bukan apa yang dirancang untuk protobuf, tetapi mereka membuat format file biner yang mudah dan efisien untuk pesan khusus, dan kode tersebut dibuat untuk Anda.

Lihat juga Facebook Penghematan, sekarang di inkubator Apache.


2
2018-03-01 23:06



Seperti tahun-tahun berlalu, saya menemukan diri saya lebih banyak dan lebih menyukai teks kecuali itu hanya keluar dari pertanyaan. CPU cukup cepat sekarang kita dapat memecahkan kode cukup cepat.

Tentunya, ketika Anda harus sering memperbarui potongan-potongan kecil informasi di dalam file besar, ini bukanlah pilihan - tetapi kemungkinan besar itu menggambarkan basis data.

Ini akan mengambil situasi yang tidak biasa pada titik ini untuk membuat saya pergi dengan sesuatu selain salah satu dari dua opsi ini.


1
2018-03-01 23:07



+1 untuk XML. Memiliki sedikit overhead, tetapi mudah diuraikan, dibaca, dan di-debug. Bisa ketat, jika Anda menggunakan skema. Mudah diubah dengan XSLT, dan sangat portabel (dalam kawat atau hanya dalam flashdisk :)


1
2018-03-01 23:10



Ini benar-benar tergantung pada situasi tertentu. Anda perlu mempertimbangkan pilihan Anda terhadap jawaban atas berbagai pertanyaan:

  • Berapa banyak data yang perlu Anda simpan? Apakah Anda perlu mengoptimalkan representasi ringkas?
  • Apakah kinerja membaca / menulis penting? Apakah Anda perlu mengoptimalkan untuk akses disk dan serialisasi dan deserialisation low-impact?
  • Apakah Anda memerlukan akses acak dalam file? Apakah Anda perlu mengoptimalkan struktur untuk mencari data?
  • Apakah data ini akan digunakan di sistem yang berbeda, mungkin dengan pengkodean karakter yang berbeda? Apakah Anda perlu mengoptimalkan untuk mudah dibawa?

Sifat dari data itu sendiri akan memiliki dampak. Apakah ini struktur daftar yang datar? Apakah ini pohon? Apakah ini grafik siklik? Apakah catatan lebar tetap atau variabel?

Setelah jawaban atas pertanyaan-pertanyaan ini diketahui, Anda dapat memilih di antara opsi Anda, menjaganya sesederhana mungkin. Seringkali opsi populer (XML, CSV, YAML) akan sesuai dengan tujuan Anda. Jika tidak, maka Anda harus mengembangkan format Anda sendiri dan prosedur menulis dan membaca Anda sendiri.


1
2018-03-01 23:11



Ada begitu banyak kemungkinan, tetapi yang paling pragmatis haruslah XML

  • Ada perpustakaan XML yang layak untuk hampir setiap platform pengembangan
  • Kebanyakan platform memungkinkan serialisasi objek grafis dengan beberapa baris kode, sehingga XML tidak menimbulkan rasa sakit untuk diterapkan
  • Sebagian besar platform memiliki memori dan / atau pembaca streaming, sehingga Anda dapat menangani file yang sangat besar tanpa terlalu banyak penggunaan memori
  • Kebanyakan platform menyediakan tranformer XSLT, sehingga Anda dapat memindahkan file dari satu format ke format lainnya, bahkan dari XML ke non XML
  • Ada ekstensi pengindeksan untuk XML untuk menangani file yang sangat besar juga
  • XML memiliki XSD untuk memvalidasi format sebelum Anda mencoba membacanya
  • XML mampu mewakili objek yang sederhana atau kompleks
  • Jika Anda khawatir tentang ukuran file, cukup zipkan XML akhir. Teknik ini digunakan di Microsoft Office dll
  • XML masih bisa dibaca manusia
  • XML adalah standar umum

0
2018-03-02 00:01