|
Как лучше организовать учёт изменённых "тем"
|
|||
---|---|---|---|
#18+
Добрый день Товарищи! Скажите пожалуйста, для такой задачи, как учёт обновлённых для данного пользователя объектов как лучше спроектировать БД? Что-то типа задачи в форумах, где для пользователя показывают темы в которых с момента его последнего их отслеживания появились изменения. У меня из вариантов, такой придумался: Для каждой "темы" есть понятие "последнее сообщение" и соответственно : Код: sql 1. 2. 3. 4. 5. 6.
Подскажите плиз, как правильно такая задача решается? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 11:40 |
|
Как лучше организовать учёт изменённых "тем"
|
|||
---|---|---|---|
#18+
kormot, SQL-запросом никак не решить? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 12:54 |
|
Как лучше организовать учёт изменённых "тем"
|
|||
---|---|---|---|
#18+
kormotДобрый день Товарищи! Скажите пожалуйста, для такой задачи, как учёт обновлённых для данного пользователя объектов как лучше спроектировать БД? Что-то типа задачи в форумах, где для пользователя показывают темы в которых с момента его последнего их отслеживания появились изменения. У меня из вариантов, такой придумался: Для каждой "темы" есть понятие "последнее сообщение" и соответственно : Код: sql 1. 2. 3. 4. 5. 6.
Подскажите плиз, как правильно такая задача решается? 1) По-моему вы занялись преждевременной оптимизацией. В любом случае нужно уметь выбирать из истории изменений объектов данные. А уж откладывать эту "личинку" или нет, это нужно решать, если скорость выборки не устроит. 2) История изменения объектов в контексте пользователя это что то неправильно. (Хотя мы конечно не знаем вашей истории). Объект, если изменился, то он у всех пользователей должен измениться. Если именно "форумные" задачи решаете - посмотрите как это делают разработчики форумов. Но не думаю что они заморачиваются с такими табличками как вы придумали, так как выборка несложная. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 15:18 |
|
Как лучше организовать учёт изменённых "тем"
|
|||
---|---|---|---|
#18+
Serguei , я может не совсем правильно выразился. Мне не надо изменения объектов в контексте пользователя. Мне надо для списка объектов - знать изменились ли они для данного пользователя, т.е. были ли в них изменения с момента последнего обращения к ним пользователем. Т.е. у объекта "Топик" - есть lastID, когторый обновляется после добавлении сообщения в топике. И в указанной мной таблице есть информация о том, что данный пользователь в данном топике последний раз видел сообщение с данным lastID. В таблицах форумов чтобы полазить, это надо устанавливать у себя... Что-то не охота ради вопроса который можно тут задать. У меня задача не форум, но просто принцип того что надо решить тот же самый. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 15:33 |
|
Как лучше организовать учёт изменённых "тем"
|
|||
---|---|---|---|
#18+
kormot Serguei Мне надо для списка объектов - знать изменились ли они для данного пользователя, т.е. были ли в них изменения с момента последнего обращения к ним пользователем. Т.е. у объекта "Топик" - есть lastID, когторый обновляется после добавлении сообщения в топике. И в указанной мной таблице есть информация о том, что данный пользователь в данном топике последний раз видел сообщение с данным lastID. Ну, если бы я решал такую задачу - сохранил бы время обращения пользователя к объекту и проверил бы историю изменений объекта после этого обращения. По-моему это самое простое решение под те требования, что вы озвучили. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 16:04 |
|
Как лучше организовать учёт изменённых "тем"
|
|||
---|---|---|---|
#18+
SergueiНу, если бы я решал такую задачу - сохранил бы время обращения пользователя к объекту и проверил бы историю изменений объекта после этого обращения. По-моему это самое простое решение под те требования, что вы озвучили. Ну т.е. это указанный мной способ, где вместо lastID - lastTime. Т.е. для пользователей в любом случае нужна таблица в которой время последнего доступа пользователей к объектам. И для самих объектов - либо поле с временем последнего обновления объекта, ну либо брать это время из "лога действий" с объектом. История действий с объектом у меня есть, но просто если выбирать между способами: 1. вычислять MAX(accTime) из таблицы с логом действий 2. При действиях с объектом - обновлять поле lastTime у объекта В пране производительности же второй вариант выгодней чем постоянно дёргать агрегатную функцию из таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 17:21 |
|
Как лучше организовать учёт изменённых "тем"
|
|||
---|---|---|---|
#18+
Если уже совсем просто и без привязки к реальной БД, то нужна таблица LastTablesChange с полями: TableName VARCHAR() и LastUpdate DATETIME. И дату с временем последнего посещения пользователя хранить в таблице пользователей и обновлять только когда юзер выходит из системы. Во время нового входа юзера обычный select из таблицы с темами по дате большей чем дата выхода у юзера всё сделает сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 15:39 |
|
Как лучше организовать учёт изменённых "тем"
|
|||
---|---|---|---|
#18+
kormot История действий с объектом у меня есть, но просто если выбирать между способами: 1. вычислять MAX(accTime) из таблицы с логом действий 2. При действиях с объектом - обновлять поле lastTime у объекта В пране производительности же второй вариант выгодней чем постоянно дёргать агрегатную функцию из таблицы? Не факт - при наличии индекса по полю функция max очень дешевая, а конкуренция за обновление одного и того же поля одной и той же строки при любых изменениях объекта (если объект сложен и состоит из множества записей, хотя бы как тема на форуме) вполне может создать "бутылочное горлышко". Вам правильно посоветовали - не надо заниматься преждевременной оптимизацией. Увидите что запрос определения обновленных объектов жрет недопустимо много ресурсов, тогда можно будет что-то думать на эту тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 15:59 |
|
|
start [/forum/topic.php?fid=32&fpage=6&tid=1539960]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 241ms |
total: | 348ms |
0 / 0 |