`
forchenyun
  • 浏览: 310047 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Berkeley DB Java Edition存储文件格式概述

阅读更多

 

Bdb je的底层存储格式是Log-Structured File System,即就像写日志那样append only,并且其日志和数据是存在一起不分开的。

因此bdb的存储格式是面向entry的,一个entry或代表一个record,或代表一条日志等等。

从源码分析,bdbentry总共有几十种之多,根据不同的配置使用不同的entry。代码结构是这样的:


      

        je是以一个目录为一个Environment,而一个目录里面可以有多个Database,每个Database可以存储若干key-value,实际上有点像库和表的概念 对于一个Environmrnt来说,其B+tree格式如下:


 

通过Mapping IN和BIN将不同的Database映射分开。

       

逻辑上的B+tree node是这样的:


 

有些db支持duplicate record,因此,对于这种情况下,btree格式如下:

                   

 

多种entry对应一个Java类,下面依次介绍:

Entry Types

Class

Feature

LOG_LN_TRANSACTIONAL

LNLogEntry

Leaf Nodes In Transactional

LOG_LN

LNLogEntry

Leaf Nodes without Transactional

LOG_MAPLN_TRANSACTIONAL

LNLogEntry

MapLN Nodes In Transactional

LOG_MAPLN

LNLogEntry

MapLN Nodes Without Transactional

LOG_NAMELN_TRANSACTIONAL

NameLNLogEntry

Log NameLN when rename or delete database

LOG_NAMELN

NameLNLogEntry

..

LOG_DEL_DUPLN_TRANSACTIONAL

DeletedDupLNLogEntry

Deleted Dup LNs

LOG_DEL_DUPLN

DeletedDupLNLogEntry

LOG_DUPCOUNTLN_TRANSACTIONAL

LNLogEntry

Count of a Dup tree

LOG_DUPCOUNTLN

LNLogEntry

LOG_FILESUMMARYLN

LNLogEntry

File summary like records count

LOG_IN

INLogEntry

Internal Nodes

LOG_BIN

INLogEntry

Bottom Internal Nodes

LOG_DIN

INLogEntry

Duplicate Internal Nodes

LOG_DBIN

INLogEntry

LOG_ROOT

SingleItemEntry

Represent a DbTree

LOG_TXN_COMMIT

SingleItemEntry

Transaction Commit

LOG_TXN_ABORT

SingleItemEntry

Transaction Abort

LOG_CKPT_START

SingleItemEntry

Check point start

LOG_CKPT_END

SingleItemEntry

 

LOG_IN_DELETE_INFO

SingleItemEntry

Remove a child from a IN

LOG_BIN_DELTA

BINDeltaLogEntry

Delta log of BIN

LOG_DUP_BIN_DELTA

BINDeltaLogEntry

 

LOG_TRACE

SingleItemEntry

Log a messages like:

“Close of environment bk1 started”

LOG_FILE_HEADER

FileHeaderEntry

The most import data

LOG_IN_DUPDELETE_INFO

SingleItemEntry

 

LOG_TXN_PREPARE

SingleItemEntry

Transaction Prepare

LOG_ROLLBACK_START

SingleItemEntry

Rollback Start

LOG_ROLLBACK_END

SingleItemEntry

Rollback End

LOG_MATCHPOINT

SingleItemEntry

For Replication Syncup

LogManager不关心具体的entry,而是将相应的entry的内容写入磁盘,而具体是什么类型的entry将通过每个entry的头两个字节体现:

Log type(8 bits)

Provisional(2 bits) Replicated(1 bit) Invisible(1 bit) Version(5 bits)

第一个字节代表entry的类型,而第二个字节代表相关环境信息。

这里分析其中一个很重要的entryLNLogEntry,请看代码:

 

/*
     * Persistent fields in an LN entry.
     */
    private LN ln;
    private DatabaseId dbId;
    private byte[] key;
    private long abortLsn = DbLsn.NULL_LSN;
    private boolean abortKnownDeleted;
    private Txn txn;     // conditional

 

其中的LN又包括以下信息:

 

private static final String BEGIN_TAG = "<ln>";
    private static final String END_TAG = "</ln>";
 
    private byte[] data;
 
    /*
     * Flags: bit fields
     *
     * -Dirty means that the in-memory version is not present on disk.
     * -The last logged bits store the total size of the last logged entry.
     */
    private static final int DIRTY_BIT = 0x80000000;
    private static final int CLEAR_DIRTY_BIT = ~DIRTY_BIT;
    private static final int LAST_LOGGED_SIZE_MASK = 0x7FFFFFFF;
    private static final int CLEAR_LAST_LOGGED_SIZE = ~LAST_LOGGED_SIZE_MASK;
    private int flags; // not persistent

这样最终log到文件中的entry是如下所示:


 

这里我dump了一个做为示例:

<entry lsn="0x0/0xdd5" type="LN/7" prev="0xdb5">
    <ln><node>12</node><data>hidden</data></ln>
    <dbId id="3"/>
    <key v="50 50 54 55 48 52 53 56 "/>
</entry>

 

具体访问时,将根据Lsn这个唯一的标识定位,读取entry返回相关的值。

参考文献

1.Berkeley DB Java Edition Architecture

2.Source Code

3.Log-Structured File System

  • 大小: 4.8 KB
  • 大小: 13.5 KB
  • 大小: 13.8 KB
  • 大小: 19.2 KB
  • 大小: 3.1 KB
25
6
分享到:
评论
7 楼 xugangwen 2017-02-13  
你好 你知道b+树在初始化的时候加载策略么?不会全部加载,一般是怎么加载的?
6 楼 forchenyun 2011-05-19  
liuxuejin 写道
求一份源码?找半天找不到!

oracle官网上面有的,可能最近国外网站不太稳定
5 楼 liuxuejin 2011-05-19  
求一份源码?找半天找不到!
4 楼 liuxuejin 2011-03-11  
一直想研究一下数据库里面的算法和设计,但是却是自不量力,希望博主可以深入浅出的介绍这些,我等后来的人研究透彻了。工资自然上来!
3 楼 chengqianl 2010-12-13  
收益了,相当的给力
2 楼 forchenyun 2010-12-13  
后面会持续发关于Berkeley db je的相关优缺点
1 楼 sandaobusi 2010-12-13  
最近正想研究这个,关注一下。

相关推荐

    Berkeley DB Java Edition 4.1.10.zip

    Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。 能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。 多线程支持,JE使用超时的方式来处理...

    Berkeley DB Java Edition学习报告

    Berkeley DB Java Edition(以下简称JE)是由美国Sleepycat Software公司(后被Oracle公司收购)开发的一套开放源码的嵌入式数据库,它采用K/V存储,能为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务

    Berkeley DB Java Edition (JE)

    Berkeley DB Java Edition (JE) 官方7.5.11下载版本。 相关介绍 https://blog.csdn.net/hadues/article/details/80854288

    Berkeley DB Java Edition

    oracle 官方实现的 基于B+树 文件磁盘 数据存储 的文件数据库。

    Berkeley DB Java Edition 5.0.73

    很好用的NoSQL 数据库, google 使用此数据库存储自己的用户信息, 它能够处理海量数据,效率高

    Berkeley DB Java Edition数据结构的研究与应用.pdf

    #资源达人分享计划#

    BerkeleyDB Java Edition用户手册

    Java版本的Berkeley DB用户手册,找了好久

    Berkeley DB Java 版 4.0.92

    Oracle Berkeley DB Java 版是一个开源的、可嵌入的事务存储引擎,是完全用 Java 编写的。与 Oracle Berkeley DB 类似,Oracle Berkeley DB Java 版在应用程序的地址空间中执行,没有客户端/服务器通信的开销,从而...

    Berkeley_DB_Java_Edition_使用手册

    Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。

    Berkeley DB Java Edition初步

    NULL 博文链接:https://xpenxpen.iteye.com/blog/2124921

    Berkeley DB的java版本

    Berkeley DB Java Edition JE 是一个完全用JAVA写的 它适合于管理海量的 简单的数据 能够高效率的处理1到1百万条记录 制约JE数据库的往往是硬件系统 而不是JE本身 多线程支持 JE使用超时的方式来处理线程间的死琐...

    berkeley db java

    自己稍微封装了一下,可以当成简单的map来使用。

    Berkeley DB Java Edition 4.0.92 开发包

    这个是最流行的嵌入式高性能开源数据库内核开发包,java企业开发必备。

    Java嵌入式NoSQL数据库之Berkeley DB Java Edition

    NULL 博文链接:https://rensanning.iteye.com/blog/1872481

    Berkeley DB 读取样例

    嵌入式数据库Berkeley DB Java Edition Berkeley DB的使用 使用Berkeley DB的一般步骤 创建、打开、操作、关闭数据库环境Environment

    BerkeleyDB_java_jar包

    使用BerkeleyDB数据库,java语言开发需要的jar包资源,7.5.11版本

    Berkeley_DB_Java_Edition.zip_海量 数据

    Berkeley DB Java Edition (JE)是一个完全用JAVA 写的,它适合于管理海量的,简单的 数据。 l 能够高效率的处理 1 到 1 百万条记录,制约 JE 数据库的往往是硬件系统,而不是 JE 本身。 多线程支持,JE 使用超时的...

    Java-Edition-BerkeleyDB-3.1.0.zip_BerkeleyDB

    Java-Edition-BerkeleyDB-3.1.0,国外的开源数据库,供大家参考

    java berkeley-db demo

    Berkeley DB Berkeley DB(BDB)是一个高效的嵌入式数据库编程库,C语言、C++、Java、Perl、Python、...#oracle 介绍关于berkeleydb http://www.oracle.com/technetwork/cn/database/berkeleydb/index-085507-zhs.html

Global site tag (gtag.js) - Google Analytics