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

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

Date: 2010-10-28 07:11 am (UTC)
From: [identity profile] berezovsky.livejournal.com
ну и пиздец там, "не читайте до обеда советских газет! sql.ru"

Date: 2010-10-28 07:34 am (UTC)
From: [identity profile] denisioru.livejournal.com
Наличие такого списка ВНЕШНИХ инструментов для репликации говорит только о том, что все они разной степени допиленности и глюкавости, а сами разработчики просто не осилили данный функционал.

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 оно штатно работает.

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

Date: 2010-10-28 09:23 am (UTC)
From: [identity profile] vp.livejournal.com
А кратенько рассказать можете, как она реализована? А то именно речь о том, что готовые реализации накладывают на архитектуру базы разные неудобоваримые требования

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. 14th, 2025 08:15 pm
Powered by Dreamwidth Studios