SymmetricDS, как фильтровать строки во время преобразования

Я использую SymmetricDS со многими узлами магазина и узлом корпорации.

Мне нужно выполнить синхронизацию преобразования между таблицей в узле хранилища и таблицей в узле корпорации и успешно настроить преобразование между ними с помощью sym_transform_table и sym_transform_column . Теперь все строки исходной таблицы преобразуются или копируются в целевую таблицу в узле corp. Я хочу предотвратить или отфильтровать некоторые строки из исходной таблицы от перемещения в целевую таблицу. Любая идея для достижения этого.

Практический сценарий: клиент с определенным возрастом (подмножество строк в таблице клиентов) в магазине должен быть скопирован в таблицу master_customer в узле корпорации, которая имеет разные имена столбцов.


person Binyamin Melepat    schedule 07.03.2014    source источник


Ответы (2)


Маршрутизаторы используются для фильтрации данных. Вместо маршрутизатора default используйте маршрутизатор lookup, subselect или BSH.

Lookup будет самым быстрым, но требует создания отдельной таблицы поиска в вашей БД, чтобы указать, какие возрасты можно отправлять, а какие нет.

BSH займет немного больше времени, но может обрабатывать логику, подобную if (age < 65 && age >= 18).

Маршрутизатор Subselect займет больше всего времени, поскольку ему придется запрашивать БД каждый раз, когда необходимо маршрутизировать запись. Этот запрос может выбрать значение из БД для сравнения или просто иметь тот же тип логики, который вы могли бы поместить в выражение маршрутизатора BSH.

Если ваша фильтрация зависит от значения после вашего преобразования, убедитесь, что преобразование происходит в исходном узле, а не в целевом (TRANSFORM_POINT='EXTRACT'). Если вы хотите выполнить фильтрацию перед преобразованием, убедитесь, что преобразование происходит в целевом объекте (TRANSFORM_POINT='LOAD'). Если это не имеет значения, вы, вероятно, захотите, чтобы преобразования происходили в EXTRACT, чтобы разгрузить работу по обработке с сервера.

person Austin Brougher    schedule 07.03.2014
comment
Спасибо, Остин, мне было интересно, как связать преобразование с конкретным маршрутизатором, потому что у таблицы преобразования нет отношения внешнего ключа к таблице маршрутизатора. - person Binyamin Melepat; 08.03.2014
comment
Преобразования настраиваются по групповой ссылке. Просто убедитесь, что ссылка на группу преобразования такая же, как и на маршрутизаторе. - person Austin Brougher; 08.03.2014
comment
В моей системе есть более одного маршрутизатора с одним и тем же хранилищем групповых ссылок на corp, так как я могу определить, на каком маршрутизаторе я должен настроить условие фильтрации? - person Binyamin Melepat; 08.03.2014
comment
В чем разница между вашими роутерами? Если вы не знаете, какой маршрутизатор отвечает за таблицу, которую вы фильтруете, вам, вероятно, нужен только один маршрутизатор. Когда срабатывает триггер, данные об изменениях фиксируются в sym_data. Маршрутизатор будет периодически перенаправлять эти данные и обновлять sym_data_event. Вы можете присоединиться к sym_data и sym_data_event, чтобы увидеть идентификатор маршрутизатора, который перенаправил захваченные данные. - person Austin Brougher; 08.03.2014

Взгляните на загрузить фильтры.

insert into sym_load_filter
    (LOAD_FILTER_ID, LOAD_FILTER_TYPE, SOURCE_NODE_GROUP_ID,
    TARGET_NODE_GROUP_ID, TARGET_CATALOG_NAME, TARGET_SCHEMA_NAME,
    TARGET_TABLE_NAME, FILTER_ON_UPDATE, FILTER_ON_INSERT, FILTER_ON_DELETE,
    BEFORE_WRITE_SCRIPT, AFTER_WRITE_SCRIPT, BATCH_COMPLETE_SCRIPT,
    BATCH_COMMIT_SCRIPT, BATCH_ROLLBACK_SCRIPT, HANDLE_ERROR_SCRIPT,
    CREATE_TIME, LAST_UPDATE_BY, LAST_UPDATE_TIME, LOAD_FILTER_ORDER,
    FAIL_ON_ERROR) values
    ('SampleFilter','BSH','Client','Server',NULL,NULL,
    'ITEM_SELLING_PRICE',1,1,1,'
    if (OLD_COST > COST) {
            // row will not be loaded
            return false
    }
            // row will be loaded
            return true
    }
    ',
    null,null,null,null,null,
    sysdate,'Documentaion',sysdate,1,1);
person Markus Schulz    schedule 10.08.2015