Мозгой раскинуть. Чтоб выдать кажной транзакции версию записи, которую ей положено выдать, их надо перебрать. Что быстрее перебрать - 1 версию или тыщу?WildSery писал(а): Где про полезность почитать?
IBEScript.dll - что передать в функцию Connect?
Модератор: kdv
Раскинул. Новая транзакция берёт 1-ю по счёту (она же последняя, "рабочая"), не важно, сколько версий есть. А старые транзакции хоть со сборкой, хоть без сборки будут свои версии искать, от текущей вглубь.Merlin писал(а): Мозгой раскинуть. Чтоб выдать кажной транзакции версию записи, которую ей положено выдать, их надо перебрать. Что быстрее перебрать - 1 версию или тыщу?
нет, мил-человек... сервер всегда берет пакет версий. И уж потом начинает разбираться, чего можно видать этой конкретной транзакции, а чего нет, и какие версии являются мусором.Новая транзакция берёт 1-ю по счёту (она же последняя, "рабочая"), не важно, сколько версий есть.
например?P.S. Блин, в разных источниках по-разному расписано хранение версий...
Пакет-то пакет, однако если нужна последняя версия (а новая транзакция её и возьмёт,) то это будет самая первая запись, и дальше не пойдёт.
Например, вот тут http://ibase.ru/devinfo/inplupd.htm (и тут http://ibase.ru/devinfo/versions.htm)
А вот тут http://ibase.ru/devinfo/mga.htm написано, что
Например, вот тут http://ibase.ru/devinfo/inplupd.htm (и тут http://ibase.ru/devinfo/versions.htm)
как и должно быть.IB заменяет оригинальную запись новой версией, и создает указатель на старую версию записи (back version)
А вот тут http://ibase.ru/devinfo/mga.htm написано, что
Вроде как наоборот, чтобы получить последнюю, нужно все дельты складывать. Либо написано двусмысленно.конечную, выдаваемую версию записи сервер формирует на основании всех предыдущих (т.к. версии записи - это "отличия" обновлений предыдущей версии записи)
это я проверю, может и правда хреновню написал. В любом случае, флажок коннекта no_garbage_collect предотвращает просмотр сервером пакета версий на предмет поиска мусорных. То есть, транзакция читает первую или "серединную" версию - это пофиг.чтобы получить последнюю, нужно все дельты складывать. Либо написано двусмысленно.
В любом случае, при наличии достаточного числа активных транзакций может накопиться прилично версий, и работает сборка мусора или нет (no_garbage_collect), все равно производительность упадет. Кроме того, BDE этот флаг у коннекта выставить не позволяет.
Так возникают ситуации, которые описаны в хелпе IBAnalyst, в статейке "как правильно получать статистику из БД".
Переписать всю систему - это ты загнул. Хотя постепенно к этому идём, все свои модули пишем "правильно".
А другой путь собственно и привёл меня в тему "Репликация". Разделил на две базы "оперативная" и "архивная", репликация данных как часы отлажена была до того (есть ещё база "для отчётов"), а вот с метаданными ещё не всё гладко.
А другой путь собственно и привёл меня в тему "Репликация". Разделил на две базы "оперативная" и "архивная", репликация данных как часы отлажена была до того (есть ещё база "для отчётов"), а вот с метаданными ещё не всё гладко.