Я разрабатываю веб-приложение, которое использует MS SQL для различных данных: включая пользователей, учетные записи пользователей, пользовательские лицензии, цены на лицензии, счета.
Мне нужно регистрировать использование системой пользователей в режиме реального времени и использовать это для ежемесячного выставления счетов: например, регистрировать каждый раз, когда пользователь получает определенную страницу / URL и выставлять счета пользователям в конце месяца на основе количества страниц, которые они получили.
Должен ли я записать эти события журнала в таблицу в моей базе данных MS SQL?
Должен ли я записывать эти события журнала в файл журнала не только для добавления в приложение?
Должен ли я записывать эти события журнала в отдельный файл журнала для каждого пользователя?
Это не особо объемный веб-сайт: например, максимум 10 000 пользователей, каждый из которых выполняет в среднем 5 регистрируемых событий / день => 50 000 событий / день = 30 событий / минуту = 18 000 000 событий / год.
Я спрашиваю, потому что любой вариант кажется жизнеспособным, и я не вижу, есть ли у кого-то явное преимущество.
Данные, связанные с оплачиваемым событием, просты, например:
- ID пользователя (отношение внешнего ключа к таблице Users в SQL)
- Дата и время
- URL оплачиваемой страницы
Мой собственный ответ на этот вопрос следующий:
Некоторые преимущества записи журнала в таблицу базы данных:
- Реляционная целостность: например, зарегистрированные события связаны с действительными идентификаторами пользователя (путем определения идентификатора пользователя в качестве внешнего ключа между таблицами)
- Легко читается для выставления счетов: например,
SELECT COUNT GROUP BY
для подсчета количества событий журнала на пользователя
Некоторые преимущества записи в файл журнала:
- Повышенная производительность: SQL используется реже, например, только для событий входа пользователя в систему, и в основном используется только для чтения
- Более простое управление: проще архивировать старые данные, например, в конце года, перемещая старые файлы журнала, а не удаляя / архивируя из базы данных
Пожалуйста, дайте мне знать, если мой ответ неверен; или преувеличивает важность чего-либо; или забыл какое-то важное соображение.
И / или, пожалуйста, дайте мне знать, каков ваш ответ, если он отличается от моего.
Ответы:
Поскольку вы используете эту информацию для выставления счетов, я не понимаю, почему вы не хотите, чтобы она была в базе данных, где ее можно было бы легко запрашивать, агрегировать, сообщать и присоединять к другим данным.
Я также думаю, что гораздо проще поддерживать одну таблицу базы данных, содержащую информацию журнала, чем набор отдельных файлов журнала. То же самое касается вашего беспокойства по поводу нагрузки на сервер - есть гораздо лучшие способы справиться с этим, чем прибегать к хранению данных в простых файлах.
Кстати, ваш третий вариант - сделать и то, и другое. Используйте базу данных для большинства нужд, но используйте файл журнала для целей аудита.
источник