LINQ к SQL и проблемам параллелизма

Вы можете использовать существующие методы Java из библиотеки Colt. Вот небольшой пример, в котором используется синтаксис Python (чтобы сделать код примера небольшим, я использую Jython):

from cern.colt.list import IntArrayList
a=IntArrayList()
a.add(1); a.add(2)    # add two integer numbers
print "size=",a.size(),a
a.beforeInsert(0, 10) # add 10 before index 0 
print "size=",a.size(),a

Вы можете использовать программу DataMelt для запуска этого кода. Вывод приведенного выше кода:

size= 2 [1, 2]
size= 3 [10, 1, 2]

Как видите, 10 вставляется перед 1 (и размер увеличивается) Не стесняйтесь менять кодировку на Java, т.е. импортировать этот класс как [116 ]

import cern.colt.list.IntArrayList
IntArrayList a= new IntArrayList()

7
задан yoozer8 28 June 2012 в 14:12
поделиться

3 ответа

Если у Вас есть подлинная суть вопроса с параллельными обновлениями на тех же данных, то Вы могли бы рассмотреть выполнение всей операции в транзакции - т.е. получение данных и фиксация их. Пока Вы рассматриваете получение/обновление/фиксирование как недолгую, атомарную операцию (т.е. Вы не приостанавливаетесь для ввода данных пользователем в середине), это должно быть в порядке.

В частности, с уровнем сериализуемой изоляции никто не может обновить данные, что у Вас есть чтение, соединяются (т.е. что-либо, что Вы запросили). Единственная проблема состоит в том, что это могло бы вести для заведения в тупик сценариев, если различные запросы считывают данные в различных заказах. AFAIK, нет никакого способа заставить LINQ-SQL выпускать (UPDLOCK) подсказку, которая является позором.

Или TransactionScope или SqlTransaction сделали бы, пока они установлены как сериализуемая изоляция (который является значением по умолчанию для TransactionScope).

7
ответ дан 7 December 2019 в 03:22
поделиться

можно хотеть изучить Платформу Объекта, которая выполняет все как транзакцию. Вот два подкаста, которые могут также быть интересными о Платформе Объекта.

DNRTV - часть 1 - часть 2

1
ответ дан 7 December 2019 в 03:22
поделиться

Для этого вида ситуаций, т.е. где больше чем один пользователь может хотеть внести изменения в тот же record/customer/order/whatever, лучше создать "блокировку" в прикладную логику, а не блокировки базы данных использования.

Используя блокировки DB для решения логической блокировки данных собирается подарить Вам "кучу" новых проблем. Лучшее решение состоит в том, чтобы иметь столбцы и/или таблицы, где можно указать, что порядок/клиент/и т.д. редактируется [пользователем], до когда это заблокировано и т.д. Запросите ту таблицу (или столбцы), чтобы проверить, доступен ли клиент/порядок/вещь для редактирования прежде, чем позволить другому пользователю редактировать ее.

См.: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3984968&SiteID=1

1
ответ дан 7 December 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: