УПРАВЛЕНИЕ ПАРАЛЛЕЛЬНЫМ ВЫПОЛНЕНИЕМ В СИСТЕМЕ ПЛАНИРОВАНИЯ РЕСУРСОВ ПРЕДПРИЯТИЯ

1. Способ управления параллельным выполнением в системе планирования ресурсов предприятия, содержащей базу данных, выполненную с возможностью содержания данных в таблице, имеющей множество строк, способ, содержащий этапы, на которых:
принимают запрос записи из запрашивающего приложения для обновления данных в пределах строки первой таблицы во время первой транзакции с данными, в которой строка содержит первую идентификацию версии, уникально идентифицирующую версию обновляемых данных (302);
сравнивают первую идентификацию версии обновляемых данных со второй идентификацией версии, уникально идентифицирующей версию данных в пределах строки, когда данные выбирают в ответ на предыдущий запрос чтения во время первой транзакции с данными (408); и
выполняют отброс исключения, если первая идентификация версии не соответствует второй идентификации версии (412).
2. Способ по п.1, дополнительно содержащий этапы, на которых:
блокируют данные из запроса записи второй транзакции с данными для предотвращения обновления второй транзакции с данными в пределах строки, если первая идентификация версии соответствует второй идентификации версии (416);
обновляют данные в пределах строки (416);
фиксируют первую транзакцию с данными (418);
убирают блокирование данных (420); и
генерируют третью идентификацию версии, которая уникально идентифицирует версию обновленных данных.
3. Способ по п.2, дополнительно содержащий этап, на котором: разрешают чтение данных в пределах строки первой таблицы в ответ на запрос чтения из запрашивающего приложения во время второй транзакции с данными, в то время как данные заблокированы для запроса записи.
4. Способ по п.1, дополнительно содержащий этапы, на которых:
производят выборку данных в ответ на запрос чтения из запрашивающего приложения для данных в течение первой транзакции с данными;
сохраняют идентификацию первой версии, которая уникально идентифицирует выбранные данные;
разрешают вторую транзакцию с данными для обновления данных; и
генерируют идентификацию второй версии, которая уникально идентифицирует обновленные данные второй транзакции с данными, причем обновленные данные второй транзакции с данными содержат данные, обновленные во время первой транзакции с данными.
5. Способ по п.1, в котором отбрасывание исключения содержит этап, на котором: отбрасывают исключение в код приложения запрашивающего приложения (412).
6. Способ по п.1, в котором запрос на запись генерируют из оператора обновления запрашивающего приложения, заключенного в пределах первого блока попытки, и в котором обработка исключения в пределах первой транзакции с данными содержит этапы, на которых:
захватывают исключение в пределах блока захвата блока попытки (602);
повторно считывают идентификацию второй версии из строки (612); и
повторно пытаются сравнить идентификацию первой версии с идентификацией второй версии (612).
7. Способ по п.6, в котором первый блок попытки вложен во второй блок попытки, причем способ дополнительно содержит обработку исключения в пределах первой транзакции с данными, содержащую этапы, на которых:
перемещают исполнение обработки обратно во второй блок попытки, если повторная попытка сравнения идентификации первой версии с идентификацией второй версии в пределах блока захвата первого блока попытки приводит к отбросу исключения (614); и
пытаются обработать исключение в пределах второго блока попытки (612).
8. Способ по п.6, в котором обработка первой транзакции с данными содержит этап, на котором: прекращают первую транзакцию с данными, если повторная попытка сравнения идентификации первой версии с идентификацией второй версии в пределах блока захвата первого блока попытки приводит к отбросу исключения, и если первый блок попытки не вложен во второй блок попытки (604), (606).
9. Способ по п.1, в котором первая транзакция с данными вложена во вторую транзакцию с данными, в которой обработка исключения в первой транзакции с данными содержит: перемещают исполнение обработки обратно во вторую транзакцию с данными (608), (610).
10. Способ по п.1, в котором идентификация первой версии содержит одно из следующего: случайное число, основанное на обновленных данных, или случайное число, основанное на первом случайном исходном числе, и в котором номер идентификации второй версии содержит одно из следующего: случайное число, основанное на данных, когда данные выбирают в ответ на предыдущий запрос чтения в течение первой транзакции с данными, или случайное число основано на втором случайном исходном числе.
11. Способ по п.1, в котором данные в пределах строки второй таблицы зависят от обновляемых данных, причем способ дополнительно содержит этапы, на которых:
блокируют данные в пределах строки первой таблицы из запроса записи второй транзакции с данными для предотвращения обновления данных в строке первой таблицы со стороны второй транзакции с данными, если данные, находящиеся в строке второй таблицы данных, рассчитывают из данных в пределах строки первой таблицы (806);
блокируют данные в пределах строки второй таблицы из запроса на запись второй транзакции с данными для предотвращения обновления данных в строке второй таблицы со стороны второй транзакции с данными (806);
производят выборку данных в пределах строки первой таблицы (808);
обновляют данные в пределах строки первой таблицы (808);
определяют данные в пределах строки второй таблицы на основе, по меньшей мере, части обновленных данных в пределах строки первой таблицы (810);
обновляют данные в пределах строки второй таблицы (812);
фиксируют первую транзакцию с данными (814); и
высвобождают блокировки для данных в пределах строк первой и второй таблиц (814).
12. Способ по п.1, дополнительно содержащий этапы, на которых:
обновляют данные без сравнения идентификации первой и второй версии, если запрос записи содержит обновление для предоставления нового значения для данных в пределах строки первой таблицы, соответственно зависящей от существующего значения данных в пределах строки первой таблицы (710);
генерируют идентификацию третьей версии (704);
определяют разность между идентификацией второй версии и идентификацией третьей версии (706); и
вырабатывают обновление для установки идентификации версии, которая уникально идентифицирует версию обновленных данных как значение идентификации второй версии плюс разность (708).
13. Машиночитаемый носитель, имеющий машиноисполняемые инструкции, для реализации способа управления параллельным выполнением между множеством транзакций с данными для данных в пределах первой строки первой таблицы, причем машиноисполняемые инструкции содержат инструкции для:
сравнения первой версии значения идентификации и второй версии значения идентификации, в котором значение идентификации первой версии уникально идентифицирует версию данных из первой строки во время запроса на считывание первой транзакции с данными, и в котором вторая идентификация версии уникально идентифицирует версию данных из первой строки во время запроса записи первой транзакции с данными (410);
отбрасывания исключения, если первая идентификация версии не соответствует второй идентификации версии (412); и
обработки исключения в пределах первой транзакции с данными, если первая таблица разрешена для оптимистичного управления параллельным выполнением (414).
14. Машиночитаемый носитель, имеющий машиноисполняемые инструкции по п.13, в котором запрос записи генерируют из оператора обновления запрашивающего приложения, и в котором оператор обновления содержит перезапись оптимистичного управления параллельным выполнением, если первая таблица будет установлена для оптимистичного управления параллельным выполнением, причем машиноисполняемые инструкции дополнительно содержат инструкции для блокирования первой строки первой таблицы от каких-либо запросов чтения операции записи или запросов записи из запрашивающего приложения во время второй транзакции с данными, в которой блокировку удерживают в течение длительности первой транзакции с данными (312).
15. Машиночитаемый носитель, содержащий машиноисполняемые инструкции по п.13, в котором запрос записи генерируют из оператора обновления запрашивающего приложения, и в котором оператор обновления содержит подсказку на обновление для обеспечения возможности пессимистичного блокирования, причем выполняемые компьютером инструкции дополнительно содержат инструкции, которые запрещают подсказку на обновление для обеспечения возможности пессимистичного блокирования, если разрешено оптимистичное управление параллельным выполнением для первой таблицы (310).
16. Машиночитаемый носитель, имеющий машиноисполняемые инструкции по п.13, дополнительно содержащий этап, на котором: выполняют пессимистичное блокирование элемента данных в течение длительности транзакции с данными, если оптимистичное управление параллельным выполнением не разрешено для первой таблицы (312), в котором пессимистичное блокирование содержит этапы, на которых:
блокируют первую строку для каких-либо запросов чтения и запросов записи из запрашивающего приложения во время второй транзакции с данными (312); и
обновляют первую строку без сравнения идентификации первой версии с идентификацией второй версии (316).
17. Машиночитаемый носитель, имеющий машиноисполняемые инструкции по п.13, в котором запрос записи генерируют из оператора на обновление запрашивающего приложения, заключенного в первый блок попытки, и в котором обработка исключения в пределах первой транзакции с данными содержит этапы, на которых:
захватывают исключение в пределах блока захвата блока попытки (602);
повторно считывают идентификацию второй версии из строки (612); и
выполняют повторную попытку сравнения идентификации первой версии с идентификацией второй версии (612).
18. Компьютер, выполненный с возможностью участия в сети планирования ресурсов предприятия, содержащий:
сетевое устройство (170), (172) связи, предназначенное для приема данных через сеть;
память (130), (140), (150), в которой содержатся машиночитаемые инструкции; и
процессор (120), предназначенный для исполнения машиночитаемых инструкций, выполняющих способ, содержащий этапы, на которых:
принимают запрос чтения из запрашивающего приложения для чтения первой строки первой таблицы, содержащейся в базе данных, в течение первой транзакции с данными (302);
сохраняют первую идентификацию версии, которая уникально идентифицирует версию данных, считанных из первой строки (302);
принимают запрос записи из запрашивающего приложения для обновления первой строки во время первой транзакции с данными (302);
сравнивают идентификацию первой версии с идентификацией второй версии, которая уникально идентифицирует версию данных из первой строки, когда принимают первый запрос записи (410);
отбрасывают исключения в запрашивающее приложение, если идентификация первой версии не соответствует идентификации второй версии (412); и
обрабатывают исключения в пределах первой транзакции с данными (414).
19. Компьютер по п.18, в котором инструкции для обработки исключения в пределах первой транзакции с данными содержат инструкции для:
повторного считывания идентификации второй версии из строки (612); и
выполнения повторной попытки сравнения идентификации первой версии с идентификацией второй версии (612).
20. Компьютер по п.18, в котором запрос записи генерируют из оператора обновления запрашивающего приложения, включенного в пределы первого блока попытки, и в котором инструкции на обработку исключения в пределах первой транзакции с данными содержат инструкции для:
перемещения исключения обработки назад ко второму блоку попытки и обработки исключения в пределах второго блока попытки, если первый блок попытки заключен во второй блок попытки, и если обработка исключения в пределах первого блока попытки приводит к отбрасыванию исключения (608), (610), (612), (614); и
прекращают первую транзакцию с данными, если первый блок попытки не заключен во второй блок попытки, и если обработка исключения в пределах первого блока попытки приводит к отбрасыванию исключения (604), (606).