| 
 | 
| 
 
Как лучше организовать учёт изменённых "тем" 
 | 
|||
|---|---|---|---|
| 
 #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?desktop=1&fid=32&tid=1539960]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    12ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    56ms | 
get topic data:  | 
    13ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    50ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 229ms | 
| total: | 382ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.