powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
20 сообщений из 20, страница 1 из 1
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132198
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер!

Есть ли какой способ узнать время последнего изменения метаданных?

Задача: Есть программка-клиент на Delphi и FibPlus. Fib+ используют локальный кэш метаданных. Проблемы появляются если в таблицу добавляется новое поле - тогда Fib+ это поле игнорируют при генерировании Insert и update SQL.
Сейчас кэш можно сбросить только вручную. Хочется это дело автоматизировать. Например через дату последней модификации структуры БД. (проверять при подключении и инвалидировать кэш, если дата поменялась). Вопрос как получить эту дату? Или может уважаемые форумчане могут подсказать альтернативный способ?
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132201
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseмогут подсказать альтернативный способ?
Ага: никогда не менять метаданные на ходу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132202
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debose,

перейдёшь на FB3 напишешь DDL триггер который будет записывать дату последней модификации. А вообще идея шлак.
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132213
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточняю, я пишу клиента. Контролировать кто, как и когда меняет метаданные вне моих возможностей.
Я для себя вижу 3 типа действий:
1) проинформировать о необходимости сбрасывать кэш после изменения метаданных
2) отключить кэширование метаданных на клиенте
3) инвалидировать кэш метаданных автоматически

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

Если я вас верно понял, в Firebird такая инфа из коробки не доступна.

FB используется 2.5.
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132214
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока подумываю о том, чтобы повесить свои триггеры на RDB$ процедуры:
RDB$FIELDS, RDB$PROCEDURE_PARAMETERS
и возможно на RDB$RELATIONS, RDB$RELATION_FIELDS

Чем это плохо?
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132217
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseЧем это плохо?
Тем, что такие триггера работают непредсказуемо. Выбирай вариант 2.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132220
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТем, что такие триггера работают непредсказуемо
Можно поподробнее?
Иногда срабатывают, а иногда нет?
Или вообще отключаются и перестают работать?
Или вообще могут мешать обновлению метаданных?

п.с. придумались варианты 4) обновлять "дату обновления метаданных" вручную. (сам юзер поменял, сам пусть и обновляет), ну заодно можно и триггер повесить (если триггер не сработает, то вручную пусть обновляют) 5) при подключении всегда принудительно запускать валидацию метаданных в отдельном потоке
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132227
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseПока подумываю о том, чтобы повесить свои триггеры на RDB$ процедуры:
RDB$FIELDS, RDB$PROCEDURE_PARAMETERS
и возможно на RDB$RELATIONS, RDB$RELATION_FIELDS
Чем это плохо?

1. Тем что они не восстанавливаются при ресторе
2. Тем что это грязный хак.

Проще хранить номер версии метаданных в отдельный табличке и пусть твой скрипт обновлений инкрементирует его. А программа просто сравнивает номер версии в своём кэше с номером в БД
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132228
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseобновлять "дату обновления метаданных" вручную. (сам юзер поменял, сам пусть и обновляет)
а где у тебя вообще метаданные обновляются? В смысле откуда? если из твоей программы, то сам можешь сделать. Если допустимо изменение метаданных откуда угодно, тогда никто никакой "даты обновления метаданных" "вручную" обновлять не будет.
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132229
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВыбирай вариант 2.
Мне вот интересно: ТСы просто никогда не слушают моих советов или целенаправленно
поступают наоборот?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132235
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDimitry SibiryakovВыбирай вариант 2.
Мне вот интересно: ТСы просто никогда не слушают моих советов или целенаправленно
поступают наоборот?..

Дмитрий, совет вполне услышан. Именно на уровне совета, а не руководства к действию. И в этом большая разница.
У меня своя задача, за которую я несу ответственность. Для принятия решения мне не хватало знаний - здесь я эти знания получил (частично, пока ещё не хватает конкретики про непредсказуемость). Спасибо огромное! (виноват, - забыл поблагодарить).
В данном случае аргумент - "эти триггера слетают при ресторе" - для меня критичный - теперь я точно знаю почему триггера мне не подойдут. Без этого кусочка информации единственным формальным обоснованием для принятия решения было бы только "так ребята на форуме сказали". =)
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132237
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debose> не хватает конкретики про непредсказуемость

Не столько непредсказуемость, сколько недокументированность.
Недокументированная фича, работоспособность которой никто
не гарантировал, тем более в новых версиях.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132261
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамdebose> не хватает конкретики про непредсказуемость

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

Ну так хорошо бы её документировать. В конце-концов с точки зрения юзера (ака меня), системные таблицы - это тоже таблицы, а значит - "почему бы с ними не работать как с обычными таблицами?". Тем более что документация вроде бы этого явно не запрещает.
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132264
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDimitry SibiryakovВыбирай вариант 2.
Мне вот интересно: ТСы просто никогда не слушают моих советов или целенаправленно
поступают наоборот?..

Я тебя слушаю :)
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132277
MikeDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debose, чет не очень понятно как твой клиент будет работать без исправлений и перекомпиляции, если некто изменил метаданные, не поставив тебя в известность. Такое может быть только если твой клиент - некая универсальная система, позволяющая юзерам самим изменять запросы и самим модифицировать логику работы программы. Тогда получается что необходимость сброса кэша метаданных им известно, а тебе в твой клиент нужно лишь добавить возможность юзерам его задействовать. Либо можно сделать иначе - при запуске считаешь сумму хэшей имен всех таблиц, полей и прочего барахла и сохраняешь например в реестр. При следующем запуске проверяешь - если не совпало значит в метаданных что-то поменялось.
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132317
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikeDDТогда получается что необходимость сброса кэша метаданных им известно

Осталось только выяснить: а зачем аффтар его вообще использует.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132469
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMikeDDТогда получается что необходимость сброса кэша метаданных им известно

Осталось только выяснить: а зачем аффтар его вообще использует.

А это самый лучший вопрос. И единственный приходящий мне в голову ответ на него - because I can. Ну и микрооптимизации. Этот кэш существенно уменьшает количество запросов по метаданным к серверу. Включить его легко. Один только побочный эффект (из-за которого весь топик) - если кто-то (в реале специально кое-как обученный человек) добавил колонку в таблицу и забыл сбросить кэш у всех юзеров. Такое просходит не каждый день и даже не каждый месяц, но когда происходит - выясняется, что про кэш он забыл, не знал и т.п.
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132473
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseЭтот кэш существенно уменьшает количество запросов по метаданным к серверу.

В правильно написанном приложении количество таких запросов равно нулю. Вряд ли кэш сможет
существенно его уменьшить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132478
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovdeboseЭтот кэш существенно уменьшает количество запросов по метаданным к серверу.

В правильно написанном приложении количество таких запросов равно нулю. Вряд ли кэш сможет
существенно его уменьшить.
У меня не сферическое в вакууме. У меня реальное legacy. С полноценным дизайнером форм (IDE) и на датасетах, где повсеместно используется select * from и генерированием Update/Insert/Delete запросов на лету. В общем, как есть так есть.
...
Рейтинг: 0 / 0
Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
    #39132543
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseУ меня реальное legacy. С полноценным дизайнером форм (IDE) и на датасетах,
где повсеместно используется select * from и генерированием Update/Insert/Delete запросов
на лету.
Вообще-то информации, возвращаемой при препарировании select, практически достаточно для
генерации всех остальных запросов. Не хватает только имени поля ПК.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как узнать время последнего изменения метаданных? (или валидация Fib+ кэша метаданных)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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