#orientdb
#orientdb
Вопрос:
Я создаю систему в OrientDB, у меня есть несколько случаев, когда мне нужно создать систему, в которой несколько потоков добавляют ребра к определенной вершине и обновляют свойство в этой вершине. Мой вопрос в том, есть ли какой-либо метод, с помощью которого я могу блокировать операции над этой вершиной до тех пор, пока другие потоки не завершат блок кода этого блока как для чтения, так и для записи?
В моем случае у меня есть вершина для отеля и количество доступных номеров в качестве объекта недвижимости, любое бронирование, мой код будет работать в следующем порядке
1- Убедитесь, что размер оставшихся комнат больше 1
2- Создайте ребро для клиентской вершины
3- Уменьшите количество доступных комнат на единицу
Ответ №1:
OrientDB имеет оптимистичную систему управления параллелизмом, но при очень высоких одновременных обновлениях нескольких записей может быть более эффективной блокировка записей, чтобы избежать повторных попыток. Вы можете синхронизировать доступ самостоятельно или с помощью API хранилища. Обратите внимание, что это работает только с удаленными базами данных.
((OStorageEmbedded)db.getStorage()).acquireWriteLock(final ORID iRid)
((OStorageEmbedded)db.getStorage()).acquireSharedLock(final ORID iRid)
((OStorageEmbedded)db.getStorage()).releaseWriteLock(final ORID iRid)
((OStorageEmbedded)db.getStorage()).releaseSharedLock(final ORID iRid)
Источник и примеры использования можно найти в официальной документации.
Комментарии:
1. Спасибо за ваш ответ, но проблема здесь в том, что приведенный выше пример работает только с удаленными базами данных, а большинство корпоративных приложений используют удаленную базу данных