Pertanyaan harus jelas dari judulnya. Sebagai contoh, Apache menyimpan akses dan kesalahan log dalam file, bukan RDBMS, tidak peduli seberapa besar atau kecil skala itu digunakan.
Untuk RDMS kita hanya perlu menulis query SQL dan itu akan bekerja sementara untuk file kita harus menentukan format tertentu dan kemudian menulis regex atau mungkin parser untuk memanipulasi mereka. Dan mereka bahkan mungkin gagal dalam situasi tertentu jika perhatian besar tidak dibayarkan.
Namun semua orang tampaknya lebih memilih sistem file untuk memelihara log. Saya tidak bias terhadap salah satu dari metode ini tetapi saya ingin tahu mengapa ini dipraktikkan seperti ini. Apakah kecepatan atau rawatan atau sesuatu yang lain?
Jawaban:
Terlalu banyak hal dapat gagal dengan database dan mencatat kegagalan ini juga penting.
Kecuali jika Anda memiliki sistem database yang memungkinkan transaksi otonom (atau tidak ada transaksi sama sekali), logging akan memerlukan koneksi terpisah sehingga rollback atau komit dalam logging tidak mengganggu rollback atau komit dalam aplikasi.
Banyak hal yang layak dicatat terjadi selama startup, yaitu mungkin sebelum koneksi database telah dibuat.
Dalam apa yang bisa menjadi pengaturan khas, file log baru dibuat setiap hari, file log lama dikompresi dan disimpan selama 2 minggu, sebelum akhirnya dihapus. Tidak mudah melakukan hal yang sama dalam RDBMS.
sumber
DELETE FROM dbo.Log WHERE LogDate < today minus 2 weeks
Saya telah melihat log yang ditulis ke DB sebelumnya (dan kadang-kadang Anda mendapatkan opsi yang dapat dikonfigurasi untuk logging, di mana jejak pergi ke file, kesalahan ke DB, fatals ke Windows Event log).
Alasan utamanya adalah kecepatan dan ukuran, memungkinkan beberapa penelusuran dapat menghasilkan kualitas logging yang luas dan luas - Saya telah menelusuri file log berukuran gigabyte. Alasan utama lainnya adalah bahwa membaca log harus berurutan, tidak ada kebutuhan nyata untuk meminta log, kecuali untuk menemukan kesalahan atau entri tertentu - dan find-in-file berfungsi dengan baik untuk itu.
sumber
Kecepatan adalah salah satu alasannya; lainnya adalah:
sumber
Pertama.
Transaksi basis data tidak dapat gagal saat Anda tidak berhati-hati?
Menulis ke file teks memiliki sejumlah manfaat, yang paling penting
sumber
Anda meningkatkan Apache secara khusus, jadi saya akan membahas ini secara rinci.
Apache dapat dikonfigurasikan untuk masuk ke database, walaupun itu membutuhkan plugin eksternal untuk melakukannya. Menggunakan plugin semacam itu dapat membuat analisis log lebih mudah, tetapi hanya jika Anda bermaksud untuk menulis perangkat lunak analisis log Anda sendiri. Alat analisis log off-the-shelf standar menganggap log Anda ada dalam file, sehingga Anda tidak akan dapat menggunakannya.
Ketika saya melakukan ini, saya juga mengalami masalah keandalan: jika buffer tulis server database terisi (yang dapat terjadi dengan mysql jika Anda menggunakan kuota sistem file Anda untuk pengguna yang menjalankannya di bawah) ia mulai mengantri kueri sampai mereka mampu untuk melanjutkan, pada titik mana Apache mulai menunggu sampai selesai, mengakibatkan permintaan digantung ke situs web Anda.
(Masalah ini sekarang dapat diperbaiki, tentu saja - bertahun-tahun yang lalu saya melakukan ini)
sumber
Filesystem adalah database. Ini memang basis data yang lebih sederhana, hierarkis dan bukan DBMS relasional, tetapi ini adalah basis data.
Alasan mengapa masuk ke sistem file sangat populer adalah karena log teks sangat cocok dengan filosofi Unix: "Teks adalah antarmuka universal."
Unix telah mengembangkan dengan banyak alat tujuan umum yang dapat bekerja dengan baik dengan log teks. Tidak masalah apakah log teks diproduksi oleh mysql, apache, aplikasi kustom Anda, perangkat lunak pihak ketiga yang lama tidak didukung, sysadmin dapat menggunakan alat Unix standar seperti grep, sed, awk, sort, uniq, cut, tail , dll, untuk menjelajah seluruh log.
Jika setiap aplikasi log ke database sendiri, satu ke MySQL, yang lain ke Postgres, yang lain ke Elasticsearch, yang lain ingin masuk ke ELK, yang lain hanya bisa masuk ke MongoDB, maka Anda harus belajar dua puluh alat berbeda untuk menjaring log masing-masing aplikasi. Teks adalah media universal yang dapat diakses semua orang.
Bahkan ketika Anda berhasil membuatnya sehingga semua log masuk ke database tunggal, katakanlah MySQL, Anda mungkin menemukan bahwa setiap aplikasi ingin login dengan skema tabel yang berbeda, jadi Anda masih harus menulis alat yang disesuaikan untuk meminta log untuk setiap log aplikasi. Dan jika Anda entah bagaimana menjejalkan setiap aplikasi untuk masuk ke satu skema tunggal, Anda mungkin akan menemukan bahwa skema umum tidak bisa benar-benar menceritakan kisah lengkap dari setiap aplikasi, jadi Anda masih harus mengurai teks log.
Masuk ke database sering kali tidak benar-benar membuat banyak hal lebih mudah dalam praktek.
Masuk ke basis data dapat berguna ketika Anda memiliki analisis spesifik yang ada dalam pikiran Anda, atau untuk persyaratan penyimpanan audit tertentu, di mana Anda dapat merancang skema basis data tertentu untuk mengumpulkan data hanya untuk tujuan spesifik tersebut. Tetapi untuk forensik dan debugging dan ketika Anda mengumpulkan log tanpa tujuan tertentu, log teks biasanya cukup baik sehingga biaya belajar atau membuat alat khusus seringkali tidak sepadan.
sumber
Mari kita lihat ini pada beberapa lapisan:
Secara singkat:
Kemudian kami memiliki pendekatan berbasis kasus penggunaan:
Apakah Anda ingin mencatat kesalahan spesifik node ke RDBMS yang diskalakan secara horizontal di mana Anda perlu mengambil pekerjaan tambahan untuk menemukan kesalahan dari node tertentu ketika Anda bisa membuka kap untuk satu simpul dan melihatnya di sana? Di sisi lain, aplikasi Anda mungkin harus masuk ke RDBMS untuk mengumpulkan kesalahan dan pemberitahuan tingkat aplikasi.
Apa yang terjadi ketika RDBMS perlu melakukan logging untuk dirinya sendiri karena database tidak dapat ditulis?
sumber
Kompleksitas. Menambahkan RDBMS akan meningkatkan kompleksitas seluruh sistem secara astronomis. Dan kemampuan untuk mengelola kompleksitas adalah hal utama yang membedakan programmer dari produsen kode sumber.
sumber
Kecepatan.
sumber