|
![]() |
#1 |
Участник
|
и давайте попробуем вернуться к исходному вопросу:
Выгрузка измененных клиентов во внешнюю систему начнем с того, что сама по себе выгрузка нафиг никому не нужна. нужна синхронизация нескольких взаимосвязанных систем. поскольку вопрос был про выгрузку, то скорее в вопросе можно рассматривать связи в топологии звезда причем для упрощения обсуждения можно считать, что вопрос относился к центральной системе в топологии звезда причем нужна синхронизация данных в этих связанных системах, а не одна только выгрузка. синхронизацию (выгрузку и загрузку) могут делать разные команды на разных языках и с разными представлениями. перед синхронизацией не стоит задача нахождения глобального минимума передаваемых данных. синхронизация может передавать данные и повторно. но чем меньше трафик, тем лучше. так, вот прежде всего, нужно понимать, что: 1. к выгрузке будет и парная операция - загрузка. 2. загрузка предполагает, что могут быть ограничения данных, которых нет в системе-источнике, но система источник должна учитывать эти ограничения 3. синхронизация справочников - рано или поздно все равно должна синхронизировать все данные справочников. нужно ли расставлять приоритеты и передавать записи в определенном порядке - вопрос конкретной реализации. но скорее всего порядок записей не важен - главное, чтобы все записи всех справочников рано или поздно были синхронизированы 4. однако с точки зрения бизнес логики порядок таблиц в выгрузке важен из-за constraints на принимающей системе 5. также с точки зрения бизнес логики важен порядок записей в таблицах, где реализован паттерн (id, parentid) из за constraints на принимающей системе 6. на принимающей стороне возможно реализованы каскадные удаления, которые система источник должна учитывать 7. на принимающей стороне возможны уникальные индексы, отличающиеся от уникальных индексов в системе источнике, поэтому некоторые insert/update могут не выполняться на принимающей стороне 8. и т.п. Последний раз редактировалось mazzy; 14.01.2021 в 14:38. |
|
|
За это сообщение автора поблагодарили: Vadik (1). |
![]() |
#2 |
Модератор
|
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#3 |
Участник
|
Цитата:
Сообщение от mazzy
![]() начнем с того, что сама по себе выгрузка нафиг никому не нужна.
нужна синхронизация нескольких взаимосвязанных систем. поскольку вопрос был про выгрузку, то скорее в вопросе можно рассматривать связи в топологии звезда причем для упрощения обсуждения можно считать, что вопрос относился к центральной системе в топологии звезда Но в принципе интерестно обсудить как это более оптимально сделать. На первый взгляд такой протокол довольно гибкий, т.е. при добавлении к примеру новых полей в синхронизацию или добавлении новых групп клиентов они могут просто получить данные за более больший интервал(т.е. нет отдельной операции перевыгрузить все) Последний раз редактировалось trud; 14.01.2021 в 15:05. |
|
![]() |
#4 |
Участник
|
Цитата:
технической и внутренней задачи "найти измененные" влияет на внешний протокол обмена. но если это все что вы согласовали в протоколе ![]() то и не меняйте согласованную часть... |
|
![]() |
#5 |
Участник
|
Найти ближайшее решение, которое, при наименьшей гениальности, будет работать
![]() X++: select top 1 * from decision where IsActive = 1 order by GeniusLevel
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
![]() |
#6 |
Модератор
|
Цитата:
https://youtu.be/XMWiN1mnw7c?t=234 Я не уверен что такая реализация взлетит. Для этого в общем случае надо хранить все изменения (в виде снэпшотов, или как-то еще) по достаточно крупной иерархической структуре (6М клиентов, 17М адресов плюс наверное столько же контактов и т.д.). Хранить и обновлять эту историю годами (так как мы не знаем как далеко назад во времени может потребоваться заглянуть) , и при этом искать по ней в несколько потоков десятками запросов в минуту ? Я бы не стал. Возможно, кастомное и спецализированное решение на X++ и заработает, но "просто, гибко, быстро" - тут наверное придется выбирать и даже не 2, а 1 из 3 ![]() Цитата:
Но в принципе интерестно обсудить как это более оптимально сделать
![]()
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 15.01.2021 в 16:52. |
|
![]() |
#7 |
Участник
|
Цитата:
хранить нужно поледнее отданное "состояние" в каждую систему-приемник. причем и "состояние" нужно только если передаются не все поля, как правило нужен только признак изменения данных - recVersion или хэш с фиксированной длиной. Цитата:
вроде исходный вопрос был "есть внешняя система, ей как-то надо передавать клиентов из АХ которые изменились за интервал времени." Цитата:
а в чем ты видишь проблему? |
|
Теги |
aif, ax2012, change tracking, интеграция, как правильно |
|
|