17.09.2012, 11:33 | #1 |
Участник
|
Процесс обработки записей многие-к-одному
Имею задачу осуществить обработку файла импорта. Он представляет собой "плоский" файл с транзакциями пользователей.В нем есть три группы направлений обработки, суть которых в создании( или обновлении) записей. Т.е. осуществляется обработка один-к-одному. Удается взаимно связывать создаваемые записи с записями транзакций. С этим все хорошо.
Сложность возникла на этапе подсчитывания записей, которые об'единены принадлежностью к какой-то группе. Обработка осуществлена следующим образом: При вставке з таблицу транзакций создается (или изменяется) запись в некоей сущности "Активностей Потребителя", каждая такая Активность берется из списка зарегистрированных активностей, каждая из которых содержит поле счетчика. По логике, каждая "Активность Потребителя" должна приращивать счетчик активностей в списке тех самых зарегистрированных активностей. Для этого я создал два процесса, - на создание и на изменение сущности "Активность Потребителя", в которой и попытался осуществить приращение счетчика в активности из списка, на которую указывает "Активность Потребителя". Приращение осуществил стандартно: "Увеличить на" {1}. Так вот первая запись подсчитывается нормально, а потом начинается чехарда - что-то подсчитывается, а бальшинство процессов застопоряются из-за SQL-ошибки. Я уже и статус для записи вводил, чтобы обрабатывать запись в зависимости от состояния - "Занято"-"Свободно" - на результат это принципиально не влияет, - снова одна-две записи подсчитываются, другие выпадают с ошибками, а третьи - видно, что механизм статуса не срабатывает, - между шагами одного процесса успевают сработать другие процессы, так что в общем получается какая-то чехарда. Фантазии уже не хватает для того, чтобы разрулить ситуацию ... Help please. Последний раз редактировалось Iwa; 17.09.2012 в 11:40. |
|
17.09.2012, 23:27 | #2 |
Еда - топливо, Одежда - н
|
ну скажу открыто... я мало что понял ))))
может еще как то опишите? ) суть импорта? |
|
18.09.2012, 11:22 | #3 |
Участник
|
Цитата:
Потребители Маркетиновые Активности Активности Потребителей Транзакции Импорт производится в сущность "Транзакции". В каждой транзакции есть указания 1) на потребителя, который осуществил транзакцию; 2) на участие Потребителя в Маркетинговой Активности (Активность Потребителя) 3) на Маркетинговую Активность, в рамках которой осуществлена транзакция. Идентификация Потребителя и Активности Потребителя производится на этапе подготовки файла импорта, так что в файле проставляются (либо отсутствуют) соответствующие GUID-ы. Маркетиновая Активность присутствует априори. Для Транзакции создан процесс на создание записи. Процесс осуществляет следующее: 1) создает Потребителя, если такой не существует или обновляет, если сущестует; 2) регистрирует Потребителя и Транзакцию в Активности Потребителя (увязывает Потребителя и Маркетинговую Активность) если такой не существует, или обновляет в нем Транзакцию, если существует; Импорт отрабатывает полностью, без ошибок. Все задания на создание Транзакций отрабатывают полностью. Все задания на создание/обновление Потребителей отрабатывают полностью. Для Активности Потребителя в процессах на вставку и на обновление присутствует шаг, в котором осуществляется приращение счетчика Маркетинговой Активности, которая указана в Активности Потребителя. Так вот задания на создание записей в Активности Потребителя отрабатывают в части создания, но не отрабатывают коректно в части приращения счетчика Маркетинговой Активности. На полторы тысячи созданных записей счетчик посчитал лишь 60. Остальные задания зависли в ожидании из-за SQL-ошибки. Последний раз редактировалось Iwa; 18.09.2012 в 12:25. Причина: уточнение |
|
20.09.2012, 22:48 | #4 |
Еда - топливо, Одежда - н
|
Причина возможно в том, что сервер просто не успевает обрабатывать... то есть записи создает, а вот обновить по каким-то причинам не может и за этого конфликт скорее всего получается... Правила то асинхронные.. Должны все в очередь запросы в БД становится... То есть по идее, что бы все отрабатывало, должно все идти одним циклом. А не так, что бы там кусок создали.. а потом тут дергать на все что создалось ранее..
Если без прироста попробовать? то есть не обновлять значение? Нормально все отрабатывает? Сложно просто въехать, что же оно там творит ))) |
|
|
|