我们正在使用核心Berkeley(dbbaseapi)并且已经处理了9条lack条记录的Write / ReadCDRFile,现在我们在使用事务时没有使用如下交易的情况下性能有所不同: -
使用辅助数据库概念(使用交易): -
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);
所以回复一下如何在数据库和环境中内部使用事务
答案 0 :(得分:0)
从您提出的后续问题中,听起来您已经超越了这个初始问题。对于记录,当为事务配置时,BDB会对事务日志执行写操作,以便在应用程序或系统崩溃时提供可恢复性(在没有事务的情况下使用BDB时无法自动恢复)。
使用事务时,默认情况下BDB将等到事务一直写入磁盘(请参阅Getting started with Transactions的前两部分)以获取有关事务持久性的更多信息以及如何通过放松来提高吞吐量耐久性限制)。
除了放宽持久性约束之外,如上所述,您还可以通过以下方式提高吞吐量:a)在同一事务中包含多个操作(插入),而不是在单独的事务中插入单个记录,以及b)使用通过putMultiple API call批量放置API(这将减少预调用JNI开销)
将来,OTN上的Berkeley DB技术forum可以更快地回答这些问题。
我希望有所帮助。
问候,
戴夫