Насколько велико ваше большое веб-приложение?
Регистрация событий в виде блобов XML должна работать, а некоторые базы данных (например, SQL Server) позволяют напрямую запрашивать этот XML.Однако производительность этих запросов ужасна.
Перед тем, как вести журнал событий в базе данных, вы должны выяснить, сколько записей в секунду вы собираетесь создать.Если это число велико, это приведет к серьезной нагрузке на вашу базу данных и может повлиять на общую производительность вашего приложения.Кроме того, после того, как вы накопите большое количество записей, запрос данных будет длиться вечно (и убивает производительность БД в процессе).Агрегирование данных еще хуже - реляционные базы данных не очень эффективны для агрегации.
Предложение Криса, приведенное выше, будет хорошо работать для небольших баз данных, но не будет масштабироваться, так как ваши запросы должны будут использовать объединения.Может быть, лучше отменить нормализацию ваших данных.
Даже если ваше приложение не получает достаточно трафика, чтобы вы могли беспокоиться об этом прямо сейчас, имейте в виду, что регистрация событий в БД не будет хорошо масштабироватьсяпо причинам, изложенным выше.
Конкретные предложения:
Если у вас не так много трафика и вы решили войти в БД, сделайте это в отдельной схеме, чтобы вам было легче перемещатьсячтобы выгрузить его из производственной базы данных.
Если вы решили зарегистрировать событие как XML, подумайте, есть ли смысл использовать реляционную базу данных для этой цели - если вы можетеЕсли вы будете делать эффективные запросы, тогда простые файлы журналов будут намного проще.Конечно, позже вам придется выяснить, как обрабатывать эти данные журнала, но для нечастых / простых запросов написание некоторых скриптов с использованием grep, awk и т. Д. Займет удивительно долгий путь.
Метод, который обычно используется в настоящее время (очень) крупномасштабными приложениями, - это запись в файлы, а затем выполнение анализа (агрегации) с использованием map-Reduction, например, на Hadoop.