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


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