|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
|
Alix36 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
Задумался о том, как правильно логировать действия пользователей.
Данные бывают трех типов 1) Уникальные для пользователя(каждый пользователь может сгенерить такое событие только 1 раз. (Регистрация, первый платеж) 2) Уникальные для пользователя и объекта(Каждый пользователь может сгенерить такое событие только 1 раз по отношению к одному и тому-же объекту. (Например - записываем дату первого посещения каждой из страниц проекта) 3) Не уникальное. (Регулярные события, типа повторных посещений страниц). Конечно можно не заморачиваться с этими ограничениями в момент записи логов, записывая все события как не уникальные, однако в таком случае мы не сможем сделать реалтайм отчеты по данным, поскольку обработка может занять довольно большое время. Если же будем добиваться уникальности - делаем таблицу в которую пишем Time, ObjectID, UserID, ActionID, UniKey. Делаем уникальный индекс по UniKey и пишем туда хэш от 2-3-4 параметров, в зависимости от "режима уникальности" Собственно вопрос 1: Допускается ли запись логов в базу? Вопрос 2: Можно ли писать в таблицу с индексом? не будет ли это слишком сильно тормозить? Вопрос 3: Какие альтернативные структуры возможны для поставленной задачи? -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
mark2009 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 106 Регистрация: 12.10.2009 Репутация: нет Всего: 1 |
Я бы сделал так:
таким образом у вас в основной таблице будут один цифры и слишком большой нагрузки создаваться не будет. А по вопросам: 1. Да, допускается. 2. А какая нафиг разница, есть у таблицы индекс или нет?? Индексы предназначены для ускорения операций поиска.... 3. Альтернативную? NoSQL ))))))) Это сообщение отредактировал(а) mark2009 - 5.10.2012, 10:01 |
|||
|
||||
Alix36 |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
мм... а можно комменты к коду? Что в первой таблице? тупо справочник или уник-кей? Во 2ой таблице что предполагалось сделать с `log_action_id`? Разве какая-то бд умеет 2 автоинкремента в одной таблице?
2) Огромная. при больших индексах и большом кол-ве записей начинает тормозить добавление. А у нас наибольшую производительность нужно показать как раз на операциях добавления записей. 3) Ну с пеленок как-бы учили файлы для логов использовать. только как тут контролировать уникальность.... NoSQL знаком только с mongoDB и она не сильна на запись по скорости... пока у меня так выглядит основная таблица.
Таблица с объектами
работаем с этим так
-------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
||||||||
|
|||||||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Для нагруженного проекта могут быть такие соображения:
-- логирование действий - не очень нужное в повседневном быту действие, оно нужно только администратору в каких-то аварийных случаях. -- само логирование - напряженный и расходный процесс, так что ускорить его максимально - жизненно необходимо. Так что лог создается в таблице без индексов. Индексируется, возможно, только поле даты, хотя это нужно отдельно проверять. в самой системе есть такие задачи -- запись строчки лога -- автомаическая чистка лога для записей старше (к примеру) недели. в админке (части, расположенной на сервере) системы есть задачи -- удаление строчек, до какой-то даты -- сброс (download) дампа таблицы. После успешной загрузки дампа на компьютер администратора лог, скорее всего чистится. На администраторской машине это дамп вставляется в таблицу с индексами и не нагружая сервер анализируется. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
Alix36 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
тут скорее менеджерские логи, посему и появляются сложные условия...
Ну тогда проще на проде писать файлы с логами, рваные по минутам. На машине-хранилище раз в минуту -стягиваем свежие логи с прода, их парсим, обрабатываем и заливаем в полноценную бд с индексами. -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
mark2009 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 106 Регистрация: 12.10.2009 Репутация: нет Всего: 1 |
Alix36,
В первой таблице справочник того, что вообще можно делать. Вторая таблица логов. Извините, описался (ударение на 3 слог).... конечно нет 2 автоинкрементных поля. Почему у вас в таблице tThreshold нет primary key - непонятно вообще. Из каких соображений? Экономить сотые доли секунды? В третьем вопросе ТС я просто шутил ))) естественно, какие в наше время альтернативные методы лога кроме БД? Файл??! Ну так.... 1000000 пользователей и файл охрененного размера.... разве непонятно? А мой пост скорее всего следствие желания всё и вся нормализовать, поскольку именно этому упорно учат в универе ))))))))))) |
|||
|
||||
Alix36 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
меня тоже упорно учат...
файл рвем раз в минуту и получаем файл маленького размера, хоть каждый запрос в свой файл пиши.
Есть по полю UniKey -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
ksnk |
|
||||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
А вот как состряпается там, неожиданно, 100к файлов, вот и тормоза придут ;) Список файлов для отдачи так или иначе придется строить?
В принципе, менеджер - тот же администратор, то есть он не обычный посетитель и согласится немного подождать, если нужно что-то там проанализировать. Можно на момент анализа логов копировать данные в новую таблицу, такую-же, но с ключами и блекджеком. И тормозить лог обычных пользователей не будет сверх необходимого - писать то в старую таблицу не запрещается. и процесс строительства индексов на новой таблице менеджер согласится пережить. И менеджеров таких, вероятно, не очень много. Тут, конечно, надо думать с какой частотой "обновлять" данные в таблице анализа. Насколько менеджеру нужна realtime информация о том, что происходит на сайте? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
Sanchezzz |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Вам нужно искать решение которое не будет тормозить всю систему
Все логи вставлять как INSERT DELAYED если будите использовать Mysql, Sqlite ( придется отключить системное легирование еще увеличит скороть работы вставки упдейта ) ksnk, написали выше отличный план реализации системы. -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |