Berkeley DB 源代码分析 (4) --- 事务和日志

原创 2012年03月25日 15:54:45


1. in nested txns, when child txns of any level commit, __txn_child logs are always written, no matter the child txn commits explicitly or implicitly by its parent's commit.

2. Read only txns don't write anything into the log because the __txn_regop is only written if any log records are written before the commit.

3. when the outermost txn aborts, all its children aborts. At recovery, we can not figure out the parent-children relationship, and we don't need to know this, we simply regard all abort txns as indepent outermost txns, and undo their changes. However, during verification without this information, we may report false alarms: we may report a parant txn T0's aborted child T1 to be modifying a page owned by T0, since from the log we only know T1 aborted but can't know T1 is child txn of T0.

4. So we have to add a "__txn_begin" log record for each txn to record a txn's parent txnid. But it's impossible to add a "__txn_begin" log record only for txns that has written any thing, because we don't know the begin_lsn of a txn before its first log record is written into the log, and at the same time we need the begin_lsn to write the __txn_begin record. However if we don't record __txn_begin before any other logs of this txn (e.g. log it after the 1st record of this txn), we can avoid writing it for read only txns.


Before checkpointing, we write a __dbreg_register of type DBREG_CHKPNT for each db handle, and then write a __txn_ckp record; Before recovery completes, we write a __dbreg_register of type DBREG_RCLOSE for each db handle, and then write the __txn_ckp record, and followed by a __txn_recycle record.
版权声明:本文为博主原创文章,未经博主允许不得转载。

Berkeley DB数据库和日志文件归档

Berkeley DB数据库和日志文件归档 归档数据库和日志文件目的是提供面对数据库的灾难性故障的可恢复性,最大限度地减少发生物理硬件故障导致数据丢失。 首先,你可能需要定期创建数据库快照(也就是...
  • wilbertzhou
  • wilbertzhou
  • 2014年04月08日 09:46
  • 1527

[转]Berkeley DB实现分析

Berkeley DB实现分析
  • heiyeshuwu
  • heiyeshuwu
  • 2016年05月27日 20:44
  • 3198

Berkeley DB基础教程

一、Berkeley DB的介绍 (1)Berkeley DB是一个嵌入式数据库,它适合于管理海量的、简单的数据。如Google使用其来保存账户信息,Heritrix用其来保存froniter. (...
  • jediael_lu
  • jediael_lu
  • 2014年05月29日 15:21
  • 14167

[转]Berkeley DB简介及安装使用

1        简介 BDB的全称Berkeley DB,是一套开放源码的嵌入式数据库的程序库。它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。Berkeley DB为数据的...
  • anda0109
  • anda0109
  • 2014年05月16日 10:54
  • 1301

"Berkeley DB"数据库的优点和不足之处

Sleepycat软件公司出品的Berkeley DB是一种在特定的数据管理应用程序中广泛使用的数据库系统,在世界范围内有超过两亿的用户支持.许多世界知名的厂商,像Amazon, AOL, Briti...
  • hit_hlj_sgy
  • hit_hlj_sgy
  • 2013年09月17日 17:34
  • 1933

Berkeley db使用方法简介(c接口)

1. 打开数据库 首先必须调用db_create()函数初始化DB句柄,然后就可以使用open()方法打开数据库了。默认情况下,如果数据库不存在,DB不会创建。为了覆盖缺省行为,可以在open()调...
  • bg205
  • bg205
  • 2013年09月19日 22:42
  • 1063

[转]Berkeley DB设计经验

关于Berkeley DB数据库的总体设计与实现的文章
  • heiyeshuwu
  • heiyeshuwu
  • 2016年05月27日 20:24
  • 3627

比Redis更快:Berkeley DB面面观

本问摘自:http://www.cnblogs.com/me115/p/3395396.html?ADUIN=173746627&ADSESSION=1383179408&ADTAG=CLIENT.Q...
  • wupangzi
  • wupangzi
  • 2015年03月27日 11:32
  • 520

[转]Berkeley DB介绍及主从复制机制

Berkeley DB(BDB)是一个高性能的嵌入式数据库编程库(引擎),它可以用来保存任意类型的键/值对 (Key/Value Pair),而且可以为一个键保存多个数据。Berkeley DB可以支...
  • heiyeshuwu
  • heiyeshuwu
  • 2016年05月27日 20:37
  • 2533

C#工程开发中 编译、安装、使用Berkeley DB步骤 (C#版)

最近在搞一款基于C#的网络爬虫,在构建爬虫队列中需要使用到berkely DB,找了很多资料,要不就是java版的(搞java开发就是方便,开源东西一大把),但C#的寥寥无几,或者版本老旧,在此记录一...
  • chinalizijian
  • chinalizijian
  • 2015年11月08日 17:24
  • 362
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Berkeley DB 源代码分析 (4) --- 事务和日志
举报原因:
原因补充:

(最多只允许输入30个字)