Dosyaya mı yoksa veritabanı tablosuna mı oturum açıyorsunuz?


12

Kullanıcılar, kullanıcı hesapları, kullanıcı lisansları, lisans fiyatları, faturalar dahil çeşitli veriler için MS SQL kullanan bir web uygulaması geliştiriyorum.

Kullanıcıların sistemin gerçek zamanlı kullanımını günlüğe kaydetmem ve aylık faturalandırma için kullanmam gerekiyor: örn. Bir kullanıcı belirli bir sayfayı / URL'yi aldığında günlüğe kaydetme ve getirilen sayfa sayısına göre ay sonunda kullanıcıları faturalandırmam.

  • Bu günlük olaylarını MS SQL veritabanımdaki bir tabloya yazmalı mıyım?

  • Bu günlük olaylarını SQL olmayan bir ek günlük dosyasına yazmalı mıyım?

  • Bu günlük olaylarını her kullanıcı için farklı bir günlük dosyasına mı yazmalıyım?

Bu özellikle yüksek hacimli bir web sitesi değildir: örneğin, her biri ortalama 5 günlük / günlük olay>> 50.000 olay / gün = 30 olay / dakika = 18.000.000 olay / yıl yapan maksimum 10.000 kullanıcı.

Soruyorum çünkü her iki seçenek de uygulanabilir görünüyor ve birinin açık bir avantajı olup olmadığını görmüyorum.

Faturalandırılabilir bir etkinlikle ilişkili veriler basittir, örneğin:

  • Kullanıcı Kimliği (SQL'deki Kullanıcılar tablosuyla yabancı anahtar ilişkisi)
  • Tarih ve saat
  • Faturalandırılabilir sayfanın URL'si

Bu soruya kendi cevabım şöyle:

  • Günlüğü bir veritabanı tablosuna yazmanın bazı faydaları:

    • İlişkisel bütünlük: örneğin, günlüğe kaydedilen olaylar geçerli kullanıcı kimlikleriyle ilişkilendirilir (kullanıcı kimliğini tablolar arasında yabancı anahtar olarak tanımlayarak)
    • Faturalandırma için okunması kolay: ör SELECT COUNT GROUP BY. Kullanıcı başına günlük etkinliği sayısını saymak için
  • Günlük dosyasına yazmanın bazı faydaları:

    • Daha kolay performans: SQL, yalnızca kullanıcı oturum açma olayları için daha az kullanılır ve çoğunlukla yalnızca okuma için kullanılır
    • Daha kolay yönetim: Veriyi silmek / arşivlemek yerine eski günlük dosyalarını taşıyarak, örneğin yıl sonunda eski verileri arşivlemek daha kolay

Cevabımın yanlış olup olmadığını lütfen bana bildirin; veya bir şeyin önemini abartıyor; ya da bazı önemli hususları unutmuş.

Ve / veya benimkinden farklıysa lütfen cevabının ne olduğunu bana bildir.


3
Ticari kararlar vermek için kullanılan bilgileri genel günlük bilgilerinden ayırmanız gerekir. Daha sonra uygulamanız tarafından kullanılacak her şeyi veritabanında, diğer şeyleri günlük dosyalarında saklayın.
tom

1
Log4net gibi iyi bilinen bir paket kullanıyorsanız ve muhtemelen kendi başınıza yuvarlamak yerine iyi bir fikir olabilir - bu da her ikisini de yapmak için yapılandırma saygısızlığı olmalıdır. @tom - ayırma güzel, ama neden sadece biri canlı veri diğeri günlükleri arşivlemek için olmak üzere iki veri tabanına sahip değilsiniz?
Julia Hayward

2
OP aylık faturalandırma için diyor - bu yüzden bir db için fatura mantığı uygulamak düz dosyaları çok daha kolay olacağını umuyordum?
Julia Hayward

1
"Veritabanı" demek istediğinizde "SQL" terimini kullandınız. Bazı düzeltmeler yaptım. SQL, veritabanlarını okumak ve yazmak için kullandığınız bir dildir. MS SQL Server bir RDBMS adıdır. "SQL" tek başına "MS SQL Server veritabanı" anlamına gelmez.
Tulains Córdova

1
@gnat Bunun bir kopya olduğunu düşünmüyorum: diğeri hataları günlüğe kaydetme hakkındaydı, oysa bu faturalandırma için günlük kullanımını (ve bu durumda yükseltilmiş ve kabul edilen cevap bir RDBMS kullanmaktı).
ChrisW

Yanıtlar:


13

Bu bilgileri faturalandırma amacıyla kullandığınız için, veritabanında neden kolayca sorgulanabileceği, toplanabileceği, raporlanabileceği ve diğer verilerle birleştirilebileceğini neden görmüyorum.

Ayrıca, günlük bilgilerini içeren tek bir veritabanı tablosunu korumanın ayrı günlük dosyalarından çok daha kolay olduğunu düşünüyorum. Sunucudaki yük ile ilgili endişenizle aynı - veriyi düz dosyalarda tutmaktan çok daha iyi yollar var.

Bu arada üçüncü seçeneğiniz her ikisini de yapmaktır. Veritabanını çoğu ihtiyaç için kullanın, ancak denetim amacıyla günlük dosyasına sahip olun.


3
Veritabanı kullanmanın bir diğer avantajı da belirli günlük kaydı için tetikleyiciler kullanmaktır. Ek kod gerekmez. Veriler A tablosuna
Greg Burghardt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.