@entermix

Как правильно организовать хранение статистики?

Есть таблица (InnoDB, ~ 80 полей типа INT), туда складывается статистика по пользователям, например:

date, user_id, sessions, sessions_active, sessions_failed, payments, .....
(это лишь пример)

Заполняется по срабатыванию триггеров MySQL. Получается так, что если пользователь хоть как то был активен (например авторизовался 1 раз), создается строка в БД.

На сколько я понимаю, такая архитектура не очень правильная с точки зрения оптимального хранения информации, какие могут быть подводные камни?

Я вижу:
  1. Размер таблицы (В данный момент ~1000 записей и 368 КиБ)
  2. Блокировка строки (Будет медленно работать в случае большой активности на стороне пользователя)
  3. ?...


Стоит ли разбивать эту таблицу на несколько мелких по 5-15 полей?
  • Вопрос задан
  • 325 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Основные тормоза при вставке - перестроение индексов. Так что если таблица в основном работает на запись, то, возможно, есть смысл минимизировать количество индексов, потеряв при этом производительность при выборке/сортировке.
Ответ написан
@edb
SQL
Вам надо пересмотреть вашу схему данных. 80 полей типа INT это перебор. Лучше сделайте так:
CREATE TABLE `user_action` ( 
`date` TIMESTAMP NOT NULL
, `user_id` INT NOT NULL 
, `event` ENUM('login','logout','payment','like') NOT NULL
, `value` VARCHAR NOT NULL
, PRIMARY KEY (`date`, `user_id`)
)


в event перечислите все свои 80 INT. на каждое действие делаете insert. в Value храните связанные с событием данные, есть нужен просто факт события, то сохраняйте там единицу, если данных от события много, то храните json.
В зависимости от скорости наполнения можно создавать такие таблицы на каждый год, месяц, неделю, день.
А вообще, google analytics уже придумали :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы