10.07.2015, 01:01 | #1 |
Участник
|
Sync или Async
Коллеги, приветствую.
Представим, что у нас на вход плагина подается большой (относительно) поток данных. Пусть это будет событие создания записи электронной почты (триггер). Плагин в свою очередь должен создать объект какой-то другой сущности и проставить ему уникальный порядковый номер х+1, где х, соответственно предыдущий номер. Вопрос - правильно ли я понимаю, что для подобной задачи больше подойдет асинхронный плагин? Ведь при синхронном запуске, на большом потоке данных, не исключена вероятность задублирования номеров. |
|
10.07.2015, 08:29 | #2 |
Чайный пьяница
|
Добрый день,
Вне зависимости от типа запуска могут быть дубликаты и их наличие зависит только от того каким образом вы реализуете автоинкремент. Если у вас лучший случай - доступны плагины без изоляции, то вам открыт более простой в реализации способ - использование локальной переменной для плагина и использование её в качестве лока. Посмотрите тут реализацию - https://crm2011autonumber.codeplex.c...ceGenerator.cs В худшем случае - у вас недоступны плагины без изоляции. И тогда самым простым решением является реализация следующего сценария: 1. Создание базы и таблицы в Microsoft SQL (не важно где) с полем-автоинкрементом. 2. Разработка вебсервиса, который по его вызову будет вставлять новую строку в таблицу и получать новосгененрированное значение. 3. Отдавать полученное значение вызвавшей стороне. 4. Вызов этого вебсервиса из плагина с использованием полученного результата. PS если у кого есть альтернативные идеи - не стесняемся, делимся.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: magicandy (1). |
10.07.2015, 11:05 | #3 |
Еда - топливо, Одежда - н
|
На большом потоке данных, у меня и на асинке были дубликаты
причем что все делалось стандартными бизнеспроцессами. Но у меня поток был 5-7 записей в секуду.
__________________
Все что вам нужно - это мозК Еда - топливо... Одежда - необходимость... |
|
14.07.2015, 10:53 | #4 |
Moderator
|
Асинхронные операции меньше влияют на производительность, так как не задерживают очередь событий, но, насколько я помню, время и последовательность их выполнения не гарантируется. В вашем случае, скажите мне что важнее: последовательность, или уникальность? Если уникальность, тогда проще всего добавить к порядковому номеру случайную последовательность. Например, так сделано в системе с нумерацией Кампаний, Обращений, Заказов, Счетов и Предложений. В начале идет Префикс, затем порядковый номер определенной разрядности, а потом постфикс генерированный случайным образом. Данное решение и быстрое и простое. Вероятность повторения номера стремится к нулю.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
14.07.2015, 14:07 | #5 |
Участник
|
Коллеги, спасибо все за ответы.
На самом деле уже с успехом применяю crm2011autonumber. Но хотелось всё же понять некоторые механизмы. Правда, я думал, что асинк-плагины работают несколько иначе, чем асинк-БП - выстраиваются в некоторую последовательную очередь отработки. То есть, пока один не отработает, второй не запустится. Решение, подобное встроенному autonumber не подходит, так как номер должен быть читабельный и легко передаваемый устно. |
|
14.07.2015, 18:34 | #6 |
Moderator
|
Асинхронные плагины и БП выполняются одной и той же службой, поэтому имеют много общих черт. В SDK достаточно подробно об этом написано, не буду повторяться.
Насчет "нечитаемости" возражу - мы это решение применяли с успехом. По номеру удобно сортировать, постфикс, чаще всего, говорить не приходится, так как номер не повторяется.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
|