Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Меня не длина хеша беспокоит. Помнишь в радужных топиках были ссылки на Дерево Меркла https://ru.wikipedia.org/wiki/Дерево_хешей Но оно пригодно для тех кейсов когда мы последовательно что-то пишем в двоичный файл. Или (возможно) модифицируем его фрагмент. Но при этом у нас нет вставки или удаления 1 байта из середины файла. Дерево помогло-бы идеально синкать 2 двоичных файла на дистанции и в условиях слабого сетевого канала. Я не знаю как работает rsync но возможно он использует эти принципы. Но в нашем кейсе с табличкой delete/insert в мастер слегка ломает этот гладкий алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 12:43 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
В неком гипотетическом сценарии можно было-бы представлять Master/Slave БД как 2 CSV-файла. Тогда в топике была-бы более понятна моя мысль. И git/svn как двигатель механики сравнения. Но я хотел просто не выходить в плоскость файлов. Всё так БД-первична в данном ТЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 12:47 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
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 получения изменений по локальной копии ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 13:25 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton В неком гипотетическом сценарии можно было-бы представлять Master/Slave БД как 2 CSV-файла. Еще есть diff , можно им локально получать разницу и ее раздавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 13:26 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Dima T insert не мешает, он в конец дописывается, а вот delete мешает, это сдвиг всего что после удаляемого. Только я не вижу смысла это использовать тут. Сам же говоришь база посторонняя и дерево тебе каждый раз с нуля придется строить. Чем тебе не понравился мой вариант 22075934 получения изменений по локальной копии ? Если ты помнишь. В базах данных на уровне storage нет понятия порядок записей. Они пишутся как heap по принципу следующих свободных блоков (4к-8к). И нет никакого прогноза на положение строки без ORDER BY. Поэтому при выборке мы обязаны будем указывать ордеринг по первичному ключу. Код: sql 1. Для сохранения стабильности следования строк. Поэтому INSERT/DELETE меняют логический порядок строк в результирующем курсоре. Таблицы без PK или UK меня не интересуют в данном топике. Они вообще выпадают из области обсуждения и к ним сложно применять реляционную алгебру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 13:48 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Dima T mayton В неком гипотетическом сценарии можно было-бы представлять Master/Slave БД как 2 CSV-файла. Еще есть diff , можно им локально получать разницу и ее раздавать. Сомневаюсь в эффективности работы diff. Кроме того если гипотетически предположить что мы делаем дифферес между локальным диском и диском удалённым (nfs-протокол) Код: sql 1. То сетевой протокол будет генерировать объем трафика соизмеримый с длиной fuckenSlave файла. А я - всячески избегаю этого. Грубо говоря я пытаюсь уйти от тупого создания клона таблицы или csv файла на slave. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 13:51 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton От зануды Журнал транзакций может появится только в DBMS в которых эти транзакции есть. Берем вариативную DBMS о которой нифига незвестно. Денег нет. Репликации нет. Стоит задача 1 раз в сутки выровнять справочники. (Дополнение к ТЗ). Неужели никто из вас в практике такую задачу не встречал?? через скрипт: 1.считал id справочников в память 2.удалил на всех БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 14:30 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
В какую память? На каком хосте? Это важно. Я так думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 14:34 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Поэтому INSERT/DELETE меняют логический порядок строк в результирующем курсоре. Это сугубо всё равно пока первичный ключ стабилен и уникален. Из всего потока сознания в этом топике, вариант Dima T - единственный работоспособный пока БД рассматривается как чёрный ящик, не поддающийся изменению. "Это я тебе, голуба, говорю как краевед." PS: Минимизация траффика достигается включением в него только реально изменённых полей и упаковкой пакета данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 14:52 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
И таки в моём случае любой код будет коробочным продуктом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 14:54 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Дорогой краевед. PK это не всегда sequence. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 15:14 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton В какую память? На каком хосте? Это важно. Я так думаю. не важно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 15:15 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton PK это не всегда sequence. Сугубо пофиг пока они уникальные и сравниваемые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 15:26 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Разъясни глыбше что там с памятью. P.S. есть подозрение что финский жулик не умеет делать хранение diff внутри blob objects git. Надо сравнить svn/git. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 15:33 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
чё там разъяснять то? у тебя 2 бд на двух хостах делаешь на одной удаление - кидаешь на другую строку "1,2,3,4" - список удалённых делаешь на другой удаление - забираешь с неё такую строку и кидаешь в локальную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 16:04 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Dima T insert не мешает, он в конец дописывается, а вот delete мешает, это сдвиг всего что после удаляемого. Только я не вижу смысла это использовать тут. Сам же говоришь база посторонняя и дерево тебе каждый раз с нуля придется строить. Чем тебе не понравился мой вариант 22075934 получения изменений по локальной копии ? Если ты помнишь. В базах данных на уровне storage нет понятия порядок записей. Они пишутся как heap по принципу следующих свободных блоков (4к-8к). И нет никакого прогноза на положение строки без ORDER BY. Поэтому при выборке мы обязаны будем указывать ордеринг по первичному ключу. Код: sql 1. Для сохранения стабильности следования строк. Поэтому INSERT/DELETE меняют логический порядок строк в результирующем курсоре. Таблицы без PK или UK меня не интересуют в данном топике. Они вообще выпадают из области обсуждения и к ним сложно применять реляционную алгебру. Да, надо будет ORDER BY ID, т.е. сортировка по первичному ключу, я так и предлагал 22075921 . Чем тебе это не нравится? По ID всегда есть индекс, т.е. получение записей в нужном порядке сервер не нагрузит, в MSSQL по дефолту кластерный индекс по ID, т.е. записи физически упорядочены по ID. И без разницы в каком месте появится/исчезнет запись, суть в том что из обеих баз будет идти чтение в одном и том же порядке. Может ты не понял мысль, пример ниже: Параллельная обработка "select * from MyTable order by id" из оригинала и вчерашней копии ID Хэш оригиналIDХэш копииСостояние11231123Не менялась2345Удалена36783789Изменена4567Добавлена Далее все записи с изменившимся состоянием пишешь в файлик, и раздаешь его слэйвам. В файле только изменения, по сути почти журнал транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 16:14 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Сомневаюсь в эффективности работы diff. Я тоже, но ты же сам написал mayton В неком гипотетическом сценарии можно было-бы представлять Master/Slave БД как 2 CSV-файла . для CSV-файлов diff вполне подойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 16:17 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Меня не длина хеша беспокоит. Помнишь в радужных топиках были ссылки на Дерево Меркла https://ru.wikipedia.org/wiki/Дерево_хешей ... Но в нашем кейсе с табличкой delete/insert в мастер слегка ломает этот гладкий алгоритм. При выполнении ограничений: 1. ID это счетчик 2. delete происходит редко, т.е. дырок в последовательности ID немного, т.е. нет такого 1, 2, 3, 100500, 100501, ... Т.е. имеем обычный справочник набиваемый руками. В этом случае удаленные записи можно считать как записи с каким-то конкретным хэшем, например 0, тогда никаких смещений записей не будет, но повторюсь, при больших "дырах" будут кучи нулей в дереве. PS Этот пост и два выше - это три разных независимых направления, просьба не связывать их меж собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 16:24 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Dima T Да, надо будет ORDER BY ID, т.е. сортировка по первичному ключу, я так и предлагал 22075921 . Чем тебе это не нравится? По ID всегда есть индекс, т.е. получение записей в нужном порядке сервер не нагрузит, в MSSQL по дефолту кластерный индекс по ID, т.е. записи физически упорядочены по ID. И без разницы в каком месте появится/исчезнет запись, суть в том что из обеих баз будет идти чтение в одном и том же порядке. Может ты не понял мысль, пример ниже: Параллельная обработка "select * from MyTable order by id" из оригинала и вчерашней копии ID Хэш оригиналIDХэш копииСостояние11231123Не менялась2345Удалена36783789Изменена4567Добавлена Далее все записи с изменившимся состоянием пишешь в файлик, и раздаешь его слэйвам. В файле только изменения, по сути почти журнал транзакций. Насколько я понял ты предполагаешь как в сортировке слиянием открыть 2 курсора и читать данные из двух баз одновременно. Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 17:51 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Насколько я понял ты предполагаешь как в сортировке слиянием открыть 2 курсора и читать данные из двух баз одновременно. Верно? Верно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 17:59 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Dima T mayton Насколько я понял ты предполагаешь как в сортировке слиянием открыть 2 курсора и читать данные из двух баз одновременно. Верно? Верно Но в этом случае ты вычитаешь полный трафик с обоих БД. И где-бы не стояло твое приложение физически. На master или на slave - ты фактически пересоздашь таблицу заново. А это я и так могу. Нужен алгоритм которй делает diff с минимальным сетевым оверхедом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 18:54 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Но в этом случае ты вычитаешь полный трафик с обоих БД. Нет, поскольку копия слейва лежит локально на мастере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 19:10 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov mayton Но в этом случае ты вычитаешь полный трафик с обоих БД. Нет, поскольку копия слейва лежит локально на мастере. Дороговато будет держать по 2 копии каждой таблички. Поищите более экономную структуру данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 19:23 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
mayton Dimitry Sibiryakov пропущено... Нет, поскольку копия слейва лежит локально на мастере. Дороговато будет держать по 2 копии каждой таблички. Поищите более экономную структуру данных. Копия локальная. И это не полная копия, а только (id, hash). PS Что это за справочники такие что держать их копии дороговато? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 19:46 |
|
||
|
Оффлайн-тяпничная репликация
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov mayton Но в этом случае ты вычитаешь полный трафик с обоих БД. Нет, поскольку копия слейва лежит локально на мастере. Верно, по этой копии расчет изменений и по сети рассылка только изменений PS Можно еще заархивировать, например в zip ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2020, 19:48 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39924198&tid=1339829]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 275ms |
| total: | 534ms |

| 0 / 0 |
