|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
В базе N таблиц. Как узнать время последнего изменения данных, независимо от того, в какой они таблице? Вешать триггер на каждую таблицу не предлагать, это понятно, но трудоемко, к тому же чревато ошибкой невнимательности - при создании новой таблицы можно забыть прикрепить к ней триггер. Может быть, можно узнать искомое время как-либо системным образом? Firebird 3.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 19:33 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
shalamyanskyискомое время как-либо системным образом? нет в хранимых данных никакого "системного времени". версии отслеживаются по номерам. При этом транзакция N может стартовать, продолжаться час, и в течение всего часа, допустим, может быть обновлено M записей. Все они будут "помечены" номером транзакции N. Так что, даже привязка номера транзакции к какому-то времени ничего не даст. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 19:51 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
shalamyanskyпри создании новой таблицы можно забыть прикрепить к ней триггер. но можно навесить триггеры на ddl. http://www.ibase.ru/files/firebird/Firebird3_SQL_features.pdf со стр 59. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 19:57 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
Может, не заниматься хренью, а просто навесить триггеры? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 20:00 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
Обычные, на каждую табличку. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 20:00 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
kdv нет в хранимых данных никакого "системного времени". Я не говорил про "системное время", я спрашивал про "системным образом", имея под этим в виду что-либо типа: 1) из системных таблиц; 2) из таблиц мониторинга; 3) из контекстных переменных; 4) вызовом функции; 5) триггер на системную таблицу; 6) триггер уровня базы; 7) ... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 20:16 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
ъъъъъ Обычные, на каждую табличку. 200 таблиц. Было бы 2 или даже 10, навесил бы и не искал других путей. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 20:19 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
shalamyansky ъъъъъ Обычные, на каждую табличку. 200 таблиц. Было бы 2 или даже 10, навесил бы и не искал других путей. Будешь или руками на каждую табличку делать, или софтину напишешь. Например, в триггере на создание/изменение ddl таблички, он будет создавать/менять триггеры на изменение данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 20:27 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
kdv но можно навесить триггеры на ddl. Да... можно, наверное, решить задачу таким образом, спасибо. Но у меня, пожалуй, это займет не меньше времени, чем вручную к 200 таблицам приладить нужные триггеры. Зато, конечно, интереснее :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 20:37 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
Размышления в сторону "системным образом". Например, есть триггер уровня базы на событие commit. Что в контексте этого триггера может быть известно? Если бы можно было узнать, обновлялись ли этой завершенной транзакцией данные, меня бы это вполне устроило. Но как это узнать? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 20:45 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
shalamyansky Но у меня, пожалуй, это займет не меньше времени, чем вручную к 200 таблицам приладить нужные триггеры ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 20:47 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
_Vasilisk_ shalamyansky Но у меня, пожалуй, это займет не меньше времени, чем вручную к 200 таблицам приладить нужные триггеры Или нажать в ИбЕксперте кнопку "создать объекты для протоколирования изменений". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 20:56 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
shalamyansky Например, есть триггер уровня базы на событие commit. Что в контексте этого триггера может быть известно? Если бы можно было узнать, обновлялись ли этой завершенной транзакцией данные, меня бы это вполне устроило. Но как это узнать? О, точно! Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Собственно, это решает мою задачу. Вот так всегда, стоит поговорить с умными людьми, как все само собой решается. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 21:10 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
Это не совсем время последнего изменения данных. Это время старта последней подтвержденной транзакции, изменившей данные. Но меня для моих задач вполне устраивает. А можно взять и timestamp самого commit'а, так еще ближе. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 21:16 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
shalamyansky, мониторинг в каждой тр-ции - прямая дорога в ад. Даже не дорога - шоссе. PS Что это за задача такая, что нужно знать "время последнего изменения данных, независимо от того, в какой они таблице" ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 21:28 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
hvlad мониторинг в каждой тр-ции - прямая дорога в ад. Да? Обидно. Не хочу в ад, придется отказаться. Но буду знать. hvlad PS Что это за задача такая, что нужно знать "время последнего изменения данных, независимо от того, в какой они таблице" ??? Кеш. Есть толстая БД и тяжелые поисковые запросы, которые часто повторяются. Сделал промежуточный слой - если запрос уже был, данные берутся из сохраненных результатов. Но нужно быть уверенным, что за время между двумя одинаковыми запросами база не изменилась. Так оно обычно и бывает - база пополняется примерно раз в сутки. Если изменилась - кеш обновляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 21:37 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
hvlad shalamyansky, мониторинг в каждой тр-ции - прямая дорога в ад. А что, там идут вычисления record_updates и иже с ними на лету, а не просто обращение к счетчикам в памяти? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 21:49 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
shalamyansky В базе N таблиц. Как узнать время последнего изменения данных, независимо от того, в какой они таблице? Вешать триггер на каждую таблицу не предлагать, это понятно, но трудоемко, к тому же чревато ошибкой невнимательности - при создании новой таблицы можно забыть прикрепить к ней триггер. Любую повторяющуюся операцию можно и нужно автоматизировать. Рыба: 8579006 Текст триггера меняется на нужный. Проверка на наличие триггера у таблицы - тема для домашнего задания. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 22:01 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
Спасибо за рыбу, профессор! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 22:06 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
Мониторинг делает снимок состояния всех коннектов к текущей БД. Поэтому он не так лёгок, как хотелось бы. Для инвалидации кеша можно использовать мониторинг, но не на коммит каждой тр-ции, а реже, раз в несколько минут. Смотреть на счётчики уровня БД (для SS), или коннекта (не SS). Кстати, в 3-ке есть по-табличная статистика, может быть будет удобнее её использовать. PS Обнаружение факта изменения записей - только начало вопросов, если конечно не стоит задача сбрасывать весь кеш на каждый чих в какой попало таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 22:07 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
shalamyanskyКеш. Есть толстая БД и тяжелые поисковые запросы, которые часто повторяются. Так, может, энергию направить на облегчение запросов, а не постройку заборчика костылей?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 22:08 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
На самом деле конкретная моя задача уже решена, довольно просто. При пополнении базы, это определенный пакет операций, ставлю нужные временн'ые флаги. Других изменений не предполагается. Я просто забыл, рассматривая код в порядке рефакторинга :) Так что вопрос чисто теоретический, но довольно интересный, не так ли? Еще более интересны и познавательны оказались ответы, спасибо всем поучаствовавшим! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 01:23 |
|
Время последнего изменения данных
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Так, может, энергию направить на облегчение запросов, а не постройку заборчика костылей?.. На оптимизацию поиска уже направлено довольно много энергии, дальнейшие инвестиции грозят неэффективной отдачей. А кеш - это не костыли, кеш - это самокат! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 01:26 |
|
|
start [/forum/topic.php?fid=40&tid=1560373]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 9ms |
total: | 272ms |
0 / 0 |