Альтернатива SymmetricDS pk

Прочитав руководство пользователя SymmetricDS, я не уверен, поддерживает ли SymmetricDS разрешение конфликтов, основанное не на PK, а исключительно на моих собственных настраиваемых столбцах.

Учитывая следующий сценарий:

  • 2 узла с двунаправленным обновлением
  • каждый узел имеет одну таблицу products, которую необходимо синхронизировать

Теперь схема таблицы выглядит так (упрощенно):

id (pk) |  name (char)  | reference (char)

Я хотел бы знать, возможно ли определить столбец reference как идентификатор для разрешения конфликтов и операций вставки/обновления вместо столбца pk id?

Пример:

Node0
id (pk) |  name (char)  | reference (char)
1          Foo            IN001
2          FooBaz         IN003
----

Node1
id (pk) |  name (char)  | reference (char)
1          Bar            EX001
2          Foo            IN001

Изменения в строке 2 в узле 1 вызовут обновления в строке 1 в узле 1, а создание новой записи в узле 0/1 вызовет вставку в соответствующий узел, но с учетом того, что ПК может быть уже занят.

Кроме того, я хотел бы отфильтровать строки таблицы для синхронизации по значению столбца reference. Это означает, что должны синхронизироваться только строки, где reference startwith('IN') == True.

Спасибо!


person Malte Jacobson    schedule 13.05.2015    source источник
comment
Можете ли вы изменить схему БД? Можете ли вы сделать имя ПК и дроп-идентификатор? Как вы хотите поступить в ситуации, когда ПК уже занят? Чтобы определить, какой записи синхронизируются.   -  person Austin Brougher    schedule 14.05.2015
comment
(1) Я не могу изменить схему БД (2) Я не могу сбросить ПК (3) На самом деле мне все равно на ПК, это означает, что если ПК уже занят, я беру новый в таблице узла product. Сопоставление должно работать в столбце reference.   -  person Malte Jacobson    schedule 14.05.2015
comment
Привет, Мальте, я не могу зарегистрировать свое приложение с помощью симметричного ds. Не могли бы вы рассказать мне, как я могу зарегистрировать свое приложение. Моя ошибка logcat: невозможно обработать неизвестные CSV-файлы   -  person Kimmi Dhingra    schedule 04.12.2015


Ответы (1)


Посмотрите на столбец «SYNC_KEY_NAMES» в таблице TRIGGER.

Укажите разделенный запятыми список столбцов, которые следует использовать в качестве ключа для операций синхронизации. По умолчанию, если не указано, будет использоваться первичный ключ таблицы.

Если вы вставите значение «имя» в этот столбец, SDS будет обрабатывать его как PK.

Если оставить id в качестве ПК, это создаст препятствие. Если этот столбец автоматически увеличивается, вы можете попытаться исключить его из столбца таблицы триггеров EXCLUDED_COLUMN_NAMES. Поскольку это ПК, я не знаю, проигнорирует ли его SDS или нет.

Если это не сработает, вам придется написать настраиваемый фильтр загрузки для увеличения поля идентификатора при вставке.

person Austin Brougher    schedule 14.05.2015
comment
Спасибо, я рассмотрю это решение и дам вам знать. - person Malte Jacobson; 15.05.2015
comment
Кажется, что мой сценарий не может быть выполнен так просто. - person Malte Jacobson; 19.05.2015
comment
1. Если добавить исключенный столбец в триггерную таблицу, таблица целевого узла будет изменена --> исключенный столбец будет удален из схемы таблицы! 2. Использование sync_key_names в таблице триггеров изменит таблицу целевых узлов --> удалив PK из id и установив его в столбец reference. Обе операции alter для меня неприемлемы! Наконец, мне нужно написать несколько обширных расширений, чего я не хочу! - person Malte Jacobson; 19.05.2015
comment
Судя по вашему описанию, я согласен с Остином. sync_key_names — это то, что вы ищете. Установка sync_key_names не изменит вашу таблицу. - person chenson42; 20.05.2015