Review Skema Database Pesan Log
jadi saya telah ditugaskan untuk merancang database log dan saya akan sangat menghargai umpan balik tentang desain saya.
Saya memiliki aplikasi yang terdiri dari tiga bagian dasar:
- Bagian depan
- Sebuah backend
- Komponen tingkat rendah
Setiap bagian dapat membuat pesan log yang perlu disimpan dalam database. Bagian-bagian (ujung depan, ujung belakang, komponen tingkat rendah) yang membuat pesan log harus diidentifikasi secara unik. Pada saat yang sama ketika melihat pesan, harus dimungkinkan untuk melihat bagian mana yang membuat pesan tersebut.
Setiap pesan memiliki tipe khusus yang ditetapkan padanya dan tipenya bisa menjadi salah satu dari nilai tujuan berikut
- Kesalahan,
- Peringatan,
- Info,
- Debug
Pesan itu sendiri juga harus unik, harus memiliki teks yang mengatakan apa masalahnya dan mungkin juga deskripsi dengan informasi tambahan tentang masalah tersebut dan dalam keadaan apa hal itu bisa terjadi. Selain itu waktu pesan dibuat sangat penting. Karena komponen level rendah kita membutuhkan akurasi mikrodetik.
Contoh
Pesan : Pompa Gagal
Deskripsi : Pompa tidak memompa cukup oli. Periksa jumlah oli dan juga periksa suhu sistem.
Terakhir, ada beberapa "persyaratan" tambahan yang menurut saya dapat memengaruhi desain sistem: Komponen tingkat rendah menghasilkan banyak pesan dalam waktu singkat. Ini dapat menyebabkan database mencapai batas penyimpanannya dengan relatif cepat. Dalam hal ini pesan yang lebih lama harus dihapus terlebih dahulu. Namun ada aturan yang perlu dipertimbangkan sebelum menghapus pesan. Info kurang penting daripada peringatan dan peringatan kurang penting dari kesalahan. Aturan lain adalah, kecuali saya telah mencapai ambang tertentu, saya tidak diizinkan untuk menghapus pesan dari jenis tertentu, mis. Hanya jika memiliki lebih dari 500 kesalahan, saya diizinkan untuk mulai menghapus kesalahan lama.
Desain saya saat ini adalah sebagai berikut:
Message
Id (PK)
Name varchar
MessageTypeId(FK)
Description varchar
MessageType
Id (PK)
Name Varchar
Sender
Id (PK)
Name Varchar
MessagesLog
Id (PK)
MessageId (FK)
SenderId (FK)
Date BigInt
Namun dengan mempertimbangkan persyaratan tambahan ini dan berpikir bahwa saya perlu melakukan banyak pemeriksaan pada tingkat aplikasi jika kriteria tertentu terpenuhi sebelum saya menghapus catatan dari database, saya berpikir untuk membuat tabel terpisah untuk setiap jenis pesan:
Message
Id (PK)
Name varchar
Description
Sender
Id (PK)
Name Varchar
MessagesLogError
Id (PK)
MessageId (FK)
SenderId (FK)
Date BigInt
MessagesLogWarning
Id (PK)
MessageId (FK)
SenderId (FK)
Date BigInt
MessagesLogInfo
Id (PK)
MessageId (FK)
SenderId (FK)
Date BigInt
MessagesLogDebug
Id (PK)
MessageId (FK)
SenderId (FK)
Date BigInt
Bagaimana menurut anda?
Jawaban
Pertama, saya senang Anda telah mengisolasi pesan Anda yang sebenarnya ke dalam tabelnya sendiri, itu akan menjadi saran pertama saya tetapi Anda sudah sampai di sana.
Kalau tidak, saya pikir desain pertama Anda bagus. Dengan menjaga log pesan itu sendiri (data meta) diisolasi dari badan pesan, Anda akan (dengan indeks yang tepat) dapat menemukan pesan dengan sangat cepat.
Saran saya satu-satunya untuk Anda adalah melakukan cek hapus sebagai bagian dari transaksi yang menulis pesan (dan membuatnya menjadi angka kecil). Ini akan membuat tindakan pembersihan menjadi bagian dari logika penulisan pesan dan membuat semuanya berjalan dengan cepat.
Sesuatu seperti:
Hapus TOP (100) pesan lama yang memenuhi kriteria
Sisipkan pesan baru