我们正在使用核心伯克利(Dbbaseapi),并且已经处理了9个缺位记录的写/读core,现在我们在使用事务和不使用事务时在性能上有差异,这些事务如下:
使用二级数据库概念(带事务):-
Operation No.of Rows Time
Write CDRFile 9,66,320 5.8 minutes
Read CDRFile 9,66,320 1.36 minutes使用二级数据库概念(无事务):-
Operation No.of Rows Time
Write CDRFile 966320 3.27 minutes
Read CDRFile 966320 1.28 minutes我们已经设置了environConfig.setTransaction(true)中使用的参数,在数据库中设置了相同的参数。
Transaction txn = databaseEnv.getDbEnv().beginTransaction(null, null);然后来到这里:-
databaseEnv.getCdrDb().put(txn, thekey, theData);因此,请回答事务内部如何在数据库和环境中使用。
发布于 2011-08-01 23:47:02
从你随后提出的问题来看,听起来你已经超越了这个最初的问题。对于记录而言,当为事务配置BDB时,BDB执行事务日志的写操作,以便在应用程序或系统崩溃时提供可恢复性(在没有事务的情况下使用BDB时无法自动恢复)。
在使用事务时,在默认情况下,BDB将等待事务一直写入磁盘(请参阅开始处理事务的前两部分,以获得有关事务持久性以及如何通过放宽持久性约束来提高吞吐量的更多信息)。
正如上面所指出的,除了放宽持久性约束之外,还可以通过以下方式提高吞吐量:( a)在同一事务中包括多个操作(插入),而不是通过putMultiple API调用使用大容量put API (这将减少预调用JNI开销),而不是在单独的事务中插入单个记录。
将来,在OTN上的伯克利DB技术论坛上,这些问题可能会得到更快的回答。
我希望这能帮上忙。
致以敬意,
戴夫
https://stackoverflow.com/questions/6633575
复制相似问题