E
E
entermix2016-10-06 20:16:11
MySQL
entermix, 2016-10-06 20:16:11

How to properly organize the storage of statistics?

There is a table (InnoDB, ~ 80 fields of type INT), statistics on users are added there, for example:

date, user_id, sessions, sessions_active, sessions_failed, payments, .....
(это лишь пример)
Заполняется по срабатыванию триггеров MySQL. Получается так, что если пользователь хоть как то был активен (например авторизовался 1 раз), создается строка в БД.
На сколько я понимаю, такая архитектура не очень правильная с точки зрения оптимального хранения информации, какие могут быть подводные камни?
Я вижу:
  1. Размер таблицы (В данный момент ~1000 записей и 368 КиБ)
  2. Блокировка строки (Будет медленно работать в случае большой активности на стороне пользователя)
  3. ?...

Стоит ли разбивать эту таблицу на несколько мелких по 5-15 полей?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
R
Rsa97, 2016-10-06
@Rsa97

Основные тормоза при вставке - перестроение индексов. Так что если таблица в основном работает на запись, то, возможно, есть смысл минимизировать количество индексов, потеряв при этом производительность при выборке/сортировке.

E
Eduard, 2016-10-07
@edb

Вам надо пересмотреть вашу схему данных. 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 уже придумали :)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question