Zaloguj się do pliku lub tabeli bazy danych?

12

Tworzę aplikację internetową, która używa MS SQL do różnych danych: w tym użytkowników, kont użytkowników, licencji użytkowników, cen licencji, faktur.

Muszę rejestrować wykorzystanie systemu przez użytkowników w czasie rzeczywistym i używać go do miesięcznych płatności: np. Logować, gdy użytkownik otrzyma określoną stronę / adres URL i wystawiać rachunki użytkownikom na koniec miesiąca na podstawie liczby stron, które pobrali.

  • Czy powinienem zapisać te zdarzenia dziennika do tabeli w mojej bazie danych MS SQL?

  • Czy należy zapisać te zdarzenia dziennika w pliku dziennika innym niż SQL, który zawiera tylko append?

  • Czy powinienem zapisać te zdarzenia dziennika w innym pliku dziennika dla każdego użytkownika?

Nie jest to szczególnie duża witryna internetowa: na przykład maksymalnie 10 000 użytkowników, z których każdy wykonuje średnio 5 rejestrowalnych zdarzeń / dzień => 50 000 zdarzeń / dzień = 30 zdarzeń / minutę = 18 000 000 zdarzeń rocznie.

Pytam, ponieważ każda z opcji wydaje się wykonalna i nie widzę, czy ktoś ma wyraźną przewagę.

Dane powiązane z fakturowanym zdarzeniem są proste, np .:

  • Identyfikator użytkownika (relacja klucza obcego do tabeli Użytkownicy w SQL)
  • Data i godzina
  • URL strony rozliczanej

Moja odpowiedź na to pytanie jest następująca:

  • Niektóre zalety zapisywania dziennika w tabeli bazy danych:

    • Integralność relacyjna: np. Zarejestrowane zdarzenia są powiązane z prawidłowymi identyfikatorami użytkowników (poprzez zdefiniowanie identyfikatora użytkownika jako klucza obcego między tabelami)
    • Łatwy do odczytania do fakturowania: np. SELECT COUNT GROUP BYAby uzyskać liczbę zdarzeń dziennika na użytkownika
  • Niektóre zalety pisania do pliku dziennika:

    • Łatwiejsza wydajność: SQL jest używany rzadziej, np. Tylko w przypadku zdarzeń logowania użytkownika, i głównie do odczytu
    • Łatwiejsze zarządzanie: łatwiejsze archiwizowanie starych danych, np. Na koniec roku, poprzez przenoszenie starych plików dziennika zamiast usuwania / archiwizowania z bazy danych

Daj mi znać, jeśli moja odpowiedź jest błędna; lub wyolbrzymia znaczenie czegoś; lub zapomniał o ważnych kwestiach.

I / lub daj mi znać, jaka jest twoja odpowiedź, jeśli jest inna niż moja.

ChrisW
źródło
3
Należy oddzielić informacje wykorzystywane do podejmowania decyzji biznesowych od ogólnych informacji rejestracyjnych. Przechowuj wszystko, co będzie później używane przez aplikację w bazie danych, a inne rzeczy w plikach dziennika.
tom
1
Jeśli używasz znanego pakietu, takiego jak log4net - i prawdopodobnie byłby to raczej dobry pomysł niż tworzenie własnych - powinno to być po prostu zmiana konfiguracji. @tom - separacja jest dobra, ale dlaczego nie po prostu mieć dwie bazy danych, jedną dla danych na żywo i jedną dla archiwizacji dzienników itp.?
Julia Hayward,
2
PO twierdzi, że jest to rozliczanie miesięczne - więc spodziewałbym się, że zastosowanie logiki rozliczeniowej do bazy danych byłoby znacznie łatwiejsze niż pliki płaskie?
Julia Hayward,
1
Użyłeś terminu „SQL”, gdy miałeś na myśli „bazę danych”. Wprowadziłem kilka poprawek. SQL to język używany do odczytu i zapisu w bazach danych. MS SQL Server to nazwa RDBMS. Sam „SQL” nie oznacza „bazy danych MS SQL Server”.
Tulains Córdova,
1
@gnat Nie sądzę, że jest to duplikat: drugi dotyczył błędów rejestrowania, podczas gdy chodzi o rejestrowanie wykorzystania do fakturowania (w tym przypadku pozytywną i zaakceptowaną odpowiedzią było użycie RDBMS).
ChrisW

Odpowiedzi:

13

Ponieważ używasz tych informacji do celów rozliczeniowych, nie rozumiem, dlaczego nie chcesz, aby były w bazie danych, gdzie można je łatwo wyszukiwać, agregować, raportować i łączyć z innymi danymi.

Myślę też, że o wiele łatwiej jest utrzymać pojedynczą tabelę bazy danych zawierającą informacje dziennika niż kilka osobnych plików dziennika. To samo dotyczy obawy o obciążenie serwera - istnieją znacznie lepsze sposoby radzenia sobie z tym niż uciekanie się do przechowywania danych w płaskich plikach.

Nawiasem mówiąc, trzecią opcją jest zrobienie obu. Korzystaj z bazy danych do większości potrzeb, ale miej plik dziennika do celów kontrolnych.

Grandmaster B.
źródło
3
Kolejną zaletą korzystania z bazy danych jest użycie wyzwalaczy do określonego rejestrowania. Nie byłby potrzebny żaden dodatkowy kod. Jeśli dane zostaną wstawione do tabeli A, wstaw komunikat dziennika X.
Greg Burghardt