У нашому екземплярі Raven DB ми періодично отримуємо виключення паралелізму. Це завжди мене здивувало, оскільки ми не ввімкнули оптимістичного паралелізму.
Google говорить мені про це є сценарій де можуть бути виключені виключення паралелізмубез включеного оптимістичного паралелізму - там, де є індекс, який викликає LoadDocument () на документі такого типу. Це дійсно так з нашою кодовою базою.
Проте потік, на який я тільки що посилався, не передбачає виправлення. Що робити, коли виникає виключення паралелізму? Чи потрібно повторити логіку? Або я повинен робити щось інше?
Відповіді:
0 для відповіді № 1Виникає паралельне виключення, якщо 2 потоки змагаються, щоб фізично змінити той самий документ одночасно. Один потік виграє, інший отримує виключення паралелізму.
Ви самі визначаєте, що робити з цим сценарієм.
Вибір того, що ви може робити:
- Нічого. Неопрацьоване виключення. Нічого іншого, ніж якщо мережа впала на хвилину
- Повтор. Останній у перемогах. Документ, який було виправлено, був останнім, повторювавши запит, щоб перезаписати всі зміни.
- Повідомити. Пастка винятку. Інформувати користувача про свій запит не вдалося і для них переглянути свої зміни проти поточної версії документа.
- Об'єднати. Розрізняти два документи, об'єднати їх разом ala-джерелом керування автоз'єднанням
- Злиття рук. Представити користувальницький інтерфейс користувача, який демонструє обидва документи і дозволяє користувачеві виконати 3-х стороннє злиття
Ви також можете побудувати інтелектуальну системуробити це. Виключення паралелізму, спроба автоматичного злиття, якщо добре, все добре. Помилка автоматичного об'єднання, повернення з повідомленням користувача "на жаль, ми не змогли прийняти ваші зміни, натисніть тут, щоб порівняти зміни".