Kemarin ada salah satu bahasan menarik yang cukup mengundang rasa penasaran saya bersama rekan kerja. Diskusi bermula saat kami sedang melakukan pengecekan fitur AWS VPC Flow Logs pada salah satu project yang sedang kami kerjakan. Fitur tersebut harus aktif agar trafik yang masuk ke dalam VPC dapat kami monitor. Untuk opsinya, kami bisa menyimpan log tersebut pada AWS S3 atau mengirimnya langsung ke AWS Cloudwatch jika menginginkan log yang lebih manusiawi dilihat 😀 Saat mengecek log, seperti biasa, kami mencoba membaca log yang masuk. Field yang cukup mengundang rasa penasaran yaitu field protocol dan start and end time. Protocol dicatat dalam format port number menggunakan standar IANA dan timestamp menggunakan Unix Time (a.k.a Epoch Time) yang mana mengundang pertanyaan, “kenapa log nya menggunakan format tersebut ketimbang format standar ISO 8601 yang mudah dibaca manusia?” Saya menjawab dengan spontan ke rekan kerja bahwa tujuan hal tersebut agar besar log yang dihasilkan lebih kecil dibandingkan dengan harus mencatatnya dengan format ISO 8601. Benarkah demikian?
Unix Time sendiri adalah cara untuk melacak waktu sebagai total detik yang berjalan. Hitungan nilai 0 berlaku sejak 1 Januari 1970 pukul 00:00:00 UTC dan akan bertambah nilainya setiap hari sebesar 86400. Cukup membingungkan? 😀 Saya akan simulasikan beberapa contoh waktu yang akan dikonversi ke Unix Time.
– 11 Januari 1970 pukul 00:00:00 UTC jika dikonversi ke Unix time menjadi 86400
– 11 April 1970 pukul 00:00:00 UTC jika dikonversi ke Unix time 8640000
Di internet sudah banyak sekali tools yang dapat membantu proses konversi Unix Time ini ke format yang mudah dibaca oleh manusia seperti Epoch Converter. Saya tidak akan bahas detail terkait Unix Time. Namun, saya akan merangkum kelebihan dan kekurangan pengunaan Unix Time ini dibandingkan dengan ISO 8601.
Unix Time
Kelebihan:
- Ukuran lebih kecil dan lebih cepat diproses pada program yang dibuat
- Mudah di-parsing dan sangat memudahkan pengguna apabila membutuhkan operasi aritmatika
Kekurangan:
- Cukup sulit dibaca manusia
- Tidak bisa merepresentasikan data sebelum 1 Januari 1970 dan setelah 19 Januari 2038 jika menggunakan Int32.
- Format zona waktu hanya dalam UTC
- Spesifikasi yang didukung hanya dalam satuan detik
ISO 8601
Kelebihan:
- Dapat dibaca manusia
- Format waktu Unix yang lebih baru
- Merepresentasi tanggal, waktu, tanggal-waktu, durasi dan interval
- Presisi mendukung sampai nanodetik
Kekurangan:
- Ukuran kurang pendek dan kecil
- Untuk tindakan aritmatika membutuhkan tambahan library seperti java.time.OffsetDatetime
Pada akhirnya, pilihan antara kemudahan membaca format ISO 8601 atau kecepatan pemrosesan Unix Time bergantung pada use case pengguna itu sendiri. Keduanya memiliki kekurangan dan kelebihan yang dapat dipertimbangkan. Secara pribadi, saya lebih memilih untuk menggunakan format ISO 8601 untuk mempercepat proses troubleshoot ketika terjadi masalah. Bagaimana dengan teman-teman? 😀
