【发布时间】:2011-03-24 18:37:21
【问题描述】:
我们正在为一个在服务器端使用 Java 的大容量电子商务网站寻找 db40。并发和事务支持对我们来说非常重要。当客户购买商品时,我们需要锁定产品和客户对象,以在单个事务中分别更新库存和客户订单历史记录。这对 db4o 可行吗?我想确保它支持多对象事务。
【问题讨论】:
标签: concurrency transactions db4o
我们正在为一个在服务器端使用 Java 的大容量电子商务网站寻找 db40。并发和事务支持对我们来说非常重要。当客户购买商品时,我们需要锁定产品和客户对象,以在单个事务中分别更新库存和客户订单历史记录。这对 db4o 可行吗?我想确保它支持多对象事务。
【问题讨论】:
标签: concurrency transactions db4o
这里已经有类似的问题了,比如one。而我的回答也差不多。
关于大容量电子商务网站:db4o 从未构建为大容量、大数据库,而是用于桌面和移动应用程序等嵌入式用例。好吧,这取决于“高音量”是什么意思。我认为这意味着数百或并发事务。这肯定超出了 db4o 的范围。
并发和事务支持:db4o 内核本质上仍然是单线程的,因此只能提供少量并发操作。 db4o supports transactions 与 read committed isolation。这意味着一个事务只能看到其他事务的已提交状态。在实践中,这是一个非常薄弱的保证。
以您的示例为例:您可以在一次交易中使用产品和消费者更新购买。然而,另一个事务可以更新这些对象中的任何一个并提交。然后,已经读取了一些对象的正在运行的事务可能会使用旧值进行计算并存储它。所以弱隔离会“污染”你的状态。 您可以使用锁来防止这种情况发生,但是 db4o 没有任何好的对象锁定机制。而且会进一步降低性能。
总而言之,我认为您可能需要一个“更大”的数据库,它对并发和事务处理有更好的支持。
【讨论】:
听起来你需要使用 db4o semaphores。
【讨论】: