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 BY
Aby 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.
Odpowiedzi:
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.
źródło