|
15.01.2021, 17:41 | #1 |
Участник
|
Спасибо за комментарии.
По итогу оценил переделку в 3 дня, если согласуют, напишу чем закончилось. Это у них работает сейчас(с фильтром по "или" по дате модифиции по всем таблицам в запросе, я выше приводил пример), каждый вызов занимает минуту-полторы, подгружая в постоянном режиме где-то 6 ядер на 100% CPU, при этом большинство запросов возвращают пусто |
|
|
За это сообщение автора поблагодарили: vmoskalenko (4). |
18.03.2021, 13:33 | #2 |
Модератор
|
Пока
Дано: 5M клиентов более-менее равномерно (500К - 1.3М) распределены по 5 компаниям В сутки обновляется (Insert/Update) 0.1% клиентов Вопрос: что нам будет стоить идентицифировать обновленных клиентов с помощью Change tracking ? Потрачено времени:
Тестируем:
Итого: на бюджетной VM в Azure (B4Ms, 4xvCPU, 16 GB RAM, standard HDD) список измененных клиентов (CustTable.RecId) мы получаем за 5 секунд (достаточно шустро). Без перекрытия прочего стандартного кода в .insert(), .update(), event handler-ов и shadow таблиц (просто). Для всех обновлений, в том числе и извне AX (надежно)
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 18.03.2021 в 15:48. |
|
|
За это сообщение автора поблагодарили: mazzy (5), trud (5), sukhanchik (6), gl00mie (5). |
18.03.2021, 14:15 | #3 |
Участник
|
Ну тест то как раз показывает что change tracking не всегда будет лучшим выбором. Т.е. никакие данные с точки зрения внешней системы вообще не изменились, а у вас выгрузились тысячи клиентов
Плюс все эти выгрузки полностью непрозрачны для пользователя, т.е. он не видит что и когда выгружалось Плюс сам тест очень простой. Если удалить к примеру e-mail будет работать? Клиентов как правило требуется выгружать не всех, а принадлежащей определенной группе(при этом группу у клиента можно менять), это поддерживается? |
|
18.03.2021, 15:35 | #4 |
Модератор
|
Цитата:
Цитата:
Плюс все эти выгрузки полностью непрозрачны для пользователя, т.е. он не видит что и когда выгружалось
Цитата:
Плюс сам тест очень простой
Цитата:
Если удалить к примеру e-mail будет работать?
Цитата:
Клиентов как правило требуется выгружать не всех, а принадлежащей определенной группе(при этом группу у клиента можно менять), это поддерживается?
Цитата:
Ну тест то как раз показывает что change tracking не всегда будет лучшим выбором
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 25.03.2021 в 09:34. |
|
18.03.2021, 16:11 | #5 |
Участник
|
Так а что туда передавать? Ну т.е. вчера клиент принадлежал группе выгрузки и выгружался, сегодня ему поменяли группу на невыгружаемую. Нужно же как уведомить внешнюю систему об этом
Ну пока "insert(), .update() delete()" мне видится единственным правильный подходом, т.е. это будет гарантированно работать в любом случае, плюс позволит покрыть все возможные "хотелки" Хотя тут возможно ошибка выжившего, когда оно работает нормально, консалтинг не зовут, а мы видим только когда оно не работает |
|
18.03.2021, 16:26 | #6 |
Модератор
|
Цитата:
Цитата:
Ну пока "insert(), .update() delete()" мне видится единственным правильный подходом, т.е. это будет гарантированно работать в любом случае, плюс позволит покрыть все возможные "хотелки"
__________________
-ТСЯ или -ТЬСЯ ? |
|
24.03.2021, 11:55 | #7 |
Участник
|
Цитата:
Сообщение от trud
Ну тест то как раз показывает что change tracking не всегда будет лучшим выбором. Т.е. никакие данные с точки зрения внешней системы вообще не изменились, а у вас выгрузились тысячи клиентов
Плюс все эти выгрузки полностью непрозрачны для пользователя, т.е. он не видит что и когда выгружалось Цитата:
Цитата:
1. написать свою Data Entity. Кстати, для performance - это best practice. Помним, что CustomersV3 - одна из самых тяжелых data entity. 2. Добавить defaultCTQuery метод как описано тут https://docs.microsoft.com/en-us/dyn...hange-tracking 3. Накладывать фильтр прямо в DMF на Data Entity. Кстати, там же, в определении Export Group, можно задать инкрементальную выгрузку данных. 4. Вызывать вот это вот всё извне через DMF API https://docs.microsoft.com/en-us/dyn...pi#import-apis и еще с картинками вот тут https://github.com/microsoft/Recurri...iki#export-job |
|
|
За это сообщение автора поблагодарили: EVGL (2), trud (5), gl00mie (5). |
24.03.2021, 12:41 | #8 |
Модератор
|
Речь шла о выгрузке из AX2012
__________________
-ТСЯ или -ТЬСЯ ? |
|
25.03.2021, 05:08 | #9 |
Участник
|
Спасибо, для D365 тоже было бы интерестно обсудить
Цитата:
CustomersV3 содержит около 900 строчек кода. Чем это лучше методов логирования из 1 строчки(insert, updated, delete) на таблицах входящих в нее Есть мнение что методы логирования это не бест практис, то как бы MS их тоже активно использует Цитата:
Сообщение от vmoskalenko
2. Добавить defaultCTQuery метод как описано тут https://docs.microsoft.com/en-us/dyn...hange-tracking
Цитата:
Цитата:
Сообщение от vmoskalenko
4. Вызывать вот это вот всё извне через DMF API https://docs.microsoft.com/en-us/dyn...pi#import-apis и еще с картинками вот тут https://github.com/microsoft/Recurri...iki#export-job
(DXC кстати продает аналогичную доработку, но в D365, 2 джоба, один из которых выгружает данные в DM, другой оттуда забирает) Требования которые надо будет реализовать могут быть к примеру один файл на клиента, файл должен быть определенной структуры с определенным названием. Зачем это все кодить во внешнем приложении? Последний раз редактировалось trud; 25.03.2021 в 05:23. |
|
|
За это сообщение автора поблагодарили: vmoskalenko (4). |
01.04.2021, 09:11 | #10 |
Участник
|
Цитата:
https://github.com/NathanClouseAX/Co...-%20OData.pptx Цитата:
Сообщение от trud
Ну тут надо определить что мы хотим(потратить больше времени или меньше). Если меньше, то внедрение в работу системы внешнего приложения резко повысит трудоемкость ее поддержки. Т.е. вам надо будет поддерживать несколько репозиториев, разворачивать отдельные версии для разработки, теста и прочее. Нужно будет делать мониторинг этой программы, плюс останавливать ее когда останавливается АХ.
(DXC кстати продает аналогичную доработку, но в D365, 2 джоба, один из которых выгружает данные в DM, другой оттуда забирает) Требования которые надо будет реализовать могут быть к примеру один файл на клиента, файл должен быть определенной структуры с определенным названием. Зачем это все кодить во внешнем приложении? А вот сейчас бьюсь с Dual Write. Ох глюкавая... Но вроде завелась. |
|
|
За это сообщение автора поблагодарили: Vadik (1). |
Теги |
aif, ax2012, change tracking, интеграция, как правильно |
|
|