Мы рассматриваем db40 для крупномасштабного веб-сайта электронной коммерции с использованием Java на стороне сервера. Для нас очень важна поддержка параллелизма и транзакций. Когда клиент покупает товар, нам необходимо заблокировать товар и объекты клиента, чтобы обновить инвентарь и историю заказов клиентов, соответственно, в одной транзакции. Возможно ли это с db4o? Я хочу убедиться, что он поддерживает многообъектные транзакции.
Как db4o поддерживает параллелизм и транзакции?
Ответы (2)
Здесь уже есть похожие вопросы, например, этот один. И мой ответ примерно такой же.
О веб-сайте электронной коммерции большого объема: db4o никогда не создавался как большая база данных большого объема, а скорее для встроенных вариантов использования, таких как настольные и мобильные приложения. Ну, это зависит от того, что означает «большая громкость». Я предполагаю, что это означает сотни или одновременных транзакций. Это определенно выходит за рамки db4o.
Поддержка параллелизма и транзакций: ядро db4o по-прежнему является однопоточным и поэтому может обслуживать только небольшое количество одновременных операций. db4o поддерживает транзакции с прочитанная зафиксированная изоляция. Это означает, что транзакция может видеть только зафиксированное состояние других транзакций. На практике это очень слабая гарантия.
К вашему примеру: вы можете обновить покупку с помощью продукта и потребителя за одну транзакцию. Однако другая транзакция может обновить любой из этих объектов и зафиксировать. Затем выполняющаяся транзакция, которая уже прочитала некоторые объекты, может выполнить вычисления со старым значением и сохранить его. Так что слабая изоляция «портит» ваше состояние. Вы можете использовать блокировки, чтобы предотвратить это, но db4o не имеет удобного механизма блокировки объектов. И это еще больше снизило бы производительность.
В целом, я думаю, вам, вероятно, понадобится «большая» база данных, которая лучше поддерживает параллелизм и обработку транзакций.
Похоже, вам нужно использовать db4o семафоры а>.