[Cache] и многопоточность (для server-side)
От: dimgel Россия https://github.com/dimgel
Дата: 20.05.09 13:00
Оценка: 56 (1)
Всем привет. Не нашёл нигде обсуждений работы BLT в конкурентной среде. Вопрос: как вы разруливаете следующую ситуацию.

Допустим, есть методы:
[Cache] getSomething()
[ClearCache] updateSomething(x)

Transaction isolation = read committed.


Поток 1: getSomething() // возвращает A из базы, помещает в кеш

Поток 1: startTransaction
Поток 2: startTransaction
Поток 2: updateSomething(B) // сбрасывает кеш
Поток 1: getSomething() // возвращает A из базы, помещает в кеш
Поток 2: commit // фиксирует в базе something=B
Поток 1: commit

Поток 1: getSomething() // возвращает A из кеша, когда в базе уже закоммичен B
Re: [Cache] и многопоточность (для server-side)
От: IT Россия linq2db.com
Дата: 21.05.09 01:54
Оценка: 2 (1)
Здравствуйте, dimgel, Вы писали:

D>Всем привет. Не нашёл нигде обсуждений работы BLT в конкурентной среде. Вопрос: как вы разруливаете следующую ситуацию.


Хороший вопрос. Ответ примерно такой. Т.к. управление транзакциями производится вручную, то и о кеше нужно думать самому. Можно использовать блокирующую транзакцию, тогда getSomething не выполнится пока не завершится первая транзакция. Можно дополнительно сбросить кешь после завершения первой транзакции. Для этого достаточно написать пустой метод и повесить на него тот же атрибут и вызывает его после первого коммита.
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.