Увійдіть до файлу чи до таблиці баз даних?


12

Я розробляю веб-додаток, який використовує MS SQL для різних даних: включаючи користувачів, облікові записи користувачів, ліцензії користувачів, ціни на ліцензії, рахунки-фактури.

Мені потрібно реєструвати користування системою в режимі реального часу та використовувати це для щомісячного виставлення рахунків: наприклад, журнал кожного разу, коли користувач отримує певну сторінку / URL-адресу та виставляє рахунки користувачам наприкінці місяця, виходячи з кількості отриманих сторінок.

  • Чи слід записувати ці події журналу в таблицю в моїй базі даних MS SQL?

  • Чи слід записувати ці події журналу в файл журналу, який не належить до SQL?

  • Чи слід записувати ці події журналу в інший файл журналу для кожного користувача?

Це не дуже масштабний веб-сайт: наприклад, максимум 10 000 користувачів, що проводять в середньому 5 подій, що реєструються / день => 50 000 подій / день = 30 подій / хвилина = 18 000 000 подій на рік.

Я прошу, бо будь-який варіант здається життєздатним, і я не бачу, чи є в них явна перевага.

Дані, пов’язані з подій, що підлягає оплаті, прості, наприклад:

  • Ідентифікатор користувача (зв’язок із зовнішнім ключем до таблиці користувачів у SQL)
  • Дата і час
  • URL-адреса сторінки, що підлягає оплаті

Моя власна відповідь на це питання така:

  • Деякі переваги запису журналу в таблицю бази даних:

    • Реляційна цілісність: наприклад, зареєстровані події асоціюються з дійсними ідентифікаторами користувачів (шляхом визначення ідентифікатора користувача як зовнішнього ключа між таблицями)
    • Легко читати для виставлення рахунків: наприклад, SELECT COUNT GROUP BYдля підрахунку кількості подій журналу на користувача
  • Деякі переваги написання файлу журналу:

    • Легша продуктивність: SQL використовується рідше, наприклад, лише для подій входу користувачів, і в основному використовується лише для читання
    • Легше керувати: простіше архівувати старі дані, наприклад, наприкінці року, переміщуючи старі файли журналів, а не видаляючи / архівуючи з бази даних

Будь ласка, дайте мені знати, якщо моя відповідь неправильна; або перебільшує важливість чогось; або забув якесь важливе враження.

І, або, будь ласка, дайте мені знати, яка ваша відповідь, якщо вона відрізняється від моєї.


3
Потрібно відокремити інформацію, яка використовується для прийняття бізнес-рішень, від загальної інформації про реєстрацію. Зберігайте все, що згодом буде застосовано вашою програмою, у базі даних, інші речі у файлах журналу.
Том

1
Якщо ви використовуєте відомий пакет на зразок log4net - і це, мабуть, було б хорошою ідеєю, а не прокатуванням власного - це потрібно зробити лише шляхом перегортання конфігурації. @tom - розділення приємно, але чому б просто не мати двох баз даних, одну для живих даних та одну для архівування журналів тощо?
Джулія Хейвард

2
ОП каже, що для щомісячного виставлення рахунків - тож я б очікував, що застосування логіки платежів до db буде набагато простіше, ніж плоскі файли?
Джулія Хейвард

1
Ви використовували термін "SQL", коли ви мали на увазі "база даних". Я вніс деякі виправлення. SQL - це мова, якою ви користуєтесь для читання та запису до баз даних. MS SQL Server - це ім'я RDBMS. Сам "SQL" не означає "база даних MS SQL Server".
Tulains Córdova

1
@gnat Я не думаю, що це дублікат: інше стосувалося помилок реєстрації, тоді як мова йде про використання журналу для виставлення рахунків (і в цьому випадку відповідь, яка була схвалена і прийнята, полягала у використанні RDBMS).
ChrisW

Відповіді:


13

Оскільки ви використовуєте цю інформацію для цілей виставлення рахунків, я не бачу, чому ви не хотіли б її в базі даних, де її можна легко запитувати, агрегувати, повідомляти про неї та приєднувати до інших даних.

Я також думаю, що набагато простіше підтримувати єдину таблицю бази даних, що містить інформацію про журнал, ніж купу окремих файлів журналу. Так само, як і з турботою щодо навантаження на сервер - є набагато кращі способи впоратися з цим, ніж вдатися до збереження даних у плоских файлах.

Ваш третій варіант, до речі, - робити і те, і інше. Використовуйте базу даних для більшості потреб, але майте файл журналу для аудиторських цілей.


3
Ще одним бонусом до використання бази даних є використання тригерів для певного ведення журналу. Додатковий код не потрібен. Якщо дані вставляються в таблицю А, то вставте повідомлення журналу X.
Грег Бургхардт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.