/ / RavenDB - виключення паралелізму без оптимістичного паралелізму - ravendb, оптимістичний-паралелізм

RavenDB - виняткова паралельність без оптимістичного паралелізму - випадок, оптимістичний-паралельність

У нашому екземплярі Raven DB ми періодично отримуємо виключення паралелізму. Це завжди мене здивувало, оскільки ми не ввімкнули оптимістичного паралелізму.

Google говорить мені про це є сценарій де можуть бути виключені виключення паралелізмубез включеного оптимістичного паралелізму - там, де є індекс, який викликає LoadDocument () на документі такого типу. Це дійсно так з нашою кодовою базою.

Проте потік, на який я тільки що посилався, не передбачає виправлення. Що робити, коли виникає виключення паралелізму? Чи потрібно повторити логіку? Або я повинен робити щось інше?

Відповіді:

0 для відповіді № 1

Виникає паралельне виключення, якщо 2 потоки змагаються, щоб фізично змінити той самий документ одночасно. Один потік виграє, інший отримує виключення паралелізму.

Ви самі визначаєте, що робити з цим сценарієм.

Вибір того, що ви може робити:

  1. Нічого. Неопрацьоване виключення. Нічого іншого, ніж якщо мережа впала на хвилину
  2. Повтор. Останній у перемогах. Документ, який було виправлено, був останнім, повторювавши запит, щоб перезаписати всі зміни.
  3. Повідомити. Пастка винятку. Інформувати користувача про свій запит не вдалося і для них переглянути свої зміни проти поточної версії документа.
  4. Об'єднати. Розрізняти два документи, об'єднати їх разом ala-джерелом керування автоз'єднанням
  5. Злиття рук. Представити користувальницький інтерфейс користувача, який демонструє обидва документи і дозволяє користувачеві виконати 3-х стороннє злиття

Ви також можете побудувати інтелектуальну системуробити це. Виключення паралелізму, спроба автоматичного злиття, якщо добре, все добре. Помилка автоматичного об'єднання, повернення з повідомленням користувача "на жаль, ми не змогли прийняти ваші зміни, натисніть тут, щоб порівняти зміни".