powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Оффлайн-тяпничная репликация
151 сообщений из 151, показаны все 7 страниц
Оффлайн-тяпничная репликация
    #39924054
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Котаны-бротаны!

Есть две БД. Master. Slave. Изначально одинаковые. Между ними трафик - жлобский. НЕ-гигабит.

Есть сет таблиц. В основном это справочники. Типа

keyvalue1a2b
Value может быть комплексным. И содержать много полей. Вобщем это неважно.

Мы их слегка модифицируем. В мастер БД добавляем даты последней модифицации.

keyvaluelastUpdateTime1a2020-02-07 16:45:33.01232b2020-02-06 22:00:01.9351

Неважно как но модификация затрагивает только INSERT/UPDATE. Ложные срабатываня типа дважды обновили
поле на тоже значене - это ОК. Это нормально. Мы их тоже берём как изменения.

Теперь вопрос топика.

Как быть с удалёнными строками? Как их реплицировать на Slave? Ожидается предложение по разработке
оффалйн репликатора.

(Пример. Удалилась строка с ключом №2)
keyvaluelastUpdateTime1a2020-02-07 16:45:33.0123

Очевидно что Master обладает правом делать с справочниками всё. Удалённая строка теряет и lastUpdate и вообще
identity. Чтобы узнать какие строки были удалены нужно сделать некие манипуляции с обоими БД.

Жду ваших тяпничных советов.

Приветсвуется: оптимизация сетевого трафика. Хардкод! Моар хардкода! Бесплатные СУБД.

Не приветствуется: занудство. Гугло-посылы. Покупка коробочного варианта репликации.
Коммерческие конфигурации под ключ.

Ясен петь что и топика бы не было если-б мы обсуждали physical/logical standby/replication e.t.c.

Втопку ваши коробочные продукты! Фантазируйте!


Go-Go кодить!
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924059
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как быть с удалёнными строками? Как их реплицировать на Slave? Ожидается предложение по разработке оффалйн репликатора.

Как понимаю суть здесь тут :)

При репликации нельзя удалять, для этого изобрели пометку на удаление, т.е. оно есть, но помечено как удалено.

PS Если чистый мастер-слэйв, то репликация запросами, повторить все insert/update/delete на slave. По другому называется журнал транзакций, думаю ты это знаешь как DBA.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924062
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ну вот шо ты пишешь...
аки младенец.
кодит-шмодить, глоу-гоу.

Ты в глаза ей пристально посмотри, а не гой-гоу.

авторКак быть с удалёнными строками? Как их реплицировать на Slave?
удалённые строки двух луёв бывают.

первый из них - строки, которые рождены на мастере и ещё ни на один слейв не попали, и об этом достоверно известно.
Их никуда реплицировать не надо.

работа со вторыми зависит от того, а слейв ли тот слейв, может он обратный мастер, а не слейв.
В заявленном тобой случае отдается строка лога изменений мастер таблицы с приказом удалить строку с указанным гуидом.
Если есть желание - можешь бежать кодить...
с подтверждением выполнения приказа.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924064
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как быть с удалёнными строками? Как их реплицировать на Slave? Ожидается предложение по разработке
оффалйн репликатора.


Как сказали выше. Метить как удалённые. Удаление -- это тоже изменение, такое же как любое другое, а то и более критичное по значимости.


mayton
Приветсвуется: оптимизация сетевого трафика. Хардкод! Моар хардкода! Бесплатные СУБД.


ПоЗырь (хотя бы ради интересу) в сторону Event Sourcing, мастер это поток событий. Остальные БД это потребители потока событий. И могут через себя всё пропускать, или забирать только интересное.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924065
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От зануды

Журнал транзакций может появится только в DBMS в которых эти транзакции есть.

Берем вариативную DBMS о которой нифига незвестно. Денег нет. Репликации нет.
Стоит задача 1 раз в сутки выровнять справочники. (Дополнение к ТЗ).

Неужели никто из вас в практике такую задачу не встречал??
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924066
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt

Как сказали выше. Метить как удалённые. Удаление -- это тоже изменение, такое же как любое другое, а то и более критичное по значимости.

Нет возможности метить. Программное обеспечение (черный ящик) просто дропает строки и все.

Изменить его мы не можем.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924068
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Берем вариативную DBMS о которой нифига незвестно. Денег нет. Репликации нет.
Стоит задача 1 раз в сутки выровнять справочники. (Дополнение к ТЗ).


Я ужо сказал. Event Sourcing. Ты можешь зацепить на него +100500 разных СУБД. От орукола, слона, сиквеля до монги с эластиком.

И это да, чистой воды гоу гоу кодинг, так полноценного коробочного решения нет. Но есть всякого на развес.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924069
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Программное обеспечение (черный ящик) просто дропает строки и все.


Задача выцепить дропы сводится к полной загрузке всех данных с вычленением потеряшек, чтобы их кильнуть.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924070
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
Берем вариативную DBMS о которой нифига незвестно. Денег нет. Репликации нет.
Стоит задача 1 раз в сутки выровнять справочники. (Дополнение к ТЗ).


Я ужо сказал. Event Sourcing. Ты можешь зацепить на него +100500 разных СУБД. От орукола, слона, сиквеля до монги с эластиком.

И это да, чистой воды гоу гоу кодинг, так полноценного коробочного решения нет. Но есть всякого на развес.

Нет возможности. Программный продукт не наш. Сорцов нет.

Все что есть - это две DBMS.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924071
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
Программное обеспечение (черный ящик) просто дропает строки и все.


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

Хвост не спеши. Давай всё таки сверх задачку.

Я вот думаю что полная загрузка всех данных не нужна.

Мне вот так кается...
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924072
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Хвост не спеши. Давай всё таки сверх задачку.

Я вот думаю что полная загрузка всех данных не нужна.

Мне вот так кается...


К сожалению, нужна. И именно полная.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924073
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Нет возможности. Программный продукт не наш. Сорцов нет.


Ну DBMS-то хоть не рукописная? :)
Всуньте туда триггер на удаление, что трекать подобное безобразие.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924074
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может ключей хватит?

Или групп ключей?

Или диапазонов ключей?

Или контрольных сумм?

Или сам придумай што.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924076
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Это конечно всё интересные решения :)
Но из всех костылей, самый надёжный, быстрый и простой в таком случае -- это триггер.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924077
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Ааа... я наконец понял, к чему ты клонишь

Ну вот в копилку безумных вариантов. Пишем все имеющиеся ключи в битовом представлении в файл. Потам архивируем его раром. Передаём. Профит! :)
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924078
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

авторИзменить его мы не можем.
видать, и перехватить дмл сих двух великолепных бд тоже не можем.
Ну, а хоть что-нибудь можем?
Например, отправить в сад желальщиков "репликации".

Если нечего "перехватывать", то и болеть не за что.

Может ты не с того начал.
И у тебя вовсе не "две бд" в начале разговора,
а какое-то количество, может быть встречных потоков данных,
для которых ты хочешь отыcкать конец, на котором их фильтровать?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924082
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton,

Ааа... я наконец понял, к чему ты клонишь

Ну вот в копилку безумных вариантов. Пишем все имеющиеся ключи в битовом представлении в файл. Потам архивируем его раром. Передаём. Профит! :)

А чего в битовом?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924083
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

Может ты не с того начал.
И у тебя вовсе не "две бд" в начале разговора,
а какое-то количество, может быть встречных потоков данных,
для которых ты хочешь отыcкать конец, на котором их фильтровать?

Хм.. не знаю.

Нету у меня потоков. Гдеж я их возьму? Потоки-то.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924084
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как Domino и этим справляется))
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924085
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
hVostt
mayton,

Ааа... я наконец понял, к чему ты клонишь

Ну вот в копилку безумных вариантов. Пишем все имеющиеся ключи в битовом представлении в файл. Потам архивируем его раром. Передаём. Профит! :)

А чего в битовом?

Это хорошая версия.
Когда приходит пациент, и заявляет, что у него весь лоб болит, разумно проверить, а нет ли дырки в правом виске.

Где болит-то, точнее можно сказать?
Хотя бы, как оно пульсирует опиши.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924144
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Берем вариативную DBMS о которой нифига незвестно. Денег нет. Репликации нет.
Стоит задача 1 раз в сутки выровнять справочники. (Дополнение к ТЗ).

Бэкап и чтобы целиком его не гнать по инету rsync с предыдущим бэкапом на получателе.

Если триггеры есть то там ловить все изменения. Протоколирование действий пользователей и версионность записей
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924145
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rsync уже ближе.

Но хотелось бы не файло- а таблично- ориентированный.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924147
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На отправителе можешь копию развернуть. Раз в сутки запускается скрипт и сверяет результат "select * from MyTable order by id" из оригинала и копии, сверка делается в один проход, по итогу получаешь изменения, накатываешь их на копию и раздаешь всем заинтересованным слэйвам.

PS Можно даже не хранить записи целиком в локальной копии, а ограничиться каким-нибудь хэшем не очень коротким.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924149
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как раз думаю про хеши.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924154
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я как раз думаю про хеши.

ИМХО если локальную копию сохранить в виде {id, hash}, где hash от всех полей кроме id, то по сравнению id отловишь все удаления и вставки, а по hash проверять изменение записи, есть вероятность что совпадет хэш старого и нового состояния, но она очень мизерная, 1/2 128 если использовать MD5.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924167
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня не длина хеша беспокоит. Помнишь в радужных топиках были ссылки на Дерево Меркла https://ru.wikipedia.org/wiki/Дерево_хешей

Но оно пригодно для тех кейсов когда мы последовательно что-то пишем в двоичный файл.
Или (возможно) модифицируем его фрагмент.

Но при этом у нас нет вставки или удаления 1 байта из середины файла.

Дерево помогло-бы идеально синкать 2 двоичных файла на дистанции и в условиях слабого сетевого
канала. Я не знаю как работает rsync но возможно он использует эти принципы.

Но в нашем кейсе с табличкой delete/insert в мастер слегка ломает этот гладкий алгоритм.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924170
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В неком гипотетическом сценарии можно было-бы представлять Master/Slave БД как 2 CSV-файла.

Тогда в топике была-бы более понятна моя мысль. И git/svn как двигатель механики сравнения.
Но я хотел просто не выходить в плоскость файлов. Всё так БД-первична в данном ТЗ.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924180
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я не знаю как работает rsync но возможно он использует эти принципы.

Там похожий принцип
https://ru.wikipedia.org/wiki/Rsync#Алгоритм Принимающий компьютер разделяет свою копию файла на неперекрывающиеся куски фиксированного размера S и вычисляет контрольную сумму для каждого куска: MD4-хеш и более слабый кольцевой хеш, и отправляет их серверу, с которым синхронизируется.

Сервер, с которым синхронизируются, вычисляет контрольные суммы для каждого кусочка размера S в своей версии файла, в том числе перекрывающиеся куски. Вычисления производятся эффективно ввиду особого свойства кольцевого хеша: если кольцевой хеш байт от n до n + S − 1 равняется R, то кольцевой хеш байт от n + 1 до n + S может быть посчитан, исходя из R, байта n и байта n + S без необходимости учитывать байты, лежащие внутри этого интервала. Таким образом, если уже подсчитан кольцевой хеш байт 1—25, то для подсчета кольцевого хеша байт 2—26 используется предыдущее значение и байты 1 и 26.

mayton
Но в нашем кейсе с табличкой delete/insert в мастер слегка ломает этот гладкий алгоритм.

insert не мешает, он в конец дописывается, а вот delete мешает, это сдвиг всего что после удаляемого.

Только я не вижу смысла это использовать тут. Сам же говоришь база посторонняя и дерево тебе каждый раз с нуля придется строить. Чем тебе не понравился мой вариант 22075934 получения изменений по локальной копии ?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924181
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В неком гипотетическом сценарии можно было-бы представлять Master/Slave БД как 2 CSV-файла.

Еще есть diff , можно им локально получать разницу и ее раздавать.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924182
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

insert не мешает, он в конец дописывается, а вот delete мешает, это сдвиг всего что после удаляемого.

Только я не вижу смысла это использовать тут. Сам же говоришь база посторонняя и дерево тебе каждый раз с нуля придется строить. Чем тебе не понравился мой вариант 22075934 получения изменений по локальной копии ?

Если ты помнишь. В базах данных на уровне storage нет понятия порядок записей.
Они пишутся как heap по принципу следующих свободных блоков (4к-8к).
И нет никакого прогноза на положение строки без ORDER BY.

Поэтому при выборке мы обязаны будем указывать ордеринг по первичному ключу.

Код: sql
1.
SELECT t.* FROM table ORDER BY { primary fields group}



Для сохранения стабильности следования строк.

Поэтому INSERT/DELETE меняют логический порядок строк в результирующем курсоре.

Таблицы без PK или UK меня не интересуют в данном топике. Они вообще выпадают из области обсуждения
и к ним сложно применять реляционную алгебру.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924184
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
В неком гипотетическом сценарии можно было-бы представлять Master/Slave БД как 2 CSV-файла.

Еще есть diff , можно им локально получать разницу и ее раздавать.

Сомневаюсь в эффективности работы diff.

Кроме того если гипотетически предположить что мы делаем дифферес между локальным диском и диском
удалённым (nfs-протокол)

Код: sql
1.
$ diff /home/mayton/fuckerMasterFile.csv nfs://maytons-slave/fuckenSlaveFile.csv



То сетевой протокол будет генерировать объем трафика соизмеримый с длиной fuckenSlave файла.

А я - всячески избегаю этого.

Грубо говоря я пытаюсь уйти от тупого создания клона таблицы или csv файла на slave.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924188
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
От зануды

Журнал транзакций может появится только в DBMS в которых эти транзакции есть.

Берем вариативную DBMS о которой нифига незвестно. Денег нет. Репликации нет.
Стоит задача 1 раз в сутки выровнять справочники. (Дополнение к ТЗ).

Неужели никто из вас в практике такую задачу не встречал??

через скрипт:
1.считал id справочников в память
2.удалил на всех БД
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924189
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В какую память? На каком хосте?
Это важно. Я так думаю.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924192
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Поэтому INSERT/DELETE меняют логический порядок строк в результирующем курсоре.

Это сугубо всё равно пока первичный ключ стабилен и уникален. Из всего потока сознания в этом топике, вариант Dima T - единственный работоспособный пока БД рассматривается как чёрный ящик, не поддающийся изменению. "Это я тебе, голуба, говорю как краевед."

PS: Минимизация траффика достигается включением в него только реально изменённых полей и упаковкой пакета данных.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924193
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И таки в моём случае любой код будет коробочным продуктом.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924197
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Дорогой краевед.

PK это не всегда sequence.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924198
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В какую память? На каком хосте?
Это важно. Я так думаю.

не важно
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924200
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
PK это не всегда sequence.

Сугубо пофиг пока они уникальные и сравниваемые.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разъясни глыбше что там с памятью.

P.S. есть подозрение что финский жулик не умеет делать хранение diff внутри blob objects git.

Надо сравнить svn/git.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924208
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чё там разъяснять то?
у тебя 2 бд на двух хостах
делаешь на одной удаление - кидаешь на другую строку "1,2,3,4" - список удалённых
делаешь на другой удаление - забираешь с неё такую строку и кидаешь в локальную
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924212
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Dima T

insert не мешает, он в конец дописывается, а вот delete мешает, это сдвиг всего что после удаляемого.

Только я не вижу смысла это использовать тут. Сам же говоришь база посторонняя и дерево тебе каждый раз с нуля придется строить. Чем тебе не понравился мой вариант 22075934 получения изменений по локальной копии ?

Если ты помнишь. В базах данных на уровне storage нет понятия порядок записей.
Они пишутся как heap по принципу следующих свободных блоков (4к-8к).
И нет никакого прогноза на положение строки без ORDER BY.

Поэтому при выборке мы обязаны будем указывать ордеринг по первичному ключу.

Код: sql
1.
SELECT t.* FROM table ORDER BY { primary fields group}



Для сохранения стабильности следования строк.

Поэтому INSERT/DELETE меняют логический порядок строк в результирующем курсоре.

Таблицы без PK или UK меня не интересуют в данном топике. Они вообще выпадают из области обсуждения
и к ним сложно применять реляционную алгебру.

Да, надо будет ORDER BY ID, т.е. сортировка по первичному ключу, я так и предлагал 22075921 . Чем тебе это не нравится? По ID всегда есть индекс, т.е. получение записей в нужном порядке сервер не нагрузит, в MSSQL по дефолту кластерный индекс по ID, т.е. записи физически упорядочены по ID.

И без разницы в каком месте появится/исчезнет запись, суть в том что из обеих баз будет идти чтение в одном и том же порядке.

Может ты не понял мысль, пример ниже:
Параллельная обработка "select * from MyTable order by id" из оригинала и вчерашней копии
ID Хэш оригиналIDХэш копииСостояние11231123Не менялась2345Удалена36783789Изменена4567Добавлена
Далее все записи с изменившимся состоянием пишешь в файлик, и раздаешь его слэйвам. В файле только изменения, по сути почти журнал транзакций.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924214
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Сомневаюсь в эффективности работы diff.

Я тоже, но ты же сам написал
mayton
В неком гипотетическом сценарии можно было-бы представлять Master/Slave БД как 2 CSV-файла .

для CSV-файлов diff вполне подойдет.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924216
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Меня не длина хеша беспокоит. Помнишь в радужных топиках были ссылки на Дерево Меркла https://ru.wikipedia.org/wiki/Дерево_хешей
...
Но в нашем кейсе с табличкой delete/insert в мастер слегка ломает этот гладкий алгоритм.

При выполнении ограничений:
1. ID это счетчик
2. delete происходит редко, т.е. дырок в последовательности ID немного, т.е. нет такого 1, 2, 3, 100500, 100501, ...
Т.е. имеем обычный справочник набиваемый руками.

В этом случае удаленные записи можно считать как записи с каким-то конкретным хэшем, например 0, тогда никаких смещений записей не будет, но повторюсь, при больших "дырах" будут кучи нулей в дереве.

PS Этот пост и два выше - это три разных независимых направления, просьба не связывать их меж собой.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924245
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

Да, надо будет ORDER BY ID, т.е. сортировка по первичному ключу, я так и предлагал 22075921 . Чем тебе это не нравится? По ID всегда есть индекс, т.е. получение записей в нужном порядке сервер не нагрузит, в MSSQL по дефолту кластерный индекс по ID, т.е. записи физически упорядочены по ID.

И без разницы в каком месте появится/исчезнет запись, суть в том что из обеих баз будет идти чтение в одном и том же порядке.

Может ты не понял мысль, пример ниже:
Параллельная обработка "select * from MyTable order by id" из оригинала и вчерашней копии
ID Хэш оригиналIDХэш копииСостояние11231123Не менялась2345Удалена36783789Изменена4567Добавлена

Далее все записи с изменившимся состоянием пишешь в файлик, и раздаешь его слэйвам. В файле только изменения, по сути почти журнал транзакций.
Насколько я понял ты предполагаешь как в сортировке слиянием открыть 2 курсора и читать данные из двух баз
одновременно. Верно?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924247
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Насколько я понял ты предполагаешь как в сортировке слиянием открыть 2 курсора и читать данные из двух баз
одновременно. Верно?

Верно
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924253
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton

Насколько я понял ты предполагаешь как в сортировке слиянием открыть 2 курсора и читать данные из двух баз
одновременно. Верно?

Верно

Но в этом случае ты вычитаешь полный трафик с обоих БД. И где-бы не стояло твое приложение физически.
На master или на slave - ты фактически пересоздашь таблицу заново.

А это я и так могу.

Нужен алгоритм которй делает diff с минимальным сетевым оверхедом.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924257
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Но в этом случае ты вычитаешь полный трафик с обоих БД.

Нет, поскольку копия слейва лежит локально на мастере.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924259
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
mayton
Но в этом случае ты вычитаешь полный трафик с обоих БД.

Нет, поскольку копия слейва лежит локально на мастере.

Дороговато будет держать по 2 копии каждой таблички.

Поищите более экономную структуру данных.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924264
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Dimitry Sibiryakov
пропущено...

Нет, поскольку копия слейва лежит локально на мастере.

Дороговато будет держать по 2 копии каждой таблички.

Поищите более экономную структуру данных.

Копия локальная. И это не полная копия, а только (id, hash).

PS Что это за справочники такие что держать их копии дороговато?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924266
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
mayton
Но в этом случае ты вычитаешь полный трафик с обоих БД.

Нет, поскольку копия слейва лежит локально на мастере.

Верно, по этой копии расчет изменений и по сети рассылка только изменений

PS Можно еще заархивировать, например в zip
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924270
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
пропущено...

Дороговато будет держать по 2 копии каждой таблички.

Поищите более экономную структуру данных.

Копия локальная. И это не полная копия, а только (id, hash).

PS Что это за справочники такие что держать их копии дороговато?

(разводя руками)

Хорошо. Держи ({pk group}, hash).

В начале топика я предложил расширить шапку таблицы до "lastUpdateTime" чтоб трекать изменённые.
Но если тебе надо хеш - ОК. Пускай это будет + еще одно поле.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924276
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Dima T
пропущено...

Копия локальная. И это не полная копия, а только (id, hash).

PS Что это за справочники такие что держать их копии дороговато?

(разводя руками)

Хорошо. Держи ({pk group}, hash).

В начале топика я предложил расширить шапку таблицы до "lastUpdateTime" чтоб трекать изменённые.
Но если тебе надо хеш - ОК. Пускай это будет + еще одно поле.

Похоже мы друг-друга не понимаем (((

Хэш это не поле, а функция от всех неключевых полей hash(f1, f2, ...), от оригинала каждый раз считаем, но в копии храним только хэш чтобы не хранить все неключевые поля.
mayton
В начале топика я предложил расширить шапку таблицы до "lastUpdateTime" чтоб трекать изменённые.

а потом все запретил: триггеров нет, исходники закрыты, СУБД любая и т.д. и т.п. Каким образом lastUpdateTime должно меняться по твоему?

Ты установил нездоровые ограничения, а теперь удивляешься нездоровым решениям.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924277
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо. Давай твоё решение. Любое приму. Обсудим.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924278
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Хорошо. Давай твоё решение. Любое приму. Обсудим.

Я его уже дал 22075921 22076028 По мне так вполне нормально с учетом всех твоих ограничений.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924301
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Поищите более экономную структуру данных.

А золотой ключик с серебряной пулей тебе не поискать?..

Если копия реплицируемых табличек не помещается на диск и жаба душит прикупить второй, значит не очень-то и хотелось.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924302
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима Сибиряков. Мне кажется у тебя - какая-то глубокая проблема. И ты ее очень хочешь обсудить.

И я не понимаю почему ты ее хочешь обсуждать именно здесь. В пятничном топике.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924303
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
На отправителе можешь копию развернуть. Раз в сутки запускается скрипт и сверяет результат "select * from MyTable order by id" из оригинала и копии, сверка делается в один проход, по итогу получаешь изменения, накатываешь их на копию и раздаешь всем заинтересованным слэйвам.

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


Это по сути, реализация бухого триггера, который просыпается раз в сутки, спохватывается -- а не удалилось ли чего, и начинает шерстить БД со своей карманной копией
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924304
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, хеши.. ну как бы они были не хороши -- решение плохое.
Обычно после совпадения хеша, сравнивают значения полностью.
Посмотрите на реализацию словарей.

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

В общем, не гуд. Не гуд. Плохо. Не делайте так.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924306
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как быть с удалёнными строками?

в чём проблема то я не пойму? если ID в обеих БД у них совпадают, то где тут проблема?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924308
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Мне кажется у тебя - какая-то глубокая проблема. И ты ее очень хочешь обсудить.

Нет. Она не глубокая, она давняя. Я занимаюсь репликацией БД во всех её ипостасях уже почти 20 лет и внезапные заявы "а налабайте-ка мне грааль на коленке" вызывают предсказуемую реакцию.

Если ты не веришь, что в твоём случае сравнивающий репликатор - единственное работоспособное решение, ок, как знаешь.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924329
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Кстати, хеши.. ну как бы они были не хороши -- решение плохое.
Обычно после совпадения хеша, сравнивают значения полностью.
Посмотрите на реализацию словарей.

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

В общем, не гуд. Не гуд. Плохо. Не делайте так.

И да, и нет.

Да, для словарей оно надо, т.к. там, как правило, используется короткий хэш (32 бита для x86 и 64 для x64), и в таблицу может собираться миллионы хэшей, как следствие высокая вероятность что будут коллизии, т.е. одинаковые хэши у разных записей. Недавно обсуждали. Тут формула для расчета вероятности 22051280

Нет, не обязательно в моем алгоритме: во-первых у меня всегда сравнивается только два хэша - текущего состояния записи и предыдущего. Во-вторых я предлагаю взять хэш подлиннее, например MD5, 128 бит. Тут вероятность повтора 1/2 128 , т.е. практически ноль. Можно SHA-1 взять, 160 бит, может даже лучше его, т.к. проц умеет его считать одной командой . Это уже полноценный хэш используемый в криптографии, я бы не надеялся что он случайно совпадет.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924412
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Два варианта я-бы предложил. Давайте завяжемся на SHA1 и lastUpdateTime. Я все таки имею надежду
что владелец БД разрешит добавлять дополнительные колонки в таблицы. Глупо было-бы совсем пренебрегать
этой возможносьтю.

Отслеживание изменений

Поскольку топик все еще крутится вокруг теории и алгоритмизации - я закидываю следующий
воскресный requirement по практической имплементации.

1) Назовём приложение репликатором (replicator).

В отличие от JMS-ного топика где нужна была инфраструктура брокеров и поставщиков и потребителей - у нас
будет 1 процесс. И модель взаимодействия будет простой. Репликатор соединяется с 2 БД и выполняет действия
по синхронизации сета требуемых таблиц в двух БД в одном направлении.


2) Репликатор должен запускаться как ОС-процесс с использованием cron, at e.t.c. Или вручную.

Пример:

Код: plaintext
1.
 $ replicator  {arguments} 



2.1) Репликатор предоставляет справку о спецификации своих команд.
Код: plaintext
1.
2.
 $ replicator --help
 ...




3) Репликатор может в делать upgrade схемы на Master или Slave как будет удобно кастомеру.

Пример:
Код: plaintext
1.
 $ replicator --command upgrade --dbMasterUrl "localhost:5432/postgres?user=username&pwd=pwd1234"



Апгдейд будет заключаться в добавлении дополнительных колонок (alter table ... add column ...) hashcode, lastUpdateTime
для отслеживания изменений.

4) Репликатор может обозревать не все таблицы а только интересующий scope. Пример.
Код: plaintext
1.
2.
3.
4.
 $ replicator --command replicate \
      --dbMasterUrl "localhost:5432/postgres?user=username&pwd=pwd1234"
     --dbSlaveUrl "remoteHost:5432/postgres?user=username&pwd=pwd1234"
    --tables "Currencies,Countries,Organizations,ISIN,CUSIP,SEDOL....."



5) Репликатор имеет право использовать дополнительные дисковые ресурсы для выполнения своих задач
Код: plaintext
1.
2.
 
$ replicator {arguments} --tmpDir=/home/mayton/mnt/fuckenGarbageFolderWithHugeSpace


(по умолчанию это каталог временных файлов %TMP%, /tmp e.t.c)

Нет требований по сохранности временных данных между сеансами репликации.
Приложение должно сохранять работоспособность после очистки /tmp.

6) Репликатор не ограничен в ресурсах времени или процессора однако желательно чтобы процесс
репликации был завершен в течение суток.

7) Репликатор должен формировать лог файл важных событий (Error, Warn) для анализа проблем.

Пример.
Код: plaintext
1.
$ replicator {arguments} --logFile=/home/mayton/replicator/log



Код: plaintext
1.
2020-02-01 16:00:45.0012 [ERROR] Socket connection error. Unable to create socket remoteHost:5432 .....



8) Репликатор ставит своей целью минимально использовать ресурсы сети.

8.1) Репликатор может предоставлять отладночные сведения (DEBUG) для анализа причин репликации конкретных
data-rows
Код: plaintext
1.
2020-02-01 16:00:45.0012 [DEBUG] Detected newLine in "Currency" table with primary keySet = { USD } ...



8.2) Репликатор предоставляет отчет о количестве детектированных удалений и изменений в целевой БД.

Код: plaintext
1.
2.
3.
4.
2020-02-01 16:00:45.0012 [INFO] Statistics: 
2020-02-01 16:00:45.0012   Insertions : 293545
2020-02-01 16:00:45.0012   Deletes: 0
2020-02-01 16:00:45.0012   Updates: 0



8.3) По завершению работы репликатор формирует коды ошибок в соотв. с соглашениями DOS/Unix на erroLevel/errorCode.

Пример
Код: plaintext
1.
2.
3.
4.
 
$ replicator {arguments} 
$ echo $?
0


Нулевой статус соответствует успеху. Прочие значения - несут код ошибки.

9) Репликатор может быть разработан на любом языке программирования с открытым исходным кодом.

10) Репликатор - это свободное ПО которое разрабатывается в рамках форума SQL.ru.

11) Репликатор должен поддерживать максимальное число DBMS, или предоставлять возможности
легкого расширения функционала до поддержки требуемой конкретной DBMS без серъезных
изменений основной версии кода.

12) Репликатор не ограничен в используемых технологиях и может включать в себя любой сет
библиотек и зависимостей с выполнением пункта (9).
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924414
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Давайте завяжемся на SHA1 и lastUpdateTime.

Тогда не забудь добавить в список "на время работы репликатора база для всех остальных переводится в read-only, все активные пишущие транзакции должны быть завершены к моменту старта репликатора". Без этого будет забавный отложенный облом.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924416
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
mayton
Давайте завяжемся на SHA1 и lastUpdateTime.

Тогда не забудь добавить в список "на время работы репликатора база для всех остальных переводится в read-only, все активные пишущие транзакции должны быть завершены к моменту старта репликатора". Без этого будет забавный отложенный облом.

Зачем такое требование. Master БД работает в обычном режиме.

Разве ты когда запускаешь отчетность - требуешь read-only?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924418
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Dimitry Sibiryakov
пропущено...

Тогда не забудь добавить в список "на время работы репликатора база для всех остальных переводится в read-only, все активные пишущие транзакции должны быть завершены к моменту старта репликатора". Без этого будет забавный отложенный облом.

Зачем такое требование. Master БД работает в обычном режиме.

Разве ты когда запускаешь отчетность - требуешь read-only?

Он прав, есть такие грабли. Когда запускаешь отчетность получаешь read-only данных попавших в выборку до конца выборки.

Чтобы БД сохранила целостность необходимо читать все в одной транзакции, иначе может оказаться что-то типа: в родительской таблице записи нет, а дочерняя на нее ссылается.

Но есть СУБД с другой философией (FireBird, Postgres) там нет блокировок, ты работаешь с каким-то консистентным состоянием БД и даже если оно меняется, то это не касается твоей транзакции до тех пор пока ты только читаешь.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924425
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master-Slave достаточно примитивная система репликации, даже на ущербных СУБД. Есть у меня сервер на хостинге PHP+MySql, работает лет так ..дцать. Изначально не было у MySql ни транзакций, ни триггеров, а мне надо было иметь бэкап причем готовый стартануть за минуты. Я просто сделал у себя в коде логгирование запросов insert/update/delete, т.е. тот же журнал транзакций. Бэкап-сервер просто раз в 10 минут запрашивает что свежее появилось в логе и накатывает это у себя. Если хостинг умрет, то я потеряю только последние 10 минут.

Замечательный пример был в айхор хостинге - я там был, но с бэкапами в другие места, была война собственников и они вырубили ЦОД, несколько недель следил ка он лежит, забил и забыл, а кто-то сильно пострадал т.к. даже бэкапы не могли вытащить, погуглил - сейчас опять работают.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924426
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял вас. Добавлю пункт.

13) Для DBMS: Oracle, PostgresQL, MSSQL, MySQL/Maria репликатор использует
режим транзакций transaction mode = { READ ONLY/SNAPSHOT, READ ONLY } для чтения данных из master в тех случаях
когда необходимо реализовать повторное чтение датасета в течение одного сеанса.

Ссылки:
Oracle (read only) : https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10005.htm#SQLRF01705
PostgresQL (read only) : https://www.postgresql.org/docs/12/sql-set-transaction.html
MSSQL (snapshot) : https://docs.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-ver15

Прочие DBMS которые по каким-то причинам не поддерживают режимы транзакций
(noSQL-системы или упрощённые DBMS) используются в гарантированном maintanance
окне времени когда master БД не используется.

Данный пункт - to be discussed.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924428
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
И да, и нет.

Да, для словарей оно надо, т.к. там, как правило, используется короткий хэш (32 бита для x86 и 64 для x64), и в таблицу может собираться миллионы хэшей, как следствие высокая вероятность что будут коллизии, т.е. одинаковые хэши у разных записей. Недавно обсуждали. Тут формула для расчета вероятности 22051280


Но я ловил коллизию на 128-битном криптографическом хеше для хранилища файлов. Ситуация не критическая, но неприятная. Потрачено много часов на разбирательства, в сторону хеша не смотрели, ведь "вероятность бла-бла". Но могла бы быть и критическая.

У ружья на стене выстрелить тоже вероятность маленькая.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924429
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Но я ловил коллизию на 128-битном криптографическом хеше для хранилища файлов.

Перечитай что я писал и это https://www.sql.ru/forum/1320850-1/novogodnie-paradoksy-teor-ver-i-ms-a

PS Есть разница: подогнать хэш под заданный и найти два одинаковых хэша в огромном массиве
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924433
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Master-Slave достаточно примитивная система репликации, даже на ущербных СУБД. Есть у меня сервер на хостинге PHP+MySql, работает лет так ..дцать. Изначально не было у MySql ни транзакций, ни триггеров, а мне надо было иметь бэкап причем готовый стартануть за минуты. Я просто сделал у себя в коде логгирование запросов insert/update/delete, т.е. тот же журнал транзакций. Бэкап-сервер просто раз в 10 минут запрашивает что свежее появилось в логе и накатывает это у себя. Если хостинг умрет, то я потеряю только последние 10 минут.

Замечательный пример был в айхор хостинге - я там был, но с бэкапами в другие места, была война собственников и они вырубили ЦОД, несколько недель следил ка он лежит, забил и забыл, а кто-то сильно пострадал т.к. даже бэкапы не могли вытащить, погуглил - сейчас опять работают.

Лучше всех подобная схема реализована в Oracle в модели Primary/Standby.
Ты просто раз в сутки копируешь ARC-logs и на стендбай делаешь

Код: sql
1.
SQL> recover standby database...



И через короткое время получаешь ФИЗИЧЕСКИ точные копии датафайлов
консистентные

Ну как... консистентные. Разумеется на пол-транзакции БД не откроется
и как только ты решил поменять местами Primary-Standby и открыть в alter database open
то сработает откат всех незавершенных (которые не добежали до коммита)
и ты получишь все кто успел закоммититься. Это - самое безопасное
и рационально что только вообще можно сдеать в схеме репликаций.


на момент последнего арк-лога. Физически - это означает побитово.
А не по-DML-но как делают например в альтернативных программных продуктах
где парсят парсерами WAL/REDO сегмент и пытаются по этому белому шуму понять
что делалось в БД.

Арк-логи в Oracle фиксировали поток LCR-s. Это достаточно тонкий уровень изменений.
Скажем так... это меньше чем dbBlock. Тоесть экономно.

Так было в 2000х. Сейчас схему они улучшили добавив какие-то data guards с которыми
я не работал но КМК они просто автоматизировали теже действия.

Позже Оракл создал Streams/Golden Gate но это уже было когда я распрощался с сектором
сопровождения и пошёл в разработку.

Так что в данном топике мне коробочные технологии не особо интересно обсуждать.
Разве что если я сам буду их кому-то парить в техподдержку.

А универсальное программное решение которое РОЖДАЕТСЯ просто как репликатор
может уже черз 20-30 спринтов стать совершенно другой системой.

Про JMS я в предыдущем топике написал вообще из другого интереса. Собственно плевать
на JMS. Можно Акторы. Можно Apache Storm. Лишь-бы была физическая среда где
есть виртуальная "труба" в сети и есть подписчики и издатели.

Кстати да. Это и был основной интерес. РАЗДАТЬ уведомления на множество Slave.
Но в данном топике я решил пока сделать только master-slave.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924435
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Dima T
И да, и нет.

Да, для словарей оно надо, т.к. там, как правило, используется короткий хэш (32 бита для x86 и 64 для x64), и в таблицу может собираться миллионы хэшей, как следствие высокая вероятность что будут коллизии, т.е. одинаковые хэши у разных записей. Недавно обсуждали. Тут формула для расчета вероятности 22051280


Но я ловил коллизию на 128-битном криптографическом хеше для хранилища файлов. Ситуация не критическая, но неприятная. Потрачено много часов на разбирательства, в сторону хеша не смотрели, ведь "вероятность бла-бла". Но могла бы быть и критическая.

У ружья на стене выстрелить тоже вероятность маленькая.

Хвост. Я тебя прошу.

Давай тему коллизий как-то вынесем из этого топика. Как инженер я вижу инженерное решение - поднять
разрядность хеша до SHA512 и как-то вообще отвязаться и отбиться от обсуждения этого здесь.

У нас уже был топик "дней рождений" и он хорошо коррелирует с этой высокой криптографией.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924436
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

если выражаться в терминах СУБД, то нельзя использовать хэш как первичный ключ, и ты это еще раз подтвердил найдя коллизию в 128 битном хэше. Но я это предвидел, мое предложение совсем в другом, перечитай мой пост 22076226
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924440
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Данный пункт - to be discussed.

Бесполезно. Дело не в транзакции, используемой репликатором, а в конкурентах. Одна незакоммиченная параллельная транзакция - и появляется изменение, не дошедшее до слейва. Самое неприятное - оно никогда до него не дойдёт, поскольку следующие сеансы репликации уже будут его игнорировать как старое. Смирись, это врождённый недостаток репликации на временных метках и главная причина почему она практически не используется.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924445
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
hVostt,

если выражаться в терминах СУБД, то нельзя использовать хэш как первичный ключ, и ты это еще раз подтвердил найдя коллизию в 128 битном хэше. Но я это предвидел, мое предложение совсем в другом, перечитай мой пост 22076226


Да я с этим не спорю :)
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924448
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитав требования выше, считаю, что задача сводится к переизобретению колеса бинарного Git.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924450
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Почитав требования выше, считаю, что задача сводится к переизобретению колеса бинарного Git.

Да я тоже думаю над этим. Никак не удается "присобачить" дерево хешей имени товарища Меркла.
Если спуститься на уровень datafiles/dbBlocks то оно заработает но это нарушает мое-же требование
по некоторой обобщённой БД.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924451
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
mayton
Данный пункт - to be discussed.

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

Давай не-транзакционные и прочие редиски пока отложим.
Я опишу чуть позже это отдельным пунктом ТЗ.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924456
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Если спуститься на уровень datafiles/dbBlocks то оно заработает но это нарушает мое-же требование
по некоторой обобщённой БД.


Да зачем спускаться, нужно обыкновенное преобразование в некий обобщённый формат. Туда и обратно.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924459
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
Если спуститься на уровень datafiles/dbBlocks то оно заработает но это нарушает мое-же требование
по некоторой обобщённой БД.


Да зачем спускаться, нужно обыкновенное преобразование в некий обобщённый формат. Туда и обратно.

В классическом дереве Меркла - если мы меняем 1 бит в блокчейне или в длинном файле - дерево фиксирует цепочку повреждённых
хешей вплоть до корня. Все остальные хеши которые не входят в цепочку остаются целыми.

Такая логика позволяет за минимум IOPS восстанить повреждённый фрагмент файла или чейна. Как rsync.

В таблице если происходит delete какой-то строки - то сдвигается нумерация строк в последовательности ORDER BY
{primary key group} и мы получаем повреждений почти 50% в среднем.

Я пробовал разные варианты группировки строк в блоки. По хешу от {primary key group}.
Но пока не могу обобщить эти требования в кучу чтобы они зашли в вышеперечисленные
requirements гладко и непротиворечиво.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924460
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моей схеме получается что хеш функция - зависит от количества строк в таблице.
Это очень сильно осложняет репликацию. Может выйти путаница. Когда master
уже работает с блоками строк по новой формуле. Slave - еще по старой.
Вобщем не собрать концов.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924461
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Побить на блоки, не?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924462
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виртуальные? Яж пишу про это выше.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924463
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

На блоки по рейнджам значений. Так, чтобы удаление, не сдвигало разбивку. Потом искать оптимальный размер блоков, или некую формулу.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924464
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
По хешу от {primary key group}.


Не по хешу, конечно же.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924465
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, хеш лучше заменить на контрольную сумму.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924467
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton,

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

Природа самих в ключе данных не дает мне возможности ничего предположить насчет оптимальности.

Ожидаю ваших предложений.

Вот одна табличка для примера. Здесь ключ - диапазон адресов.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
startIpNum,endIpNum,country,region,city,postalCode,latitude,longitude,dmaCode,areaCode
1.0.0.0,1.7.255.255,"AU","","","",-27.0000,133.0000,,
1.9.0.0,1.9.255.255,"MY","","","",2.5000,112.5000,,
1.10.10.0,1.10.10.255,"AU","","","",-27.0000,133.0000,,
1.11.0.0,1.11.255.255,"KR","","","",37.0000,127.5000,,
1.12.0.0,1.15.255.255,"CN","","","",35.0000,105.0000,,
1.16.0.0,1.19.255.255,"KR","","","",37.0000,127.5000,,
1.21.0.0,1.21.255.255,"JP","","","",36.0000,138.0000,,
1.22.0.0,1.22.255.255,"IN","","","",20.0000,77.0000,,
1.23.0.0,1.23.15.255,"IN","02","Hyderabad","",17.3753,78.4744,,



Вот - просто справочник стран.

Код: sql
1.
2.
3.
Short, Long, Desc
US, USA, United States 
AL, ALB, Albania



Я не говорю что такие будут. Просто как пища для размышлений.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924468
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

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

Возможность поддерживать натуральные и комплексные ключи добавляет разработчикам тех же ORM очень много головной боли. Настолько много, что глядишь в код, интерфейсы и понимаешь, что 60% сложности это поддержка подобных решений.

Или по-другому. Давайте посмотрим на задачу только в контексте суррогатного ключа. Хотя бы так она решается? Давайте по шагам.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924470
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вот одна табличка для примера. Здесь ключ - диапазон адресов.


Такие ключи подвержены необходимости поддерживать правило ON UPDATE.
Это увеличивает сложность на порядки, так как ключ -- больше никакой не ключ. Извините.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924473
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хвост. Мы не можем делать приложение-репликатор которое применимо только к одному
типу таблиц. Нужно как-то генерализировать весь зоопарк ключей. Натруальных и суррогатов.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924481
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Хвост. Мы не можем делать приложение-репликатор которое применимо только к одному
типу таблиц. Нужно как-то генерализировать весь зоопарк ключей. Натруальных и суррогатов.


За счёт чего вообще работает тот же Git?
За счёт того, что работает с текстовыми файлами, где у каждого файла есть уникальный путь.
А у каждого файла есть строки, которые расположены строго друг за другом.
И предположение, которое гласит, что в основном, любое изменение не нарушает общий порядок строк.
Именно поэтому в принципе возможно такое понятие, как diff.
Он описывает какие строки изменились, какие строки вставить после каких, а какие удалить.

Если перейти на язык алгебры, то набор данных должен быть

1. строго упорядочен
2. иметь ненатуральную идентификацию

Твоя постановка противоречит этому условию.
Хеши ничего не дают, не порядка, ни идентификации.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924482
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гит решает задачу отслеживания изменений в текстовых файлах.
Но какой ценой? И как. У меня не дошли руки до его метода
хранения но я подозреваю что это gzip-копия файла целиком.

(Двоичные ЕМНИП он хранит as is).
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924483
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Мы не можем делать приложение-репликатор которое применимо только к одному
типу таблиц.


Самое смешное, что твоё условие полностью, прям в край противоречит твоему же условию.
Потому что в таком случае, твоё приложение-репликатор будет написано под конкретную БД, конкретную схему и конкретный набор таблиц и их колонок. Любое изменение в БД ломает репликатор. Применить его где-то ещё -- невозможно.

Чтобы сделать обобщённое решение, должны быть определённые обобщённые условия.
Которых нет от слова совсем.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924484
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
У меня не дошли руки до его метода
хранения но я подозреваю что это gzip-копия файла целиком.

(Двоичные ЕМНИП он хранит as is).


Хранит в сжатом виде, у бинарников диффы не вычисляет.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924487
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Ожидаю ваших предложений.


1. Добавляем в каждую реплицируемую таблицу суррогатный ключ, специфичный Repl_ID
2. Добавляем в каждую реплицируемую таблицу отметку времени последнего изменения.

Если 2 невозможно, то задача усложняется.

Создаём таблицу для отслежнивания изменений такой структуры:

Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE Replica (
   TableName,
   Repl_ID,
   CRC,
   PRIMARY KEY (TableName, Repl_ID)
)



Рассматриваем вариант, когда добавление отметки времени последнего изменения невозможно.

Алгоритм простой до безобразия.
Репликатор перебирает все таблицы
Перебирает все строки каждой таблицы
Считает CRC от всех полей (кроме Repl_ID)

Теперь репликатор может легко выбрать новые, изменившиеся и удалённые строки.
И обновить табличку Replica.

Почему не хеш? Потому что хеш медленный и нафиг он тут не упал.
Он медленный.
Достаточно выбрать подходящую CRC функцию с хорошим распределением.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924488
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куда сложнее выглядит задача обеспечения каскадной целостности, так как дифф нужно применить в правильном порядке.

И да. Если идти от способа вычисления хеша от ключа, то задача -- не выполнимая. Потому что натуральные ключи могут меняться. Для репликатора изменение ключа, это удаление + создание. А на мастере это ON UPDATE CASCADE.

Репликатор тупо встанет раком со своими космическими алгоритмами.

Сложные решения -- плохо, уродливо и некрасиво. Простые решения -- хорошо, и красиво.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924503
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Вообще, хеш лучше заменить на контрольную сумму.

В чем разница? ИМХО это два разных термина для обозначения одного и того же.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924521
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Да я тоже думаю над этим. Никак не удается "присобачить" дерево хешей имени товарища Меркла.

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

Другое требование чтобы добавление было только в конец. В нашем случае если мы используем ORDER BY ID для сохранения исходной последовательности, то значение нового ключа должно быть больше всех старых. Если ключ не счетчик, например GUID или еще какой-то, то это правило нарушается. Вывод: Меркла тут не присобачить.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924524
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Куда сложнее выглядит задача обеспечения каскадной целостности, так как дифф нужно применить в правильном порядке.

И да. Если идти от способа вычисления хеша от ключа, то задача -- не выполнимая. Потому что натуральные ключи могут меняться. Для репликатора изменение ключа, это удаление + создание. А на мастере это ON UPDATE CASCADE.

Репликатор тупо встанет раком со своими космическими алгоритмами.

Сложные решения -- плохо, уродливо и некрасиво. Простые решения -- хорошо, и красиво.

Натуральные ключи это зло. Ключ должен быть абстрактным.

Давным-давно в одной проге в таблице накладных зачем то была сделана уникальной связка (номер, дата), не ключ, но почти, в один прекрасный день приходит бухгалтер и говорит что надо забить вторую накладную у уже имеющимися (номер, дата), что-то они накосячили, указали где-то неверный номер, те документы все уже подписаны и единственный выход - сделать две разные накладные с одинаковыми номерами от одной даты.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924526
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
Мы не можем делать приложение-репликатор которое применимо только к одному
типу таблиц.


Самое смешное, что твоё условие полностью, прям в край противоречит твоему же условию.
Потому что в таком случае, твоё приложение-репликатор будет написано под конкретную БД, конкретную схему и конкретный набор таблиц и их колонок. Любое изменение в БД ломает репликатор. Применить его где-то ещё -- невозможно.

Чтобы сделать обобщённое решение, должны быть определённые обобщённые условия.
Которых нет от слова совсем.

Хорошее замечание. Я опишу его как ещё один пункт.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924527
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton,

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

+1

Я бы сказал так: для таблиц с натуральными или составными ключами добавить числовое поле заполняемое счетчиком, и чтобы не устраивать коллизий в терминологии, назовем это поле "номер записи". Там где ключ изначально сделан счетчиком, там вместо "номера записи" использовать ключ.
Такое сделать многие СУБД позволят.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924528
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Куда сложнее выглядит задача обеспечения каскадной целостности, так как дифф нужно применить в правильном порядке.

И да. Если идти от способа вычисления хеша от ключа, то задача -- не выполнимая. Потому что натуральные ключи могут меняться. Для репликатора изменение ключа, это удаление + создание. А на мастере это ON UPDATE CASCADE.

Репликатор тупо встанет раком со своими космическими алгоритмами.

Сложные решения -- плохо, уродливо и некрасиво. Простые решения -- хорошо, и красиво.

Тоже хорошее замечание. Порядок обновления.

Я опишу его ещё пунктом.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924529
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я опишу его как ещё один пункт.

Еще момент из практики: при репликации для бэкапа есть ненужные данные, т.е. данные которые можно безболезненно терять, но эти данные интенсивно меняются и создают сильную нагрузку на репликатор. Например таблица с логом для логирования всех событий бизнес-логики, также бывают интенсивно меняющиеся поля в справочнике, например в справочнике пользователей может быть поле "дата последнего входа".
Для избежания излишней репликации для БД должен быть конфиг где указаны исключения в виде таблицы целиком или только поля таблицы.

И еще остается отдельный вопрос что делать при изменении структуры БД.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924531
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
Ожидаю ваших предложений.


Почему не хеш? Потому что хеш медленный и нафиг он тут не упал.
Он медленный.
Достаточно выбрать подходящую CRC функцию с хорошим распределением.

Для нашей задачи (в однопоточном варианте) узким местом будет IO подсистемы БД и Network.

Я не вижу смысла тратить время на поиски "хороших" или других распределений.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924534
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T


И еще остается отдельный вопрос что делать при изменении структуры БД.

Мы начали с простой утилиты. И хотелось бы сохранить определенную простоту use case и в дальнейшем.

Требования касающиеся изменений обьектов схемы (table columns) я опишу отдельным пунктом.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924538
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как быть с удалёнными строками?

Никак. Удалять не нужно. Сделай флаг deleted и всё.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924557
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
mayton
Как быть с удалёнными строками?

Никак. Удалять не нужно. Сделай флаг deleted и всё.

Как ты себе это представляешь? Логика которая работает с master удаляет строку?
Эта (основная) бизнес-логика нам недоступна. Мы ее не меняем.

Это конечно моя вина что я не описал и этот пункт. Опишу чуть позже.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924560
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Изменить его мы не можем.

Так надо с этого было начинать. А что с ним можно делать?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924567
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавляю еще дополнения к базовому ТЗ.

14) Репликатор не вносит изменений в логику основных приложений которые работают с master и slave.
Однако репликатор (по согласованию с db owner) может добавить дополнительные таблицы. Поля.
И триггеры для отслеживания INSERT/DELETE/UPDATE на целевых таблицах ( RDS ).

15) Репликатор обладает сведениями относительно зависимостей таблиц.
Зависимости описываются в конфигурационном файле.

replicator.conf
Код: sql
1.
2.
dept -> emp
emp -> sales



В данном примере описано что таблица emp - дочерняя по отношению к dept. И процесс репликации (sync)
должен учитывать направление от дочерних к родительским.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924572
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16) Репликатор имеет команду полной синхронизации (fullsync)

Код: sql
1.
$ replicator fullsync {...}



По согласованию с владельцем БД для поддержки плановых обновлений версии ПО master/slave
(добавление новых колонок) может потребоваться принудительное обновление 100% объема
реплицируемых справочников (replicated dictionaries set ( RDS )).

Логика расчета hash, lastUpdateTime и прочих служебных полей в этом случае исходит из
предположения что 100% datarows обновились и требуется перерасчет всего объема.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924576
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Опишу чуть позже.

Да, я пробежался по треду и не понял ситуацию. То изобретение git'а, то велик для синхронизации двух бд. Что есть вообще? Что может ваш чорный ящик и как вы с ним работаете? Как узнаете, что запись удалена? Надо пройти по всем, найти удаленные и передать? Не понятно.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924603
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Для нашей задачи (в однопоточном варианте) узким местом будет IO подсистемы БД и Network.

Я не вижу смысла тратить время на поиски "хороших" или других распределений.


IO всегда является узким местом, при его наличии. Не только в этой задаче, а в любой другой в принципе.
Насчет хеша, всё же согласиться не могу. У хеша другие задачи.
Ваша задача -- это именно CRC.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924604
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И триггеры для отслеживания INSERT/DELETE/UPDATE на целевых таблицах ( RDS ).


Дык если триггер можно добавить, то всё, задача решена like a charm.

О чём тогда говорить? :)
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924611
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
Для нашей задачи (в однопоточном варианте) узким местом будет IO подсистемы БД и Network.

Я не вижу смысла тратить время на поиски "хороших" или других распределений.


IO всегда является узким местом, при его наличии. Не только в этой задаче, а в любой другой в принципе.
Насчет хеша, всё же согласиться не могу. У хеша другие задачи.
Ваша задача -- это именно CRC.

Хвост. Я, идя тебе навстречу объявлю настроечный тип хеширования. Какой настроишь - тот и будет.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924613
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
И триггеры для отслеживания INSERT/DELETE/UPDATE на целевых таблицах ( RDS ).


Дык если триггер можно добавить, то всё, задача решена like a charm.

О чём тогда говорить? :)

Отлично. Но где реализация?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924616
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
mayton
Опишу чуть позже.

Да, я пробежался по треду и не понял ситуацию. То изобретение git'а, то велик для синхронизации двух бд. Что есть вообще? Что может ваш чорный ящик и как вы с ним работаете? Как узнаете, что запись удалена? Надо пройти по всем, найти удаленные и передать? Не понятно.

Если вы внимательно читали - я описал только ограничения и требования. Не было ни строчки по самому алгоритму.

Но я верю в вашу фантазию и в ваше умение синтезировать алгоритмы. Попробуйте.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924649
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Отлично. Но где реализация?


Создаём триггер на insert/update/delete, для каждой из таблиц или для всех (зависит от возможностей СУБД).
Триггер пишет в табличку Changes(Timestamp, TableName,Key,ChangeType), где ChangeType одно из значений C|U|D.

Отправляем обновления по Timestamp, фильтруя по времени последнего обновления. Старые записи по какому-то регламенту подчищаем.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924651
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Key это конкатенация значений ключа, допустим, через знак |.
Можно конечно и хеши, но нафига они тут нужны непонятно.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924653
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более того, хеш здесь не поможет, так как нам нужно находить записи для C|U из оригинальных таблиц, и там эти хеши вообще не упёрлись.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924660
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Насчет хеша, всё же согласиться не могу. У хеша другие задачи.
Ваша задача -- это именно CRC.

Хэш это альтернативное название для алгоритмов расчета контрольной суммы.
https://ru.wikipedia.org/wiki/Контрольная_сумма С точки зрения математики контрольная сумма является результатом хеш-функции , используемой для вычисления контрольного кода — небольшого количества бит внутри большого блока данных
И CRC это не контрольная сумма, а один из алгоритмов расчета контрольной суммы
https://ru.wikipedia.org/wiki/Циклический_избыточный_код Циклический избыточный код (англ. Cyclic redundancy check, CRC[1]) — алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных[2]. CRC является практическим приложением помехоустойчивого кодирования, основанным на определённых математических свойствах циклического кода.
В общем если хочешь называть хэш контрольной суммой и писать CRC, пусть будет так.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924687
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Но где реализация?

Алгоритм:
1. Получаем из приёмника ts1, время последней удачной репликации.
2. Получаем текущее время ts2 и сохраняем в файл.
3. Для каждой таблицы из списка реплицируемых таблиц выполняем select * where lastModified >= :ts1 и сохраняем результат в файл(ы).
4. Получаем список удалённых записей из таблицы, заполняемой триггерами и сохраняем в файл(ы).
5. Упаковываем все вышеперечисленные файлы и отправляем на приёмник.
6. Спокойно спим до следующего сеанса.

На приёмнике полученные файлы распаковываются и применяются, включая значение ts2, которое потом будет выдано как ts1.

Кодируется прямолинейно на любом языке, имеющем средства доступа к любой БД. Ява сойдёт.

PS: Список таблиц в пункте 3 лучше иметь предварительно отсортированным по зависимостям внешних ключей. Тогда на приёмнике не придётся использовать отложенные ограничения целостности.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924706
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton,

Key это конкатенация значений ключа, допустим, через знак |.
Можно конечно и хеши, но нафига они тут нужны непонятно.

Если таблица (table1) большая. От 1 млн строк и мы детектируем удалённые - то
нам надо чтобы 1 экземпляр приложения репликатор открыл два
курсора на master/slave и после merge принял решение об удалённых datarows.

Но я до последнего избегаю этого сценария, пытаясь соптимизировать networking.

Этот пункт важен и я его включал уже в SR.

Если вы считаете что хеши не нужны - ОК выбрасывайте. Но я их пока оставляю
как опцию.

Если они есть - хорошо. Нету - тоже сойдет.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924724
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

5. Упаковываем все вышеперечисленные файлы и отправляем на приёмник.

Пока мы еще не обсуждали нигде способы отправки. Да и нет такого протокола.
Есть две базы. Висят где-то в космосе. И есть 1 ваш процесс который поднят
либо "тут" либо "там".

Никакого другого протокола связи нет.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924735
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Никакого другого протокола связи нет.
Телепатическая доставка данных?
А разве "доставка любым протоколом" не подпадает под этот случай???
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924738
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
mayton
Никакого другого протокола связи нет.
Телепатическая доставка данных?
А разве "доставка любым протоколом" не подпадает под этот случай???

Дмитрий писал.

4. Получаем список удалённых записей из таблицы, заполняемой триггерами и сохраняем в файл(ы).
5. Упаковываем все вышеперечисленные файлы и отправляем на приёмник.

Это был ответ на предложение по отправке файлов. О файлах я еще не думал. Это - другой уровень репликации.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924792
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Кодируется прямолинейно на любом языке, имеющем средства доступа к любой БД. Ява сойдёт.


2 All!

Давайте - маленкий челлендж. Пускай это будет не требование но Secondary Goal этого топика.

Сделаем на языках:
- Rust
- Go


Я очькую только в части сопряжения с БД. Не знаю насколько хорошо Rust укомплектован дровами
к PG/ORA/MS/MySQL.

На обоих языках я написал аж ПреведМир так што я недалеко ушел в этом смысле от вас, коллеги.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924799
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, понаписали много, может чего пропустил, но не увидел ответа на вопрос: почему нельзя поднимать копию локально на мастере?

Мое решение на этом основано, Сибиряков почти тоже самое предлагает. Суть в том что локально на мастере держим предыдущую копию, считаем обновление, сохраняем его и далее раздаем слэйвам. С точки зрения трафика это самый экономный алгоритм, минимум ненужной и служебной инфы. Просто передал три таблички: это добавить, это поменять, это удалить. Даже Меркл сожрет больше ресурсов как вычислительных, так и трафика.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924807
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
В общем если хочешь называть хэш контрольной суммой и писать CRC, пусть будет так.


Имеется в виду криптографический хеш, ведь вы именно их обсуждали. Не какие-то другие, про какие сейчас говоришь, а именно криптографические.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924811
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Dima T
В общем если хочешь называть хэш контрольной суммой и писать CRC, пусть будет так.


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

Да, но других просто нет разрядностью выше 64 бит, можно свой велосипед изобрести, но зачем, если уже есть готовый с нужными свойствами. Чем криптографический хэш не подходит на роль контрольной суммы?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924814
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Если таблица (table1) большая. От 1 млн строк и мы детектируем удалённые - то
нам надо чтобы 1 экземпляр приложения репликатор открыл два
курсора на master/slave и после merge принял решение об удалённых datarows.


Нет. Понятное дело, я говорю про локальную таблицу, на мастере. На слейв ты передаёшь уже вычисленные данные. Собственно всё.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924817
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Чем криптографический хэш не подходит на роль контрольной суммы?


Медленный. Этого не видно на малых данных (при разработке и тестировании), видно на больших (продакшен).
Зачем фигнёй страдать, когда быстрых и качественных checksum алгоритмов вагон и тележка?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924819
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Суть в том что локально на мастере держим предыдущую копию


Суть любого решения к этому и сводится.
Там дальше детали.

Это либо триггер -- самый быстрый.
Либо сравнение со снепшотом и вычисление изменений -- долгий.

Но оба приводят к ожидаемому результату: посылка на слейв только дельты изменений.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924821
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Просто передал три таблички: это добавить, это поменять, это удалить.


Вообще и одной достаточно :)
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924827
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

ты то че повелся? реплика либо в системе уже предусмотрена, либо это детская игрушка
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924830
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Dima T
Чем криптографический хэш не подходит на роль контрольной суммы?


Медленный. Этого не видно на малых данных (при разработке и тестировании), видно на больших (продакшен).
Зачем фигнёй страдать, когда быстрых и качественных checksum алгоритмов вагон и тележка?

Ты все-таки меня не перечитал
Dima T
Можно SHA-1 взять, 160 бит, может даже лучше его, т.к. проц умеет его считать одной командой .

Думаю никакой твой "быстрый и качественный" тут рядом не окажется по производительности. То что встроено в железо быстрее на порядки программных аналогов. Как-то тестил AES встроенный и программный, разница более чем в 100 раз.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924831
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos
hVostt,

ты то че повелся? реплика либо в системе уже предусмотрена, либо это детская игрушка


Да я прост пытаюсь понять в чём состоит проблема.
Может не вижу чего-то.

Но пока не покидает ощущение, что ожидается хитровывернутое решение с переподвыподвертом.
Простые решения не найс :)
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924833
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Ты все-таки меня не перечитал
Dima T
Можно SHA-1 взять, 160 бит, может даже лучше его, т.к. проц умеет его считать одной командой .

Думаю никакой твой "быстрый и качественный" тут рядом не окажется по производительности. То что встроено в железо быстрее на порядки программных аналогов. Как-то тестил AES встроенный и программный, разница более чем в 100 раз.


Я хз откуда дровишки. Но вот бенчи:

https://github.com/Cyan4973/xxHash

Второе. Сталкивался с этим сам.

Можешь сам побенчить, может на твоём проце sha-1 считается в 1 такт, и мне придётся признать, что фигню сморозил :)
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924835
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как бы если решение нужно на коленке, и пофигу чё там и как, лишь бы шевелилось, можно что угодно взять, что под руку подвернётся (читай, есть в вашей стандартной библиотеке).

Но мы жы тут о высоком, не? :)
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924838
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton, понаписали много, может чего пропустил, но не увидел ответа на вопрос: почему нельзя поднимать копию локально на мастере?

Мое решение на этом основано, Сибиряков почти тоже самое предлагает. Суть в том что локально на мастере держим предыдущую копию, считаем обновление, сохраняем его и далее раздаем слэйвам. С точки зрения трафика это самый экономный алгоритм, минимум ненужной и служебной инфы. Просто передал три таблички: это добавить, это поменять, это удалить. Даже Меркл сожрет больше ресурсов как вычислительных, так и трафика.

Ты предлагаешь для каждой таблички из RDS создавать и хранить ее копию?
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924851
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Dima T
Ты все-таки меня не перечитал
пропущено...

Думаю никакой твой "быстрый и качественный" тут рядом не окажется по производительности. То что встроено в железо быстрее на порядки программных аналогов. Как-то тестил AES встроенный и программный, разница более чем в 100 раз.


Я хз откуда дровишки. Но вот бенчи:

https://github.com/Cyan4973/xxHash

Второе. Сталкивался с этим сам.

Можешь сам побенчить, может на твоём проце sha-1 считается в 1 такт, и мне придётся признать, что фигню сморозил :)

Бенчить пока не готов, но вот нестыковки
авторcompiled with Visual 2010 on a Windows Seven 32-bit box.
А в интеле оно появилось в 2013 году. Я так понимаю это следствие хайпа с майнингом.

Просто глянь как я удивлялся по поводу аппаратного AES 21847765 , может сам захочешь потестить аппаратный SHA
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924857
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не вижу много пользы от применения быстрых или очень-очень быстрых хеш функций в этой задаче.
Мой опыт общения с БД мне просто подсказывает что надо сконцетрировать своё внимание
на другом.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924866
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я не вижу много пользы от применения быстрых или очень-очень быстрых хеш функций в этой задаче.


Если с триггером, то да. Вообще хеши не нужны никакие. Триггер записывает факт создания/удаления/изменения по факту. Ничего ни с чем сравнивать не нужно.

Если без триггера, то нам нужны контрольные суммы всех строк вести. И сравнивать хеши всех строк со снепшотом этих хешей. Скорость расчёта контрольной суммы в данном случае очень-очень важна.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924887
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Dima T
mayton, понаписали много, может чего пропустил, но не увидел ответа на вопрос: почему нельзя поднимать копию локально на мастере?

Мое решение на этом основано, Сибиряков почти тоже самое предлагает. Суть в том что локально на мастере держим предыдущую копию, считаем обновление, сохраняем его и далее раздаем слэйвам. С точки зрения трафика это самый экономный алгоритм, минимум ненужной и служебной инфы. Просто передал три таблички: это добавить, это поменять, это удалить. Даже Меркл сожрет больше ресурсов как вычислительных, так и трафика.

Ты предлагаешь для каждой таблички из RDS создавать и хранить ее копию?

RDS это что? Мастер-база? Если да, то предлагаю именно это. И периодически считать разницу 22075921 и хранить разницу. Если таблички из кучи полей, то для экономии места есть смысл хранить не копию таблицы, а копию ключей и хэшей от неключевых полей.

Этот алгоритм на самый запущенный случай когда мы мастер базу можем только читать. Если мы может там поковырять чего-нибудь: поле добавить, триггер, индекс, то возможны решения проще и эффективнее.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924892
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Просто глянь как я удивлялся по поводу аппаратного AES 21847765 , может сам захочешь потестить аппаратный SHA

В принципе из AES можно соорудить 128-мибитный велосипед, там скорость шифрования 6 Гб/сек на i7-6700K
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924902
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
Я не вижу много пользы от применения быстрых или очень-очень быстрых хеш функций в этой задаче.


Если с триггером, то да. Вообще хеши не нужны никакие. Триггер записывает факт создания/удаления/изменения по факту. Ничего ни с чем сравнивать не нужно.

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

С триггером наподобие аудита последнего доступа к строке мы можем лишь отслеживать факт обновления строки.
Но не удаления.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924904
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
пропущено...

Ты предлагаешь для каждой таблички из RDS создавать и хранить ее копию?

RDS это что? Мастер-база? Если да, то предлагаю именно это. И периодически считать разницу 22075921 и хранить разницу. Если таблички из кучи полей, то для экономии места есть смысл хранить не копию таблицы, а копию ключей и хэшей от неключевых полей.

Этот алгоритм на самый запущенный случай когда мы мастер базу можем только читать. Если мы может там поковырять чего-нибудь: поле добавить, триггер, индекс, то возможны решения проще и эффективнее.

Я потихоньку ввожу терминологию. Чтоб не писать длинные слова. Посмотри выше я описал что это.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924905
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

Этот алгоритм на самый запущенный случай когда мы мастер базу можем только читать. Если мы может там поковырять чего-нибудь: поле добавить, триггер, индекс, то возможны решения проще и эффективнее.

Ну я ж писал

3) Репликатор может в делать upgrade схемы на Master или Slave как будет удобно кастомеру.

Пример:
Код: plaintext
1.
 $ replicator --command upgrade --dbMasterUrl "localhost:5432/postgres?user=username&pwd=pwd1234"



Может я как-то невнятно или неотчотливо. Так вы спрашивайте.

Вообще по ТЗ. Я разумеется не смогу вам запретить велосипедить как вы хотите. С мега-хешами и с временными
файлами на upload.

Но я сам лично буду стараться придерживаться тех пунктов которые описал.

А описал я их на основании своего опыта наблюдения за продуктовыми системами и на основании видимых
потребностей владельцев БД.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924906
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
hVostt
пропущено...


Если с триггером, то да. Вообще хеши не нужны никакие. Триггер записывает факт создания/удаления/изменения по факту. Ничего ни с чем сравнивать не нужно.

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

С триггером наподобие аудита последнего доступа к строке мы можем лишь отслеживать факт обновления строки.
Но не удаления.

Не, отслеживаем все, может разных СУБД по-разному, но если есть триггер, то отследишь все.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924914
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Может я как-то невнятно или неотчотливо. Так вы спрашивайте.

Спрашиваю: триггеры можно?

Триггеры решают проблему без всяких извратов с хэшами и прочего оверхеда, уже предлагал 22075918 , пролистал топик, ты просто не ответил, я решил что нельзя, а надо было тупо переспросить (((
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924917
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
Может я как-то невнятно или неотчотливо. Так вы спрашивайте.

Спрашиваю: триггеры можно?

Триггеры решают проблему без всяких извратов с хэшами и прочего оверхеда, уже предлагал 22075918 , пролистал топик, ты просто не ответил, я решил что нельзя, а надо было тупо переспросить (((

Отвечаю - можно.

Делай триггеры. Но не забудь про откат и автономные транзакции.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924920
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Делай триггеры. Но не забудь про откат и автономные транзакции.

Откат откатит все включая что наделал триггер. С автономными транзакциями не сталкивался, надо почитать.
...
Рейтинг: 0 / 0
Оффлайн-тяпничная репликация
    #39924929
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перечитал топик, диалоги слепых с глухими, и я в том числе.

mayton, давай начнем сначала, собери в кучку требования и открой новый топик, тема интересная, но тут она просто потеряется.

Топик закрываю.
...
Рейтинг: 0 / 0
151 сообщений из 151, показаны все 7 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Оффлайн-тяпничная репликация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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