metaclass: (Default)
[personal profile] metaclass
«Штирлиц бежал по Цветочной улице, а Плейшнеры все падали и падали»

Народ срется наобсуждает вечную тему - реализация синхронизации/репликации содержимого баз, применительно к Firebird. Вообще говоря, существуют готовые решения для такого, но, насколько я помню, любое подобное решение в итоге накладывает какие-то не совсем вменяемые ограничения на дизайн базы.
В принципе, мне это тоже предстоит реализовывать, но по той причине, что основную обезъянью работу за меня будет делать кодогенератор, меня больше волнуют теоретические и высокоуровненые аспекты, а думать я над ними сейчас не в состоянии. Скорее всего, сделаю составной ключ "ID базы, ID записи".

Date: 2010-10-28 07:45 am (UTC)
From: [identity profile] metaclass.livejournal.com
Кстати, у FB нету логов транзакций, поэтому там классические методы репликации с родными логами БД не реализуются.
Количество какое-то неразумное, да.

Date: 2010-10-28 07:48 am (UTC)
From: [identity profile] denisioru.livejournal.com
Очень часто, как замечено в треде на sql.ru, под логами транзакций подразумевают не сущность ".ldf/.trn-файл", а последовательность записей "лог изменений", который вполне и может формироваться сторонним софтом. Я даже примерно знаю как.

Date: 2010-10-28 08:19 am (UTC)
From: [identity profile] metaclass.livejournal.com
А, я такие логи и буду делать, только это не софт их реализует, а триггера в базе данных.

Кстати, насчет MSSQL - существуют ли там сейчас row-level триггера? А то они были statement-level и меня это как-то печалило при реализации подобных логов - приходилось извращаться, чтобы записи update получить.

Date: 2010-10-28 08:23 am (UTC)
From: [identity profile] denisioru.livejournal.com
ээ? rowlevel всмысле на каждую запись? Нет таких и я думаю не будет.
получить updateнутые записи достаточно просто:

select t1.*
from mytable t1
join inserted i on i.ID=t1.ID
join deleted i on i.ID=t1.ID

Date: 2010-10-28 08:23 am (UTC)
From: [identity profile] denisioru.livejournal.com
бля, вот правильный вариант:

select t1.*
from mytable t1
join inserted i on i.ID=t1.ID
join deleted d on d.ID=t1.ID

Date: 2010-10-28 08:26 am (UTC)
From: [identity profile] gds.livejournal.com
только рекомендую тщательно продумать откат "логов" в случае ошибок, генерируемых бд. Это не rocket science и тут нет "вызова", просто надо продумать.

Date: 2010-10-28 08:41 am (UTC)
From: [identity profile] metaclass.livejournal.com
Откат транзакции к херам, какие еще там ошибки? Логи ж тоже в БД лежат, они тоже откатятся.
Между двумя базами - 2PC, у FB оно штатно работает.

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

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 10th, 2025 12:15 am
Powered by Dreamwidth Studios