powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше организовать учёт изменённых "тем"
9 сообщений из 9, страница 1 из 1
Как лучше организовать учёт изменённых "тем"
    #39774342
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день Товарищи!

Скажите пожалуйста, для такой задачи, как учёт обновлённых для данного пользователя объектов как лучше спроектировать БД?

Что-то типа задачи в форумах, где для пользователя показывают темы в которых с момента его последнего их отслеживания появились изменения.
У меня из вариантов, такой придумался:

Для каждой "темы" есть понятие "последнее сообщение" и соответственно :
Код: sql
1.
2.
3.
4.
5.
6.
TABLE userThemeLast (
    userID   BIGINT,
    themeID BIGINT,
    lastID BIGINT,
    UNIQUE KEY userTheme (userID, themeID)
)



Подскажите плиз, как правильно такая задача решается?
...
Рейтинг: 0 / 0
Как лучше организовать учёт изменённых "тем"
    #39774406
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot, SQL-запросом никак не решить?
...
Рейтинг: 0 / 0
Как лучше организовать учёт изменённых "тем"
    #39774572
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormotДобрый день Товарищи!

Скажите пожалуйста, для такой задачи, как учёт обновлённых для данного пользователя объектов как лучше спроектировать БД?

Что-то типа задачи в форумах, где для пользователя показывают темы в которых с момента его последнего их отслеживания появились изменения.
У меня из вариантов, такой придумался:

Для каждой "темы" есть понятие "последнее сообщение" и соответственно :
Код: sql
1.
2.
3.
4.
5.
6.
TABLE userThemeLast (
    userID   BIGINT,
    themeID BIGINT,
    lastID BIGINT,
    UNIQUE KEY userTheme (userID, themeID)
)



Подскажите плиз, как правильно такая задача решается?

1) По-моему вы занялись преждевременной оптимизацией. В любом случае нужно уметь выбирать из истории изменений объектов данные. А уж откладывать эту "личинку" или нет, это нужно решать, если скорость выборки не устроит.
2) История изменения объектов в контексте пользователя это что то неправильно. (Хотя мы конечно не знаем вашей истории). Объект, если изменился, то он у всех пользователей должен измениться.

Если именно "форумные" задачи решаете - посмотрите как это делают разработчики форумов. Но не думаю что они заморачиваются с такими табличками как вы придумали, так как выборка несложная.
...
Рейтинг: 0 / 0
Как лучше организовать учёт изменённых "тем"
    #39774586
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serguei , я может не совсем правильно выразился. Мне не надо изменения объектов в контексте пользователя.
Мне надо для списка объектов - знать изменились ли они для данного пользователя, т.е. были ли в них изменения с момента последнего обращения к ним пользователем.

Т.е. у объекта "Топик" - есть lastID, когторый обновляется после добавлении сообщения в топике.
И в указанной мной таблице есть информация о том, что данный пользователь в данном топике последний раз видел сообщение с данным lastID.

В таблицах форумов чтобы полазить, это надо устанавливать у себя... Что-то не охота ради вопроса который можно тут задать.
У меня задача не форум, но просто принцип того что надо решить тот же самый.
...
Рейтинг: 0 / 0
Как лучше организовать учёт изменённых "тем"
    #39774623
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot Serguei
Мне надо для списка объектов - знать изменились ли они для данного пользователя, т.е. были ли в них изменения с момента последнего обращения к ним пользователем.

Т.е. у объекта "Топик" - есть lastID, когторый обновляется после добавлении сообщения в топике.
И в указанной мной таблице есть информация о том, что данный пользователь в данном топике последний раз видел сообщение с данным lastID.


Ну, если бы я решал такую задачу - сохранил бы время обращения пользователя к объекту и проверил бы историю изменений объекта после этого обращения. По-моему это самое простое решение под те требования, что вы озвучили.
...
Рейтинг: 0 / 0
Как лучше организовать учёт изменённых "тем"
    #39774699
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergueiНу, если бы я решал такую задачу - сохранил бы время обращения пользователя к объекту и проверил бы историю изменений объекта после этого обращения. По-моему это самое простое решение под те требования, что вы озвучили.
Ну т.е. это указанный мной способ, где вместо lastID - lastTime.
Т.е. для пользователей в любом случае нужна таблица в которой время последнего доступа пользователей к объектам.
И для самих объектов - либо поле с временем последнего обновления объекта, ну либо брать это время из "лога действий" с объектом.

История действий с объектом у меня есть, но просто если выбирать между способами:
1. вычислять MAX(accTime) из таблицы с логом действий
2. При действиях с объектом - обновлять поле lastTime у объекта

В пране производительности же второй вариант выгодней чем постоянно дёргать агрегатную функцию из таблицы?
...
Рейтинг: 0 / 0
Как лучше организовать учёт изменённых "тем"
    #39775650
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если уже совсем просто и без привязки к реальной БД, то нужна таблица LastTablesChange с полями: TableName VARCHAR() и LastUpdate DATETIME.
И дату с временем последнего посещения пользователя хранить в таблице пользователей и обновлять только когда юзер выходит из системы. Во время нового входа юзера обычный select из таблицы с темами по дате большей чем дата выхода у юзера всё сделает сам.
...
Рейтинг: 0 / 0
Как лучше организовать учёт изменённых "тем"
    #39775672
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot
История действий с объектом у меня есть, но просто если выбирать между способами:
1. вычислять MAX(accTime) из таблицы с логом действий
2. При действиях с объектом - обновлять поле lastTime у объекта

В пране производительности же второй вариант выгодней чем постоянно дёргать агрегатную функцию из таблицы?

Не факт - при наличии индекса по полю функция max очень дешевая, а конкуренция за обновление одного и того же поля одной и той же строки при любых изменениях объекта (если объект сложен и состоит из множества записей, хотя бы как тема на форуме) вполне может создать "бутылочное горлышко".
Вам правильно посоветовали - не надо заниматься преждевременной оптимизацией. Увидите что запрос определения обновленных объектов жрет недопустимо много ресурсов, тогда можно будет что-то думать на эту тему.
...
Рейтинг: 0 / 0
Как лучше организовать учёт изменённых "тем"
    #39776289
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за дельные советы уважаемые!

Запариваться на оптимизации пока не буду, сделаю понятное определение а там уже погляжу. Спасибо!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше организовать учёт изменённых "тем"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]