Masuk Efek JSON pada Kinerja

22

Saya melihat semakin banyak artikel tentang login di JSON. Anda juga dapat menemukannya di blog NodeJS. Mengapa semua orang sangat menyukainya? Saya hanya bisa melihat lebih banyak operasi yang terlibat:

  • Beberapa objek baru sedang dibuat.
  • Merangkai objek, yang melibatkan penghitungan panjang string atau alokasi multi string.
  • GCing semua omong kosong yang telah dibuat.

Apakah ada tes pada kinerja saat menggunakan JSON logging dan string logging biasa? Apakah orang menggunakan JSON (untuk logging) di proyek perusahaan?

Pijusn
sumber

Jawaban:

36

Pencatatan JSON memberi Anda kemampuan untuk mengurai file log secara terprogram bahkan jika formatnya telah berubah dalam waktu .

Contoh yang baik adalah log Apache. Secara default Apache menggunakan commonformat untuk access.log:

"%h %l %u %t \"%r\" %>s %b"

Katakanlah Anda telah membuat parser offline yang mengambil salah satu file log tersebut dan menghitung beberapa statistik darinya.

Pada suatu saat Anda memperkenalkan subdomain ke aplikasi Anda dan memasukkannya virtual_hostke log Anda (hanya agar Anda dapat men-debug jika muncul masalah dengan salah satu subdomain):

"%v %h %l %u %t \"%r\" %>s %b"

Parser Anda tidak menggunakan virtual_hosts, tetapi Anda masih perlu menyesuaikan parser Anda dengan:

  • terima format log baru (perhatikan bagian %vatas format log)
  • masih mendukung format log lama (untuk file log lama)

Tetapi jika Anda masuk JSON , parser Anda bahkan tidak akan melihat bidang yang ditambahkan dan dengan senang hati dapat mengurai log baru serta log lama. Dan beberapa parser lain dapat menggunakan bidang yang ditambahkan jika ada .

Dan tentu saja untuk Anda , parsing JSON lebih mudah daripada menulis regexpske parse string log.

Laas
sumber
10
Contoh sempurna.
Florian Margaine
27

Jika mesin Anda berjalan sangat dekat dengan batasnya sehingga masalah seperti itu benar-benar penting, kemungkinan besar Anda memiliki masalah yang lebih serius. Walaupun mungkin ada situasi luar biasa di mana ini membuat beberapa perbedaan, banyak aplikasi (mungkin sebagian besar) berjalan pada mesin yang perbedaannya jika Anda login JSON, teks sederhana atau catatan ke database tidak masalah sama sekali. Objek, string, dan konversi lain harus dilakukan dalam banyak kasus (kecuali Anda log biner mentah?), Mungkin Anda tidak akan melihatnya, karena Anda menggunakan kelas default yang menanganinya di latar belakang (seperti jika Anda menulis ke database).

Jika Anda memerlukan evaluasi kinerja untuk ini, Anda harus membuatnya sendiri di mesin yang ingin Anda jalankan kode Anda dan dengan lingkungan pemrograman yang Anda gunakan sehari-hari. Jika ada overhead yang besar atau tergantung pada banyak hal. Misalnya, jika Anda menulis situs web di Ruby on Rails, data Anda dalam banyak kasus adalah hash, mengonversinya menjadi JSON hampir tidak menghasilkan apa-apa, karena representasi internal tidak jauh dari apa yang ingin Anda tulis (dan ini tipikal untuk kode Rails untuk melempar objek dan struktur data seperti itu sepanjang waktu).

Keuntungannya tergantung lagi pada alat Anda. Jika Anda memiliki JSON dibangun di perpustakaan Anda, Anda dapat dengan mudah membacanya dan menampilkannya dalam beberapa bentuk. Sekali lagi sebagai contoh: Dengan asumsi Anda memiliki antarmuka admin untuk situs web Anda dan ingin menunjukkan beberapa informasi logging yang disimpan di JSON, Anda dapat melakukan ini membaca dan menampilkan sebagai HTML dalam Ruby dalam satu baris kode dalam beberapa kasus.

thorsten müller
sumber
1
Saya yakin Anda tidak terlalu peduli membuang mikrodetik ...
Rhymoid
@Rhoidoid tidak, saya lebih suka menggunakan waktu saya untuk menyelesaikan masalah nyata.
thorsten müller
3
@ Rhymeoid Ada situasi di mana membuang mikrodetik itu buruk, pasti. Saya juga berpikir 99,9% programmer akan menulis kode di tempat yang tidak. Sebagai contoh, sebagian besar kerangka kerja web melakukan lebih dari yang saya butuhkan, dan itu memiliki overhead. Tapi, dengan itu datang serangkaian uji dan keamanan, ditambah lagi saya menghemat ratusan jam mengkodekannya sendiri. Untuk biaya tambahan yang perusahaan saya tidak habiskan untuk membangunnya dari awal, mereka dapat mendanai dua kali lipat perangkat keras jika mereka membutuhkannya (walaupun mungkin juga lebih cepat dari apa pun yang saya bisa buat sendiri ...) Pada akhirnya, mikrodetik tidak masalah.
corsiKa