The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (PostgreSQL)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Синхронизация содержимого таблицы для PostgreSQL 9.1, xintrea (ok), 04-Мрт-20, (0) [смотреть все] +1

Сообщения [Сортировка по времени | RSS]


1. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Аноним (1), 04-Мрт-20, 18:44 
> Сейчас я раздумываю, с помощью каких инструментов проще всего решить эту задачу.

Проще (и надежнее) - штатными средствами постгреса. Но будет только православный master-slave.

Вы ТОЧНО хотите master-master?
Ооно вам ДЕЙСТВИТЕЛЬНО надо?
Тогда - только на уровне логической репликации. И неважно, сами вы напишете скрипты синхронизации или воспользуетесь каким-то готовым решением (да, их есть, нет, я их на память не помню, но гугль знает все) - это в любом случае будет уродство из говна и палок, криво работающее и то и дело падающее.

Ответить | Правка | Наверх | Cообщить модератору

2. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от xintreaMailRu (?), 04-Мрт-20, 18:55 
> или воспользуетесь каким-то готовым решением (да, их есть, нет,
> я их на память не помню,

Вопрос был именно в этом.


> но гугль знает все) -

Ничего работающего и подходящего под мои условия я не нашел.


> это в любом случае будет уродство из говна и палок, криво
> работающее и то и дело падающее.

Странно, задача ведь самая обычная, неужели до сих пор нет проверенных временем решений?

Ответить | Правка | Наверх | Cообщить модератору

3. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Pahanivo (ok), 04-Мрт-20, 19:51 
> Странно, задача ведь самая обычная, неужели до сих пор нет проверенных временем
> решений?

не совсем понятно, вернее совсем непонятно как в этой "обычной" задаче быть с "PRIMARY KEY id" например ...

Ответить | Правка | Наверх | Cообщить модератору

4. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от abi (?), 05-Мрт-20, 00:02 
> Странно, задача ведь самая обычная, неужели до сих пор нет проверенных временем
> решений?

Задача обычная, но требует небольшого планирования. Например, как решать конфликты по уникальным полям.


Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

10. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от xintrea (ok), 05-Мрт-20, 09:17 
> Задача обычная, но требует небольшого планирования. Например, как решать конфликты по уникальным
> полям.

А никаких конфликтов нет. Идентификаторы из поля с id могут пересекаться. Это служебное поле для первичной сортировки на одном инстансе. Каждая запись однозначно определяется через UUID, и это значение как раз уникально. Итоговая сортировка объединенных данных должна идти по времени+UUID.

Ответить | Правка | Наверх | Cообщить модератору

8. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Аноним (8), 05-Мрт-20, 07:16 
> Ничего работающего и подходящего под мои условия я не нашел.

Ищите отсюда - https://wiki.postgresql.org/wiki/Multimaster

> Странно, задача ведь самая обычная, неужели до сих пор нет проверенных временем
> решений?

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

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

11. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от xintrea (ok), 05-Мрт-20, 09:19 
> Ну да, обычнейшая банальнейшая задача - обеспечить в автоматическом режиме непротиворечивость
> данных, одновременно изменяемых из нескольких источников. На Нобелевку тянет.

Я же в топике сказал: "Содержимое записей не меняется". Это несколько меняет дело, не так ли?

Ответить | Правка | Наверх | Cообщить модератору

12. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Аноним (8), 05-Мрт-20, 09:29 
> Я же в топике сказал: "Содержимое записей не меняется". Это несколько меняет
> дело, не так ли?

Зачем тогда эти экзерсисы с мультимастером?
Нарисуйте лучше обвязку, которая будет делать автопереключение slave-master в зависимости от состояния вашей сети при отвале текущего мастера.

Ответить | Правка | Наверх | Cообщить модератору

13. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от xintrea (ok), 05-Мрт-20, 09:50 
> Нарисуйте лучше обвязку, которая будет делать автопереключение slave-master в зависимости
> от состояния вашей сети при отвале текущего мастера.

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

Ответить | Правка | Наверх | Cообщить модератору

14. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Аноним (8), 05-Мрт-20, 10:01 
> Значит, на какое-то время в сети появятся два мастера. Один - в
> отвалившейся части сети, второй - в оставшейся части. Когда сеть обратно
> соберется, возникнет вопрос как засинхрить данные у этих двух мастеров. Кто
> из них должен стать главным?

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

Ответить | Правка | Наверх | Cообщить модератору

15. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Аноним (8), 05-Мрт-20, 10:12 
>> Значит, на какое-то время в сети появятся два мастера. Один - в
>> отвалившейся части сети, второй - в оставшейся части. Когда сеть обратно
>> соберется, возникнет вопрос как засинхрить данные у этих двух мастеров. Кто
>> из них должен стать главным?

И вообще - если записи у вас "не меняются", то ответ - "а какая разница, кто?"

Ответить | Правка | Наверх | Cообщить модератору

16. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от xintrea (ok), 05-Мрт-20, 10:51 
> И вообще - если записи у вас "не меняются", то ответ -
> "а какая разница, кто?"

Видимо, я неправильно понимаю механизм репликации master-slave. Вы хотите сказать, что при такой репликации и master заливает на slave новые данные, и slave заливает на master новые данные?

Ответить | Правка | Наверх | Cообщить модератору

17. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от ыы (?), 05-Мрт-20, 12:20 
>> И вообще - если записи у вас "не меняются", то ответ -
>> "а какая разница, кто?"
> Видимо, я неправильно понимаю механизм репликации master-slave. Вы хотите сказать, что
> при такой репликации и master заливает на slave новые данные, и
> slave заливает на master новые данные?

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

Ответить | Правка | Наверх | Cообщить модератору

18. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от ыы (?), 05-Мрт-20, 12:28 
>>> И вообще - если записи у вас "не меняются", то ответ -
>>> "а какая разница, кто?"
>> Видимо, я неправильно понимаю механизм репликации master-slave. Вы хотите сказать, что
>> при такой репликации и master заливает на slave новые данные, и
>> slave заливает на master новые данные?
> Он хочет сказать что при ваших требованиях вы можете назначать мастер случайным
> образом.
> выбираете случайным образом мастер, делаете сравнение, закачиваете на этот мастер скриптом
> недостающие данные, и он раздает их всем остальным.

а еще забавные условия с неважно какой скоростью репликации.

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

Ответить | Правка | Наверх | Cообщить модератору

20. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от xintrea (ok), 05-Мрт-20, 12:46 
> Он хочет сказать что при ваших требованиях вы можете назначать мастер случайным
> образом.
> выбираете случайным образом мастер, делаете сравнение, закачиваете на этот мастер скриптом
> недостающие данные, и он раздает их всем состальным.

Сеть разделилась. Появилось два мастера. Сеть восстановилась. Выбрали случайно мастером хост1. Этот мастер будет закачивать на хост2 (второй бывший мастер) свои данные. А как хост2 будет закачивать на хост1 свои данные, которые он успел накопить, когда сеть была разделена?

Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

23. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Аноним (8), 05-Мрт-20, 12:55 
>> Он хочет сказать что при ваших требованиях вы можете назначать мастер случайным
>> образом.
>> выбираете случайным образом мастер, делаете сравнение, закачиваете на этот мастер скриптом
>> недостающие данные, и он раздает их всем состальным.
> Сеть разделилась. Появилось два мастера.

Два мастера просто так не появятся, пока вы руками (скриптом) не сделаете promote одному из slave. А перед этим нужно будет головой или скриптом принять решение - либо если промотим новый мастер, значит, старый нужно тормознуть. Либо ничего не трогать, ждать пока сеть восстановится.


Ответить | Правка | Наверх | Cообщить модератору

22. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от xintrea (ok), 05-Мрт-20, 12:50 
> выбираете случайным образом мастер, делаете сравнение

Вот тут поподробнее. Как сделать равнение? Между чем и чем? Насколько это будет затратно при сотнях тысяч записей?


Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

24. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Аноним (8), 05-Мрт-20, 13:01 
>> выбираете случайным образом мастер, делаете сравнение
> Вот тут поподробнее. Как сделать равнение?

ЕСЛИ SERVER1.TABLE1.FIELD1 <> SERVER2.TABLE1.FIELD1 ... оставляем либо запись с SERVER1 либо с SERVER2 согласно некоему критерию, например, наиболее позднюю по времени, или наиболее длинную по байтам, или на усмотрение человека-оператора

> Между чем и чем?

Между данными с мастером и другими серверами

> Насколько это
> будет затратно при сотнях тысяч записей?

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


Ответить | Правка | Наверх | Cообщить модератору

26. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от ыы (?), 05-Мрт-20, 14:01 
>> выбираете случайным образом мастер, делаете сравнение
> Вот тут поподробнее. Как сделать равнение? Между чем и чем?

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

ну сравнивать очевидно по UUID+таймстамп

> Насколько это  будет затратно при сотнях тысяч записей?

секунды надо полагать...

Ответить | Правка | К родителю #22 | Наверх | Cообщить модератору

27. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от ыы (?), 05-Мрт-20, 14:04 
>>> выбираете случайным образом мастер, делаете сравнение
>> Вот тут поподробнее. Как сделать равнение? Между чем и чем?
> между сервером который приняли за мастер и собой который слэйв.
> ну сравнивать очевидно по UUID+таймстамп
>> Насколько это  будет затратно при сотнях тысяч записей?
> секунды надо полагать...

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

Ответить | Правка | Наверх | Cообщить модератору

29. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от xintrea (ok), 05-Мрт-20, 15:41 
>>> Насколько это  будет затратно при сотнях тысяч записей?
>> секунды надо полагать...
> сравнение надо делать на тех серверах которые слэйвы.... потом обнаруженную разницу -
> залить на мастер - скриптом. и остальные слэйвы уже получат с
> мастера все недостающие данные

Сравнение реально сделать SQL-запросом? Или надо делать SELECT всех записей чужих и своих, скриптом сравнивать, и скрпитом же заливать?

Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

19. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от ыы (?), 05-Мрт-20, 12:34 
>> Значит, на какое-то время в сети появятся два мастера. Один - в
>> отвалившейся части сети, второй - в оставшейся части. Когда сеть обратно
>> соберется, возникнет вопрос как засинхрить данные у этих двух мастеров. Кто
>> из них должен стать главным?
> Я уже сказал - решить подобную задачу без участия человека - это
> Нобелевка. Дерзайте.

Задача автоматического определения "кто будет главным" - решается элементарно. а учитывая что каждая из строк в талице- уникальна (в даже на любом сервере) - то с этой стороны вообще никаких проблем. задача только в перекачке данных.

Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

21. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Аноним (8), 05-Мрт-20, 12:46 
>>> Значит, на какое-то время в сети появятся два мастера. Один - в
>>> отвалившейся части сети, второй - в оставшейся части. Когда сеть обратно
>>> соберется, возникнет вопрос как засинхрить данные у этих двух мастеров. Кто
>>> из них должен стать главным?
>> Я уже сказал - решить подобную задачу без участия человека - это
>> Нобелевка. Дерзайте.
> Задача автоматического определения "кто будет главным" - решается элементарно.

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

> что каждая из строк в талице- уникальна (в даже на любом
> сервере) - то с этой стороны вообще никаких проблем.

имеем 5 уникальных записей в один и тот же момент времени, а должна быть одна запись, соответствующая одному моменту времени. Проблема? Не, никаких...

Ответить | Правка | Наверх | Cообщить модератору

25. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от ыы (?), 05-Мрт-20, 13:58 
>[оверквотинг удален]
>>>> соберется, возникнет вопрос как засинхрить данные у этих двух мастеров. Кто
>>>> из них должен стать главным?
>>> Я уже сказал - решить подобную задачу без участия человека - это
>>> Нобелевка. Дерзайте.
>> Задача автоматического определения "кто будет главным" - решается элементарно.
> Ну-ну, элементарно. Даже если натянуть на записи некий набор дополнительных условий, всегда
> остаются нюансы.
>> что каждая из строк в талице- уникальна (в даже на любом
>> сервере) - то с этой стороны вообще никаких проблем.
> имеем 5 уникальных записей в один и тот же момент времени, а

автор утверждает что таковых нет.


Ответить | Правка | Наверх | Cообщить модератору

28. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от Аноним (8), 05-Мрт-20, 14:14 
> автор утверждает что таковых нет.

Пусть афтырь сам с собой разберется, что у него есть, и чего нет.
Записи не меняются, но при этом надо мультимастер. Видимо, "чтобы было".


Ответить | Правка | Наверх | Cообщить модератору

30. "Синхронизация содержимого таблицы для PostgreSQL 9.1"  +/
Сообщение от xintrea (ok), 05-Мрт-20, 15:43 
> имеем 5 уникальных записей в один и тот же момент времени, а
> должна быть одна запись, соответствующая одному моменту времени. Проблема? Не, никаких...

Еще раз: у каждой записи есть UUID, в топике об этом сказано.

Ответить | Правка | К родителю #21 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру