|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
правильно я понимаю, что ....? 1) проект burp дает статическая библиотка, которая используется gbak? 2) Основную работу в burp выполняю ф-ии BACKUP_backup и RESTORE_restore, работают они на уровне логических записей. Соответственно, восстанавливая через gbak мы имеем перестроенную структуру записей, например записи меняют свой RecordNumber. 3) поэтому gbak умный, много чего может, но тормоз 4) А nackup наоборот тупой, но быстрый и очень простой, потому что тупо пишет целые страницы из файла БД в файл бекапа . Соответственно логическая структура записей остается совершенно нетронутой. Если неправильно понял - не чморите сильно.... и объясните пожалста, gbak же - это типа отдельная утилита? А как и через что она понимает, какую версию записи писать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 02:14 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Izya, Каждая логическая запись имеет свой заголовок. Начни отсюда http://www.firebirdsql.org/manual/fb-internals.html ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 02:49 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Izyaвосстанавливая через gbak мы имеем перестроенную структуру записей, например записи меняют свой RecordNumber.rdb$db_key меняется при ресторе. А еще - физическое "расстояние" между строками документа и его заголовком, так что select h.*, d.* from header h join detail d using(doc_id) будет после рестора выполняться дольше (в файле базы записи из 'd' будут уже гораздо дальше от соотв-щей заголовочной строки 'h'). Izyanackup наоборот тупой, но быстрый и очень простой, потому что тупо пишет целые страницы из файла БД в файл бекапа . Соответственно логическая структура записей остается совершенно нетронутой.Быстрым он стал только в 3.0, которая пока RC1. А до 2.5 включительно он шарашит по всему файлу базы, даже если поменялось 10 страниц. Izyagbak же - это типа отдельная утилита? А как и через что она понимает, какую версию записи писать?Она транзакцию стартует, snapshot. И видит только те версии, которые должна видеть эта транзакция. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 07:48 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
DarkMaster, Спасибо за совет и наводку. Вообще, файл мне полезный будет. Но я, если честно, совсем не понял как он к моему конкретному вопросу относится. Единственно, что к нему имеет отношение - флаг Код: plaintext
Код: plaintext
Исходный вопрос сформулирован как простой, в смысле допускает ответы да/нет (понимаю правильно/ошибаюсь). Вам не сложно дать такой ответ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 08:05 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Ваня Сусанин ... так что select h.*, d.* from header h join detail d using(doc_id) будет после рестора выполняться дольше (в файле базы записи из 'd' будут уже гораздо дальше от соотв-щей заголовочной строки 'h'). ну хоть капельку сомнения добавил-бы ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 08:12 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Ваня Сусанин, Спасибо, буду разбираться, что Вы имели в виду. Объясню, я пытаюсь понять с точки зрения выполняемого кода, в частности меня RecordNumber интересует, в т.ч. 1) время его неизменной жизни, 2) моменты, когда он может меняться. SP Ваш ник безотносительно навевает сомнения :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 08:31 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
IzyaВаш ник безотносительно навевает сомнения :)Это хорошо. Потому что надо всё самому проверять. Никому не верьте на слово! :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 08:35 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Izyaправильно я понимаю, что ....? 1) проект burp дает статическая библиотка, которая используется gbak? 2) Основную работу в burp выполняю ф-ии BACKUP_backup и RESTORE_restore, работают они на уровне логических записей. Соответственно, восстанавливая через gbak мы имеем перестроенную структуру записей, например записи меняют свой RecordNumber. 3) поэтому gbak умный, много чего может, но тормоз 4) А nackup наоборот тупой, но быстрый и очень простой, потому что тупо пишет целые страницы из файла БД в файл бекапа . Соответственно логическая структура записей остается совершенно нетронутой. в целом, правильно. gbak это обычное клиентское приложение, работающее с базой через API. Поэтому ничего знать про физическую структуру базы оно не может в принципе. Izyaчастности меня RecordNumber интересует, в т.ч. 1) время его неизменной жизни, 2) моменты, когда он может меняться RecordNumber это внутреннее название RDB$DBKEY. На физическом уровне он неизменен до тех пор, пока жива хоть одна версия записи. Т.е. никакой update/delete не меняет номер записи. Но как только запись была удалена, транзакция закоммичена, не осталось заинтересованных других транзакций и сборка мусора физически удалила эту запись, то номер записи (по сути это слот на странице) может быть использован хранения для другой записи. Поэтому на прикладном уровне считается, что номер записи стабилен на время выполнения транзакции, прочитавшей запись (ибо она заинтересована и не дает убрать мусор). Можно сколь угодно увеличивать этот интервал, заблокировав сборку мусора (снапшот-транзакцией), со всеми вытекающими. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 08:50 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
dimitr, Если честно, не совсем понял. Я думал, что RecordNumber показывает где она физически в страницах лежит. И если мы добавляем поле в таблицу с ALTER TABLE, то последующий UPDATE записи в этой таблице может привести к ее переносу в файле, что означает, что ее RecordNumber меняется, и это видно даже на логическом уровне (например VIO_modify(tdbb, orgRpb, newRpb, transaction) после выполнения в newRpb содержит rpb_number с новым RecordNumbe'ом. ). Ну видна она в какой-то транзакции с новым RecordNumber , да и шут с ним, это же ей не мешает лежать в цепочке версий записи.... или мешает? А между транзакциям RecordNumber меняться может? В каких случаях( кроме восстановления через gbak)? Хотя бы приблизительно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 10:59 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
IzyaЯ думал, что RecordNumber показывает где она физически в страницах лежит. он показывает, где физически на страницах лежит самая свежая версия в цепочке IzyaИ если мы добавляем поле в таблицу с ALTER TABLE, то последующий UPDATE записи в этой таблице может привести к ее переносу в файле, что означает, что ее RecordNumber меняется будет создана новая версия записи, старая будет перемещена, новая займет ее место (с тем же RecordNumber, т.е. он не меняется) Izyaи это видно даже на логическом уровне (например VIO_modify(tdbb, orgRpb, newRpb, transaction) после выполнения в newRpb содержит rpb_number с новым RecordNumber'ом не может такого быть IzyaНу видна она в какой-то транзакции с новым RecordNumber не надо выдумывать то, чего нет IzyaА между транзакциями RecordNumber меняться может? В каких случаях( кроме восстановления через gbak)? Хотя бы приблизительно. я уже написал в предыдущем ответе. У существующей записи (ее цепочки версий) никогда, пока ее не удалят и не соберется мусор. После этого тот же номер будет заюзан под другую запись. Иными словами, нельзя "запомнить" RecordNumber и через пару транзакций надеяться, что там находится все та же запись. Разве что из таблицы гарантированно ничего не удаляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 11:29 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
IzyaЯ думал, что RecordNumber показывает где она физически в страницах лежит. И это правильно. IzyaИ если мы добавляем поле в таблицу с ALTER TABLE, то последующий UPDATE записи в этой таблице может привести к ее переносу в файле А это неправильно. Запись всю свою жизнь лежит в одном месте. PS: Прежде чем браться за исходники, прочти основы на ibase.ru. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 11:31 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
уточню немного - в некоторых местах ядра rpb_number может указывать и на конкретную версию, но это просто особенность реализации и она никогда не выходит наружу. Например, внутри того же VIO_modify() есть record_param temp, который представляет собой перемещенную старую версию записи, у него rpb_number действительно изменится и будет указывать на новое место. Но он нигде далее не используется и в org/new rpb не попадает, новая версия ссылается на старую только через rpb_b_page / rpb_b_line (которые по сути и есть rpb_number, только в виде прямой адресации). Но снаружи невозможно обратиться к конкретной версии по ее физическому адресу, только по "публичному" rpb_number (адресу самой свежей версии). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 11:40 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
IzyaВаня Сусанин, Ваш ник безотносительно навевает сомнения :) Есть еще люди, которые не узнают Таблоида без грима ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 11:45 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Спасибо. на PC - я все сразу. Читать буду, надеюсь пойму, но это для меня пока выглядит как какое-то непонятное чудо. Если мы добавили ALTER TABLE к таблице 100 новых полей и в UPDATE записали в эти поля значения - как запись может лежать в том же месте, не мешая соседним записям? Запись всю свою жизнь лежит в одном месте. То есть получается, что RecordNumber теоретически можно использовать, что бы обращаться к конкретной записи "всю свою жизнь", т.е. от момента её INSERT до момента её DELETE, невзирая невзирая даже на gbak? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 11:54 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Izyaкак запись может лежать в том же месте, не мешая соседним записям? Не может. Она будет мешать, начнётся фрагментация и деградация производительности. Поэтому за ALTER TABLE на живой БД без последующего backup/restore надо бить по рукам. Izyaневзирая невзирая даже на gbak? gbak создаёт совершенно новые записи в совершенно новой базе. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 12:02 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
dimitr, Спасибо большой. да и шут с ней, со старой-то версией. Кстати, а в каком состоянии трешка, я ей увлекся, а вдруг зря, там еще все перелопатят сто раз (тьфу-тьфу) :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 12:10 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Izya, конкретно там уже ничего перелопачивать не будут. Ибо близится RC 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 12:15 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Бить по рукам, наверное, надо. Вы так эмоционально ответили на мой вопрос, что у меня вдруг закралось сомнение, что RecordNumber"ы после описанных мной манипуляций совсем не поползут. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 12:16 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
IzyaЕсли мы добавили ALTER TABLE к таблице 100 новых полей и в UPDATE записали в эти поля значения - как запись может лежать в том же месте, не мешая соседним записям? на том же месте будет лежать кусок новой записи, а избыток уйдет в другое место. Это называется фрагментацией. IzyaТо есть получается, что RecordNumber теоретически можно использовать, что бы обращаться к конкретной записи "всю свою жизнь", т.е. от момента её INSERT до момента её DELETE да, при условии что ты можешь контролировать эти моменты. Иначе DELETE-GC-INSERT и на том же месте лежит совсем другая запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 12:42 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
IzyaТо есть получается, что RecordNumber теоретически можно использовать, что бы обращаться к конкретной записи "всю свою жизнь", т.е. от момента её INSERT до момента её DELETE, невзирая невзирая даже на gbak? вопросы у вас какие-то подозрительные. особенно такой интерес к физическому номеру записи. Например каким образом связаны gbak и rdb$db_key ? Да никаким, потому что gbak читает записи оператором select, и все. Номер записи имеет смысл только внутри конкретного файла БД. Он (номер) никуда не "переезжает", в принципе. А nbackup это копирование страниц, поэтому как данные были на страницах, так и остались. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 13:31 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Спасибо! dimitrда, при условии что ты можешь контролировать эти моменты. Иначе DELETE-GC-INSERT и на том же месте лежит совсем другая запись. Это я понимаю.Собственно, мне и нужно что-то типа такого контролера, "который" на каком-то уровне все манипуляции с конкретными записями через себя пропускал бы. Пока получается, его можно к логическому уровню VIO привязать, что очень хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 19:32 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Izyaмне и нужно что-то типа такого контролера, "который" на каком-то уровне /все/ манипуляции с конкретными записями через себя пропускал бы. Конкретнее задачу озвучь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 21:05 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovКонкретнее задачу озвучь. специальная версия Firebird, которая привязывается к конкретной БД? Или шпионская редакция Firebird? Я так понимаю, этот "контроллер" будет до первого backup/restore работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 22:08 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Сейчас пока не готов. Надо еще кое что выяснить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 00:56 |
|
По сорсу FB3, прошу подтвердить
|
|||
---|---|---|---|
#18+
kdvЯ так понимаю, этот "контроллер" будет до первого backup/restore работать. Нет, там записи в себе хранят инфу достаточную, что бы "пересоздать" контроллер с новыми recordnumber. Можно это рассматривать как дополнительный шаг restore. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 01:00 |
|
|
start [/forum/topic.php?fid=40&msg=39074131&tid=1562552]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 256ms |
total: | 389ms |
0 / 0 |