Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
hVostt Почитав требования выше, считаю, что задача сводится к переизобретению колеса бинарного Git. Да я тоже думаю над этим. Никак не удается "присобачить" дерево хешей имени товарища Меркла. Если спуститься на уровень datafiles/dbBlocks то оно заработает но это нарушает мое-же требование по некоторой обобщённой БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2020, 23:01 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov mayton Данный пункт - to be discussed. Бесполезно. Дело не в транзакции, используемой репликатором, а в конкурентах. Одна незакоммиченная параллельная транзакция - и появляется изменение, не дошедшее до слейва. Самое неприятное - оно никогда до него не дойдёт, поскольку следующие сеансы репликации уже будут его игнорировать как старое. Смирись, это врождённый недостаток репликации на временных метках и главная причина почему она практически не используется. Давай не-транзакционные и прочие редиски пока отложим. Я опишу чуть позже это отдельным пунктом ТЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2020, 23:03 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Если спуститься на уровень datafiles/dbBlocks то оно заработает но это нарушает мое-же требование по некоторой обобщённой БД. Да зачем спускаться, нужно обыкновенное преобразование в некий обобщённый формат. Туда и обратно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2020, 23:45 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
hVostt mayton Если спуститься на уровень datafiles/dbBlocks то оно заработает но это нарушает мое-же требование по некоторой обобщённой БД. Да зачем спускаться, нужно обыкновенное преобразование в некий обобщённый формат. Туда и обратно. В классическом дереве Меркла - если мы меняем 1 бит в блокчейне или в длинном файле - дерево фиксирует цепочку повреждённых хешей вплоть до корня. Все остальные хеши которые не входят в цепочку остаются целыми. Такая логика позволяет за минимум IOPS восстанить повреждённый фрагмент файла или чейна. Как rsync. В таблице если происходит delete какой-то строки - то сдвигается нумерация строк в последовательности ORDER BY {primary key group} и мы получаем повреждений почти 50% в среднем. Я пробовал разные варианты группировки строк в блоки. По хешу от {primary key group}. Но пока не могу обобщить эти требования в кучу чтобы они зашли в вышеперечисленные requirements гладко и непротиворечиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2020, 23:58 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
В моей схеме получается что хеш функция - зависит от количества строк в таблице. Это очень сильно осложняет репликацию. Может выйти путаница. Когда master уже работает с блоками строк по новой формуле. Slave - еще по старой. Вобщем не собрать концов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:01 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton, Побить на блоки, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:25 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Виртуальные? Яж пишу про это выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:26 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton, На блоки по рейнджам значений. Так, чтобы удаление, не сдвигало разбивку. Потом искать оптимальный размер блоков, или некую формулу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:27 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton По хешу от {primary key group}. Не по хешу, конечно же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:28 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Вообще, хеш лучше заменить на контрольную сумму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:29 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
hVostt mayton, На блоки по рейнджам значений. Так, чтобы удаление, не сдвигало разбивку. Потом искать оптимальный размер блоков, или некую формулу. Природа самих в ключе данных не дает мне возможности ничего предположить насчет оптимальности. Ожидаю ваших предложений. Вот одна табличка для примера. Здесь ключ - диапазон адресов. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вот - просто справочник стран. Код: sql 1. 2. 3. Я не говорю что такие будут. Просто как пища для размышлений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:38 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton, Ну если согласно условиям задачи, можно добавить колонку. Значит стоит добавить суррогатный порядковый ключ. Возможность поддерживать натуральные и комплексные ключи добавляет разработчикам тех же ORM очень много головной боли. Настолько много, что глядишь в код, интерфейсы и понимаешь, что 60% сложности это поддержка подобных решений. Или по-другому. Давайте посмотрим на задачу только в контексте суррогатного ключа. Хотя бы так она решается? Давайте по шагам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:43 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Вот одна табличка для примера. Здесь ключ - диапазон адресов. Такие ключи подвержены необходимости поддерживать правило ON UPDATE. Это увеличивает сложность на порядки, так как ключ -- больше никакой не ключ. Извините. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:46 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Хвост. Мы не можем делать приложение-репликатор которое применимо только к одному типу таблиц. Нужно как-то генерализировать весь зоопарк ключей. Натруальных и суррогатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 00:52 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Хвост. Мы не можем делать приложение-репликатор которое применимо только к одному типу таблиц. Нужно как-то генерализировать весь зоопарк ключей. Натруальных и суррогатов. За счёт чего вообще работает тот же Git? За счёт того, что работает с текстовыми файлами, где у каждого файла есть уникальный путь. А у каждого файла есть строки, которые расположены строго друг за другом. И предположение, которое гласит, что в основном, любое изменение не нарушает общий порядок строк. Именно поэтому в принципе возможно такое понятие, как diff. Он описывает какие строки изменились, какие строки вставить после каких, а какие удалить. Если перейти на язык алгебры, то набор данных должен быть 1. строго упорядочен 2. иметь ненатуральную идентификацию Твоя постановка противоречит этому условию. Хеши ничего не дают, не порядка, ни идентификации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 01:04 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Гит решает задачу отслеживания изменений в текстовых файлах. Но какой ценой? И как. У меня не дошли руки до его метода хранения но я подозреваю что это gzip-копия файла целиком. (Двоичные ЕМНИП он хранит as is). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 01:08 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Мы не можем делать приложение-репликатор которое применимо только к одному типу таблиц. Самое смешное, что твоё условие полностью, прям в край противоречит твоему же условию. Потому что в таком случае, твоё приложение-репликатор будет написано под конкретную БД, конкретную схему и конкретный набор таблиц и их колонок. Любое изменение в БД ломает репликатор. Применить его где-то ещё -- невозможно. Чтобы сделать обобщённое решение, должны быть определённые обобщённые условия. Которых нет от слова совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 01:09 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton У меня не дошли руки до его метода хранения но я подозреваю что это gzip-копия файла целиком. (Двоичные ЕМНИП он хранит as is). Хранит в сжатом виде, у бинарников диффы не вычисляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 01:10 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Ожидаю ваших предложений. 1. Добавляем в каждую реплицируемую таблицу суррогатный ключ, специфичный Repl_ID 2. Добавляем в каждую реплицируемую таблицу отметку времени последнего изменения. Если 2 невозможно, то задача усложняется. Создаём таблицу для отслежнивания изменений такой структуры: Код: sql 1. 2. 3. 4. 5. 6. Рассматриваем вариант, когда добавление отметки времени последнего изменения невозможно. Алгоритм простой до безобразия. Репликатор перебирает все таблицы Перебирает все строки каждой таблицы Считает CRC от всех полей (кроме Repl_ID) Теперь репликатор может легко выбрать новые, изменившиеся и удалённые строки. И обновить табличку Replica. Почему не хеш? Потому что хеш медленный и нафиг он тут не упал. Он медленный. Достаточно выбрать подходящую CRC функцию с хорошим распределением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 01:22 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Куда сложнее выглядит задача обеспечения каскадной целостности, так как дифф нужно применить в правильном порядке. И да. Если идти от способа вычисления хеша от ключа, то задача -- не выполнимая. Потому что натуральные ключи могут меняться. Для репликатора изменение ключа, это удаление + создание. А на мастере это ON UPDATE CASCADE. Репликатор тупо встанет раком со своими космическими алгоритмами. Сложные решения -- плохо, уродливо и некрасиво. Простые решения -- хорошо, и красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 01:40 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
hVostt Вообще, хеш лучше заменить на контрольную сумму. В чем разница? ИМХО это два разных термина для обозначения одного и того же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 06:24 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Да я тоже думаю над этим. Никак не удается "присобачить" дерево хешей имени товарища Меркла. Я поразмышлял на эту тему - дерево хэшей можно сделать только с абстрактными ключами сгенеренными счетчиками. Для удаленных ключей хэш какая-то константа, например 0. Другое требование чтобы добавление было только в конец. В нашем случае если мы используем ORDER BY ID для сохранения исходной последовательности, то значение нового ключа должно быть больше всех старых. Если ключ не счетчик, например GUID или еще какой-то, то это правило нарушается. Вывод: Меркла тут не присобачить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 08:27 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
hVostt Куда сложнее выглядит задача обеспечения каскадной целостности, так как дифф нужно применить в правильном порядке. И да. Если идти от способа вычисления хеша от ключа, то задача -- не выполнимая. Потому что натуральные ключи могут меняться. Для репликатора изменение ключа, это удаление + создание. А на мастере это ON UPDATE CASCADE. Репликатор тупо встанет раком со своими космическими алгоритмами. Сложные решения -- плохо, уродливо и некрасиво. Простые решения -- хорошо, и красиво. Натуральные ключи это зло. Ключ должен быть абстрактным. Давным-давно в одной проге в таблице накладных зачем то была сделана уникальной связка (номер, дата), не ключ, но почти, в один прекрасный день приходит бухгалтер и говорит что надо забить вторую накладную у уже имеющимися (номер, дата), что-то они накосячили, указали где-то неверный номер, те документы все уже подписаны и единственный выход - сделать две разные накладные с одинаковыми номерами от одной даты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 08:37 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
hVostt mayton Мы не можем делать приложение-репликатор которое применимо только к одному типу таблиц. Самое смешное, что твоё условие полностью, прям в край противоречит твоему же условию. Потому что в таком случае, твоё приложение-репликатор будет написано под конкретную БД, конкретную схему и конкретный набор таблиц и их колонок. Любое изменение в БД ломает репликатор. Применить его где-то ещё -- невозможно. Чтобы сделать обобщённое решение, должны быть определённые обобщённые условия. Которых нет от слова совсем. Хорошее замечание. Я опишу его как ещё один пункт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 08:59 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
hVostt mayton, Ну если согласно условиям задачи, можно добавить колонку. Значит стоит добавить суррогатный порядковый ключ. +1 Я бы сказал так: для таблиц с натуральными или составными ключами добавить числовое поле заполняемое счетчиком, и чтобы не устраивать коллизий в терминологии, назовем это поле "номер записи". Там где ключ изначально сделан счетчиком, там вместо "номера записи" использовать ключ. Такое сделать многие СУБД позволят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 08:59 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39924450&tid=1339829]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 277ms |

| 0 / 0 |
