Как db4o поддерживает параллелизм и транзакции?

Мы рассматриваем db40 для крупномасштабного веб-сайта электронной коммерции с использованием Java на стороне сервера. Для нас очень важна поддержка параллелизма и транзакций. Когда клиент покупает товар, нам необходимо заблокировать товар и объекты клиента, чтобы обновить инвентарь и историю заказов клиентов, соответственно, в одной транзакции. Возможно ли это с db4o? Я хочу убедиться, что он поддерживает многообъектные транзакции.


person user646584    schedule 24.03.2011    source источник


Ответы (2)


Здесь уже есть похожие вопросы, например, этот один. И мой ответ примерно такой же.

О веб-сайте электронной коммерции большого объема: db4o никогда не создавался как большая база данных большого объема, а скорее для встроенных вариантов использования, таких как настольные и мобильные приложения. Ну, это зависит от того, что означает «большая громкость». Я предполагаю, что это означает сотни или одновременных транзакций. Это определенно выходит за рамки db4o.

Поддержка параллелизма и транзакций: ядро ​​db4o по-прежнему является однопоточным и поэтому может обслуживать только небольшое количество одновременных операций. db4o поддерживает транзакции с прочитанная зафиксированная изоляция. Это означает, что транзакция может видеть только зафиксированное состояние других транзакций. На практике это очень слабая гарантия.

К вашему примеру: вы можете обновить покупку с помощью продукта и потребителя за одну транзакцию. Однако другая транзакция может обновить любой из этих объектов и зафиксировать. Затем выполняющаяся транзакция, которая уже прочитала некоторые объекты, может выполнить вычисления со старым значением и сохранить его. Так что слабая изоляция «портит» ваше состояние. Вы можете использовать блокировки, чтобы предотвратить это, но db4o не имеет удобного механизма блокировки объектов. И это еще больше снизило бы производительность.

В целом, я думаю, вам, вероятно, понадобится «большая» база данных, которая лучше поддерживает параллелизм и обработку транзакций.

person Gamlor    schedule 24.03.2011
comment
Ядро однопоточное? Это относится и к Versant VOD, старшему брату db4o? Я считаю, что трудно поверить. Если он однопоточный в ядре, это будет означать, что простые чтения должны ждать в очереди для выполнения других операций чтения. Откуда именно взялась 10-кратная производительность по сравнению с РСУБД? - person user646584; 24.03.2011
comment
Конечно, это не относится к VOD. Я указал текущее состояние db4o. VOD - еще один зверь и поддерживает все эти функции - person Gamlor; 25.03.2011
comment
Поскольку я довольно слаб в теории баз данных, мне интересно узнать больше о лучших схемах изоляции, чем «чтение зафиксированной изоляции». Можете ли вы указать на некоторую информацию о том, как «большая» база данных справляется с этим лучше? Я искал, но ничего не нашел. Может быть, ты сможешь указать хотя бы несколько ключевых слов. - person Sam Stainsby; 26.03.2011
comment
@ user646584 Дополнительная производительность обеспечивается не возможностями параллелизма, а скоростью сохранения сложных объектов. См .: polepos.org - person German; 08.04.2011