Masuk ke file atau ke tabel database?

12

Saya sedang mengembangkan aplikasi web yang menggunakan MS SQL untuk berbagai data: termasuk pengguna, akun pengguna, lisensi pengguna, harga lisensi, faktur.

Saya perlu mencatat penggunaan sistem secara real-time dari pengguna, dan menggunakannya untuk penagihan bulanan: mis. Login setiap kali pengguna mendapatkan halaman / URL dan tagihan pengguna pada akhir bulan berdasarkan jumlah halaman yang mereka ambil.

  • Haruskah saya menulis peristiwa log ini ke dalam tabel di database MS SQL saya?

  • Haruskah saya menulis peristiwa log ini ke file log non-SQL append-only?

  • Haruskah saya menulis peristiwa log ini ke file log yang berbeda untuk setiap pengguna?

Ini bukan situs web bervolume tinggi: misalnya, maksimal 10.000 pengguna masing-masing melakukan rata-rata 5 peristiwa yang dapat loggable / hari => 50.000 peristiwa / hari = 30 peristiwa / menit = 18.000.000 peristiwa / tahun.

Saya bertanya karena salah satu opsi tersebut tampaknya dapat berjalan dan saya tidak melihat apakah seseorang memiliki keuntungan yang jelas.

Data yang terkait dengan acara yang dapat ditagih sederhana, misalnya:

  • ID Pengguna (hubungan kunci asing dengan tabel Pengguna dalam SQL)
  • Tanggal dan waktu
  • URL halaman yang dapat ditagih

Jawaban saya sendiri untuk pertanyaan ini adalah sebagai berikut:

  • Beberapa manfaat dari menulis log ke tabel database:

    • Integritas relasional: misalnya peristiwa yang dicatat terkait dengan ID pengguna yang valid (dengan mendefinisikan ID pengguna sebagai kunci asing di antara tabel)
    • Mudah dibaca untuk penagihan: mis. SELECT COUNT GROUP BYUntuk mendapatkan hitungan jumlah acara log per pengguna
  • Beberapa manfaat menulis ke file log:

    • Performa yang lebih mudah: SQL jarang digunakan misalnya hanya untuk acara masuk pengguna, dan sebagian besar hanya digunakan untuk membaca
    • Manajemen yang lebih mudah: lebih mudah untuk mengarsipkan data lama misalnya pada akhir tahun, dengan memindahkan file log lama daripada dengan menghapus / pengarsipan dari database

Tolong beri tahu saya jika jawaban saya salah; atau melebih-lebihkan pentingnya sesuatu; atau telah melupakan beberapa pertimbangan penting.

Dan / atau tolong beri tahu saya apa jawaban Anda, jika berbeda dengan saya.

ChrisW
sumber
3
Anda perlu memisahkan informasi yang digunakan untuk membuat keputusan bisnis dari informasi logging umum. Simpan apa pun yang nantinya akan digunakan oleh aplikasi Anda dalam database, hal-hal lain dalam file log.
tom
1
Jika Anda menggunakan paket terkenal seperti log4net - dan itu mungkin ide yang baik daripada menggulirkan sendiri - seharusnya hanya masalah membalik konfigurasi untuk melakukan keduanya. @ Tom - pemisahan itu bagus, tetapi mengapa tidak hanya memiliki dua database, satu untuk data langsung dan satu untuk pengarsipan log dll?
Julia Hayward
2
OP mengatakan ini untuk penagihan bulanan - jadi saya berharap menerapkan logika penagihan ke db akan jauh lebih mudah daripada file flat?
Julia Hayward
1
Anda menggunakan istilah "SQL" ketika Anda bermaksud "database". Saya membuat beberapa koreksi. SQL adalah bahasa yang Anda gunakan untuk membaca dan menulis ke basis data. MS SQL Server adalah nama RDBMS. "SQL" saja tidak berarti "database MS SQL Server".
Tulains Córdova
1
@gnat Saya rasa ini bukan duplikat: yang lain adalah tentang kesalahan pencatatan sedangkan ini tentang pencatatan penggunaan untuk penagihan (dan dalam hal ini jawaban yang dipilih dan diterima adalah menggunakan RDBMS).
ChrisW

Jawaban:

13

Karena Anda menggunakan informasi ini untuk tujuan penagihan, saya tidak melihat mengapa Anda tidak menginginkannya dalam database di mana ia dapat dengan mudah ditanyakan, dikumpulkan, dilaporkan, dan digabungkan ke data lain.

Saya juga berpikir itu jauh lebih mudah untuk mempertahankan tabel database tunggal yang berisi informasi log daripada banyak file log terpisah. Sama dengan kekhawatiran Anda tentang beban di server - ada banyak cara yang lebih baik untuk mengatasinya daripada menggunakan menyimpan data dalam file datar.

Omong-omong, pilihan ketiga Anda adalah melakukan keduanya. Gunakan database untuk sebagian besar kebutuhan, tetapi miliki file log untuk keperluan audit.

GrandmasterB
sumber
3
Bonus lain untuk menggunakan database adalah menggunakan pemicu untuk pencatatan tertentu. Tidak diperlukan kode tambahan. Jika data dimasukkan ke tabel A, maka masukkan pesan log X.
Greg Burghardt