`
forchenyun
  • 浏览: 312183 次
  • 性别: 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

    **Berkeley DB Java Edition**,简称BDBJE,是由Oracle公司开发的一款高度可移植的、基于文件系统的数据存储解决方案,特别适用于需要高效、可靠且无服务器的数据管理的应用场景。这款数据库系统采用B+树作为其核心...

    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 5.0.73

    - **Berkeley DB Java Edition的JAR文件**:这是运行BDB JE所需的核心库文件,包含所有必要的类和资源。 - **文档**:可能包括用户指南、API参考、示例代码等,帮助开发者理解和使用BDB JE。 - **示例**:提供演示...

    Berkeley DB Java Edition学习报告

    Berkeley DB Java Edition (JE) 是一款开源的嵌入式数据库管理系统,由...总的来说,Berkeley DB Java Edition是一个强大的、轻量级的数据库解决方案,尤其适用于需要高效本地存储和事务处理能力的Java应用程序。

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

    Berkeley DB Java Edition(JE)是一种为Java程序提供内嵌式、事务保护的数据库引擎,它继承了Berkeley DB家族的优点,包括快速、可靠和具备容错能力的数据管理特性。为了深入理解其数据存储结构,有必要对JE使用的B...

    Berkeley_DB_Java_Edition_使用手册

    #### 一、Berkeley DB Java Edition (JE) 概述 Berkeley DB Java Edition (简称 JE) 是一款高性能、轻量级的NoSQL数据库解决方案,完全基于Java语言开发。它特别适用于需要高效管理大量简单数据的应用场景。 **...

    Berkeley DB Java Edition 4.0.92 开发包

    《Berkeley DB Java Edition 4.0.92 开发包详解》 Berkeley DB Java Edition(简称BDB JE)是Oracle公司推出的一款强大的、高度可定制的嵌入式数据库系统,尤其适用于Java应用程序。这款数据库引擎以其轻量级、高...

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

    Berkeley DB Java Edition(简称BDB JE)是一种高性能、轻量级的嵌入式数据库系统,由Oracle公司开发,广泛应用于需要快速数据存储和检索的应用场景。它并非传统的关系型数据库管理系统(RDBMS),而是一种键值对...

    Berkeley DB Java Edition 4.1.10.zip

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

    Berkeley DB的java版本

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

    Berkeley DB Java 版 4.0.92

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

    BerkeleyDB_java_jar包

    这可能是BerkeleyDB Java Edition的jar文件,表示BerkeleyDB Java版的7.5.11版本。这个文件通常会包含以下组件: 1. **BerkeleyDB引擎**:这是数据库的核心部分,处理数据的读写操作,包括事务处理、并发控制、恢复...

    Berkeley DB Java Edition初步

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

    berkeley db java

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

    Berkeley DB Java 版直接持久层基础1

    Berkeley DB Java 版本支持多种数据存储格式,包括Btree、Hash、Queue等。它也支持事务处理、锁机制和日志记录等功能,这使得它可以满足复杂的数据存储需求。 在Java应用程序中,使用Berkeley DB Java 版本可以实现...

    嵌入式Berkeley DB Java版与Derby技术研究.pdf

    Berkeley DB Java Edition以其简洁的键值存储模型和API,更适合快速开发简单的数据存储应用,而Apache Derby则提供了更丰富的SQL支持和关系型数据库特性,更适合需要进行复杂查询和事务处理的环境。在对象持久化方面...

    Berkeley DB数据库最新版

    文件格式** Berkeley DB的数据以文件形式存储,可以是普通磁盘文件或内存映射文件,这使得数据可以直接被应用程序访问,提高了性能。同时,BDB提供了事务处理机制,确保数据的一致性和完整性。 **3. 事务支持** ...

Global site tag (gtag.js) - Google Analytics