powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Оффлайн-тяпничная репликация
25 сообщений из 151, страница 4 из 7
Оффлайн-тяпничная репликация
    #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
25 сообщений из 151, страница 4 из 7
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Оффлайн-тяпничная репликация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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