powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Время последнего изменения данных
24 сообщений из 24, страница 1 из 1
Время последнего изменения данных
    #39949595
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В базе N таблиц. Как узнать время последнего изменения данных, независимо от того, в какой они таблице?

Вешать триггер на каждую таблицу не предлагать, это понятно, но трудоемко, к тому же чревато ошибкой невнимательности - при создании новой таблицы можно забыть прикрепить к ней триггер.

Может быть, можно узнать искомое время как-либо системным образом?

Firebird 3.0
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949603
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyискомое время как-либо системным образом?
нет в хранимых данных никакого "системного времени".
версии отслеживаются по номерам. При этом транзакция N может стартовать, продолжаться час, и в течение всего часа, допустим, может быть обновлено M записей. Все они будут "помечены" номером транзакции N.
Так что, даже привязка номера транзакции к какому-то времени ничего не даст.
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949605
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyпри создании новой таблицы можно забыть прикрепить к ней триггер.

но можно навесить триггеры на ddl.
http://www.ibase.ru/files/firebird/Firebird3_SQL_features.pdf
со стр 59.
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949606
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может, не заниматься хренью, а просто навесить триггеры?
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949607
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обычные, на каждую табличку.
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949613
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv

нет в хранимых данных никакого "системного времени".


Я не говорил про "системное время", я спрашивал про "системным образом", имея под этим в виду что-либо типа:

1) из системных таблиц;

2) из таблиц мониторинга;

3) из контекстных переменных;

4) вызовом функции;

5) триггер на системную таблицу;

6) триггер уровня базы;

7) ...
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949616
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Обычные, на каждую табличку.


200 таблиц. Было бы 2 или даже 10, навесил бы и не искал других путей.
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949622
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shalamyansky
ъъъъъ
Обычные, на каждую табличку.


200 таблиц. Было бы 2 или даже 10, навесил бы и не искал других путей.
Куда ты денешься.
Будешь или руками на каждую табличку делать, или софтину напишешь.
Например, в триггере на создание/изменение ddl таблички, он будет создавать/менять триггеры на изменение данных.
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949631
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv

но можно навесить триггеры на ddl.

Да... можно, наверное, решить задачу таким образом, спасибо. Но у меня, пожалуй, это займет не меньше времени, чем вручную к 200 таблицам приладить нужные триггеры. Зато, конечно, интереснее :)
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949634
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Размышления в сторону "системным образом".

Например, есть триггер уровня базы на событие commit. Что в контексте этого триггера может быть известно? Если бы можно было узнать, обновлялись ли этой завершенной транзакцией данные, меня бы это вполне устроило. Но как это узнать?
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949635
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky
Но у меня, пожалуй, это займет не меньше времени, чем вручную к 200 таблицам приладить нужные триггеры
посмотри в сторону IBEBLOCK. Можно быстро пробежаться по списку таблиц и навесить на них триггер
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949645
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
shalamyansky
Но у меня, пожалуй, это займет не меньше времени, чем вручную к 200 таблицам приладить нужные триггеры
посмотри в сторону IBEBLOCK. Можно быстро пробежаться по списку таблиц и навесить на них триггер

Или нажать в ИбЕксперте кнопку "создать объекты для протоколирования изменений".
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949663
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky

Например, есть триггер уровня базы на событие commit. Что в контексте этого триггера может быть известно? Если бы можно было узнать, обновлялись ли этой завершенной транзакцией данные, меня бы это вполне устроило. Но как это узнать?


О, точно!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
      TR.mon$timestamp
    ,    ( RS.mon$record_inserts > 0 )
      or ( RS.mon$record_updates > 0 )
      or ( RS.mon$record_deletes > 0 ) as "WriteIt!"
  from
      mon$transactions TR
    inner join mon$record_stats RS
      on ( RS.mon$stat_id = TR.mon$stat_id )
  where
    TR.mon$transaction_id = current_transaction



Собственно, это решает мою задачу. Вот так всегда, стоит поговорить с умными людьми, как все само собой решается. Спасибо!
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949669
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не совсем время последнего изменения данных. Это время старта последней подтвержденной транзакции, изменившей данные. Но меня для моих задач вполне устраивает. А можно взять и timestamp самого commit'а, так еще ближе.
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949681
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

мониторинг в каждой тр-ции - прямая дорога в ад.
Даже не дорога - шоссе.

PS Что это за задача такая, что нужно знать "время последнего изменения данных, независимо от того, в какой они таблице" ???
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949689
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad

мониторинг в каждой тр-ции - прямая дорога в ад.


Да? Обидно. Не хочу в ад, придется отказаться. Но буду знать.

hvlad

PS Что это за задача такая, что нужно знать "время последнего изменения данных, независимо от того, в какой они таблице" ???


Кеш. Есть толстая БД и тяжелые поисковые запросы, которые часто повторяются. Сделал промежуточный слой - если запрос уже был, данные берутся из сохраненных результатов. Но нужно быть уверенным, что за время между двумя одинаковыми запросами база не изменилась. Так оно обычно и бывает - база пополняется примерно раз в сутки. Если изменилась - кеш обновляется.
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949699
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
shalamyansky,
мониторинг в каждой тр-ции - прямая дорога в ад.

А что, там идут вычисления record_updates и иже с ними на лету, а не просто обращение к счетчикам в памяти?
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949712
dennis-r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky
В базе N таблиц. Как узнать время последнего изменения данных, независимо от того, в какой они таблице?

Вешать триггер на каждую таблицу не предлагать, это понятно, но трудоемко, к тому же чревато ошибкой невнимательности - при создании новой таблицы можно забыть прикрепить к ней триггер.

Любую повторяющуюся операцию можно и нужно автоматизировать. Рыба: 8579006
Текст триггера меняется на нужный.

Проверка на наличие триггера у таблицы - тема для домашнего задания.
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949715
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за рыбу, профессор!
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949716
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мониторинг делает снимок состояния всех коннектов к текущей БД.
Поэтому он не так лёгок, как хотелось бы.

Для инвалидации кеша можно использовать мониторинг, но не на коммит каждой тр-ции,
а реже, раз в несколько минут. Смотреть на счётчики уровня БД (для SS), или коннекта (не SS).
Кстати, в 3-ке есть по-табличная статистика, может быть будет удобнее её использовать.

PS Обнаружение факта изменения записей - только начало вопросов, если конечно не стоит
задача сбрасывать весь кеш на каждый чих в какой попало таблице.
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949717
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyКеш. Есть толстая БД и тяжелые поисковые запросы, которые часто повторяются.

Так, может, энергию направить на облегчение запросов, а не постройку заборчика костылей?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949807
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле конкретная моя задача уже решена, довольно просто. При пополнении базы, это определенный пакет операций, ставлю нужные временн'ые флаги. Других изменений не предполагается. Я просто забыл, рассматривая код в порядке рефакторинга :) Так что вопрос чисто теоретический, но довольно интересный, не так ли? Еще более интересны и познавательны оказались ответы, спасибо всем поучаствовавшим!
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949808
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Так, может, энергию направить на облегчение запросов, а не постройку заборчика костылей?..

На оптимизацию поиска уже направлено довольно много энергии, дальнейшие инвестиции грозят неэффективной отдачей. А кеш - это не костыли, кеш - это самокат!
...
Рейтинг: 0 / 0
Время последнего изменения данных
    #39949940
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyэто самокат!

С инвалидацией на каждое изменение него квадратные колёса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Время последнего изменения данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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