- Format yang disebut-sebut lebih "unggul" untuk menggantikan CSV sering diperkenalkan, tetapi kebanyakan didasarkan pada perbandingan yang bias dan mengabaikan kekuatan sejati CSV
- Tulisan ini bukan mengatakan CSV itu sempurna, melainkan ingin menyoroti kelebihan-kelebihannya yang sering diremehkan
- Di tengah suasana yang menganggap membenci CSV terlihat keren, tulisan ini mengingatkan kembali nilai sejati CSV
1. CSV sangat sederhana
- Definisi CSV persis seperti judulnya: "nilai yang dipisahkan koma"
- Baris dipisahkan dengan baris baru, kolom dipisahkan dengan koma
- Jika sebuah nilai mengandung koma atau baris baru, nilai itu dibungkus dengan tanda kutip, dan tanda kutip itu sendiri direpresentasikan dengan tanda kutip ganda
- Tanpa spesifikasi yang rumit, siapa pun dapat memahaminya dan menggunakannya secara intuitif
- Meski begitu, untuk parsing yang akurat tetap disarankan memakai parser CSV khusus
2. CSV adalah gagasan kolektif
- Tidak ada pemilik, tidak diprivatisasi
- RFC 4180 memang ada, tetapi kebanyakan orang menganggapnya hanya sebagai referensi
- Ini adalah format bebas yang bertumpu pada aturan bersama yang dibagikan secara implisit oleh para pengembang di seluruh dunia
3. CSV adalah teks
- Seperti JSON, YAML, dan XML, CSV adalah format teks murni yang dapat dibaca manusia
- Bisa dibuka dengan editor teks apa pun, dan isinya dapat diperiksa tanpa alat tambahan
- Cara encoding-nya juga bisa dipilih dengan bebas
4. CSV dioptimalkan untuk streaming
- Karena strukturnya dibaca per baris, konsumsi memorinya sangat rendah
- Dengan kode sederhana saja, data berukuran beberapa gigabita bisa diproses hanya dengan beberapa KB memori
- Format berorientasi kolom seperti Parquet sulit diproses secara streaming dan memerlukan buffering yang kompleks
- Kekurangannya, jika hanya ingin melihat kolom tertentu pun seluruh baris tetap harus dibaca
5. CSV mudah ditambahkan
- Sangat mudah membuka file dalam mode append(
a+) lalu menambahkan baris baru di bagian akhir
- Sebaliknya, format berorientasi kolom seperti Parquet tidak efisien dan lebih rumit untuk penambahan baris
6. CSV mendukung tipe dinamis
- Karena tidak memiliki tipe tetap, data bisa ditafsirkan dengan fleksibel
- Contoh: JavaScript tidak bisa merepresentasikan integer 64-bit dengan baik, tetapi CSV bisa digunakan tanpa batasan seperti itu
- Ini memberi keunggulan dalam kompatibilitas lintas bahasa dan fleksibilitas
- Namun, jika ditafsirkan keliru bisa menimbulkan kesalahan → perlu kehati-hatian saat digunakan
- Jika membutuhkan performa tinggi, teks juga bisa diproses langsung di level biner tanpa mendekodekannya terlebih dahulu
7. CSV ringkas
- Karena header hanya ada di bagian paling awal file, hampir tidak ada pengulangan format
- JSON dan XML memiliki overhead besar karena pengulangan key
- Representasi string-nya pun sudah ringkas, dan overhead dari format itu sendiri (koma, tanda kutip, dll.) sangat kecil
8. CSV yang dibalik pun tetap valid
- CSV tetap merupakan CSV yang valid bahkan jika dibalik pada level byte
- Ini dimungkinkan berkat cara escape tanda kutip ganda, karena skemanya bersifat palindromik
- Berkat sifat ini, bagian akhir file CSV bisa dibaca dengan sangat efisien
- Contoh: saat melanjutkan proses yang terhenti, cukup baca beberapa baris terakhir file untuk memulai lagi
9. Excel membenci CSV
- Jika Excel merasa suatu format merepotkan, itu justru bisa menjadi tanda bahwa Anda berada di jalan yang benar
3 komentar
Yang sederhana adalah yang terbaik!
Yang lebih buruk itu lebih baik!
Komentar Hacker News
Alasan menyukai file CSV dan INI adalah karena keduanya sederhana, berbasis teks, tidak memiliki tipe yang dikodekan dalam formatnya, dan hanya terdiri dari string
CSV itu elegan, tetapi punya cacat fatal — tanda kutip memiliki efek "non-lokal"
Hal terbaik dari CSV adalah siapa pun bisa menulis parser dalam 30 menit
Orang yang menyukai CSV mungkin belum pernah diminta menangani pencegahan injeksi CSV di lingkungan perusahaan
Ada banyak alasan untuk menyukai CSV
Baru-baru ini saya sedang mengembangkan solusi berbasis Raspberry Pi
Hal yang tidak menyenangkan dari CSV adalah parser dan serializer yang ditulis cepat sering mengulangi kesalahan umum dalam menangani tanda kutip
csvyang sangat bagusJika ini benar-benar surat cinta, maka seharusnya ditulis dalam format CSV
Sanggahan terhadap JSON tidak terlalu meyakinkan
Sebagai orang yang menyukai format modern, ketika ragu saya menggunakan CSV atau JSONL
grepdan bisa di-stream