eXtremeDB 用户指南
北京领先实时科技有限责任公司 编译版权
北京市海淀区上地信息路1 号创业园2#-503 Tel: +86 10 62987951 Fax: +86 10 82895101
北京领先实时科技有限责任公司 翻译版权 资料汇编 用户指南
目 录
第一章 简 介.........................................................................................................................................3
产品概述.........................................................................................................................................3
我们的目标.....................................................................................................................................3
设计原则及实现概要.............................................................................................................4
eXtremeDB文档 .............................................................................................................................4
语法约定.................................................................................................................................4
第二章 数据库概念...............................................................................................................................6
导言.................................................................................................................................................6
定义.................................................................................................................................................6
数据库设计.....................................................................................................................................8
数据库模型.....................................................................................................................................9
层次模型.................................................................................................................................9
网络模型...............................................................................................................................10
关系模型...............................................................................................................................10
对象模型...............................................................................................................................10
对象关系模型....................................................................................................................... 11
摘要....................................................................................................................................... 11
例子....................................................................................................................................... 11
访问方法.......................................................................................................................................13
OID .......................................................................................................................................13
AUTOID ...............................................................................................................................14
索引.......................................................................................................................................14
链表.......................................................................................................................................15
历史记录...............................................................................................................................15
第三章 操作概述.................................................................................................................................17
与宿主语言的集成.......................................................................................................................17
系统组件.......................................................................................................................................17
数据定义语言.......................................................................................................................17
基本数据类型.......................................................................................................................18
预处理...................................................................................................................................19
声明语句...............................................................................................................................19
结构体声明...........................................................................................................................20
枚举声明...............................................................................................................................21
类声明...................................................................................................................................21
元素语句...............................................................................................................................22
存取语句...............................................................................................................................23
事件语句...............................................................................................................................24
DDL处理器 ..........................................................................................................................25
调试及优化运行时...............................................................................................................26
应用程序接口...............................................................................................................................26
应用无关的接口...........................................................................................................................27
数据库控制...........................................................................................................................27
事务控制...............................................................................................................................30
游标控制...............................................................................................................................31
辅助接口-堆管理...............................................................................................................32
生成接口.......................................................................................................................................33
基于oid的接口......................................................................................................................33
北京市海淀区上地信息路 1 号 2#-503 电话:+86 10 62987951 传真:+86 10 82895101
1
北京领先实时科技有限责任公司 翻译版权 资料汇编 用户指南
autoid接口.............................................................................................................................34
历史接口...............................................................................................................................35
事件接口...............................................................................................................................35
“New”接口............................................................................................................................39
“Delete”接口.........................................................................................................................40
“Put”, “Checkpoint”, “Get”及相关接口...............................................................................40
搜索方法...............................................................................................................................44
_find准确匹配查找 ......................................................................................................44
_search局部键值(通配符)及范围查找 ........................................................................44
块支持...................................................................................................................................46
返回码和错误处理.......................................................................................................................46
目录结构.......................................................................................................................................50
第四章 数据库设计.............................................................................................................................51
我们的目标...................................................................................................................................51
数据库设计注意事项...................................................................................................................51
逻辑与物理...........................................................................................................................51
页尺寸...................................................................................................................................52
初始数据库尺寸...................................................................................................................52
扩展数据库尺寸...................................................................................................................52
估算oid条目的数量..............................................................................................................53
OID设计注意事项................................................................................................................53
结构体的使用.......................................................................................................................53
标题三类声明的紧凑修饰符...............................................................................................53
何时使用紧凑模式...............................................................................................................54
Char与字符串 ................................................................................................................54
块...........................................................................................................................................54
矢量.......................................................................................................................................54
可选结构体字段...................................................................................................................54
自愿索引...............................................................................................................................55
散列和树索引.......................................................................................................................55
链表属性...............................................................................................................................55
结构体向量与类的对象.......................................................................................................56
第五章 数据库操作.............................................................................................................................58
简单应用程序—代码段...............................................................................................................58
写...........................................................................................................................................58
读...........................................................................................................................................58
简易模式...............................................................................................................................58
简单接口...............................................................................................................................59
基本数据类型...............................................................................................................................66
eXtremeDB数据库类型 ...............................................................................................................67
eXtremeDB事务优先级 ...............................................................................................................67
eXtremeDB事务类型 ...................................................................................................................68
eXtremeDB搜索操作代码 ...........................................................................................................68
eXtremeDB游标类型 ...................................................................................................................68
eXtremeDB类统计信息 ...............................................................................................................68
eXtremeDB事件类型 ...................................................................................................................69
北京市海淀区上地信息路 1 号 2#-503 电话:+86 10 62987951 传真:+86 10 82895101
2
北京领先实时科技有限责任公司 翻译版权 资料汇编 用户指南
第一章 简 介
产品概述
eXtremDB是一款内存嵌入式数据库系统(IMDS),该数据库适用于各种嵌入式系统和其
它需要高性能、小尺寸、紧密存储、零内存分配或几种属性兼有的应用领域。
作为一款内存式数据库,eXtremeDB剔除了复杂而昂贵的文件管理和缓存管理任务。剔
除这些功能带来了以下几点好处:
● 显著地缩短了应用程序和数据之间的编码路径。更少的CPU指令换来了性能的提高。
在当前的硬件条件下,eXtremeDB的读事务在纳秒级,而写事务只需要几微秒。
● 剔除与缓存及文件管理相关的复杂逻辑,减小代码规模(尺寸),同时也去除了指定
数据块的多个冗余拷贝(例如应用程序中、数据库缓存中、文件系统缓存中及文件系
统自身的拷贝)。
● 内存式数据库与基于磁盘的数据库相比,采取不同的优化策略。后者关注于将文件
的I/O操作降低到最少,通过使用内存和CPU操作指令来替换文件I/O操作。内存式数
据库不必考虑磁盘的I/O操作,因此可以通过减少CPU指令和充分利用已有的空间来
存储更多的数据优化性能。所以存取一定量的数据时,eXtremeDB所需的空间只是基
于磁盘数据库的一部分。
● 一些嵌入式系统,如飞行安全相关的系统,不允许进行动态内存分配,因为这样可
能会引起内存泄漏而最终导致系统失效。而eXtremeDB从不动态分配内存。
eXtremeDB适用于各种操作系统,包括嵌入式操作系统、实时操作系统、桌面操作系统
和服务器操作系统。对于单处理器多任务构架的操作系统(如VxWorks),eXtremeDB标准
版可以管理内存中任何专用区域,并且可以控制多任务或线程之间进行同等的访问。对于多
处理器构架的操作系统(如Linux、QNX实时操作系统等),eXtremeDB共享内存版能够管
理位于共享内存中的数据库,并且能够控制多个进程之间进行同等的访问,而每个进程又可
能包含多个线程。
eXtremeDB XML是eXtremeDB支持XML的版本,该版本扩展了编程接口,使之支持如下
操作:从XML文档中插入和更新对象,以XML文档形式从数据库中提取对象,以XML Schema
格式摘录类的定义,此外还可以控制eXtremeDB XML策略的各个方面。eXtremeDB XML将
在eXtremeDB XML附录中详细说明。eXtremeDB高可用性是McObject公司为需要最高限度保
证正常运行时间的系统而发布的版本。基于强壮的、两阶段提交协议的eXtremeDB HA保证
了主数据库实例和一个或多个备用数据库实例的同步维护。eXtremeDB HA通过附加的功能
扩展了eXtremeDB核心编程接口,允许备用数据库连接到主数据库并与之同步,备用数据库变
为主数据库以及其它控制接口都需要这一扩展接口。eXtremeDB HA将在eXtremeDB HA附录
中详细说明。
我们的目标
eXtremeDB的主要目标是为适用eXtremeDB的各种应用程序提供高性能。这些应用程序
不同于工资单或库存等普通数据库商业应用程序。首先,基于eXtremeDB的应用程序运行在
只有少量内存和缺少永久存储设备的廉价处理设备上。其次,即使在速度很慢的处理器上数
据访问依然需要保持比较高的速度,简单查询和事务最多不超过几毫秒,与企业级数据库相
北京市海淀区上地信息路 1 号 2#-503 电话:+86 10 62987951 传真:+86 10 82895101
3
北京领先实时科技有限责任公司 翻译版权 资料汇编 用户指南
比,这些设备上的数据存储量比较小,事务所持续的时间通常也非常短。此外,需要存储的
数据可能是复杂的,实际上它差不多总是动态变化的。因此,当设计eXtremeDB内核时我们
应遵循以下几项主要原则:
◆最小化支持持久数据所必须的资源——实质上就是将内存资源减到最小。对象都以很
小的尺寸保存在数据库中——eXtremeDB引进的额外开销不但非常低,而且这些开销
在应用程序中也是可控制的;另外,数据层提供了对对象数据的压缩。
◆保持极小的必要堆空间——在某些配置上eXtremeDB只需要不到1K的堆空间
◆维持极小的代码体积
◆通过紧密的集成持久存储和宿主应用程序语言消除额外的代码层。通常目标应用程序
使用大量小规模的数据库操作而非大数据量的操作。这意味着通过指向对象的指针或
引用来从对象中获得数据的操作必须非常迅速快捷,否则额外开销(例如发送一个消
息的开销)会高得让人无法接受。eXtremeDB的数据存取方法使得对持久对象的引用
能够和引用临时数据一样快速。
◆提供对动态数据结构的本地支持,例如变长字符串、链表和树。eXtremeDB通过以一
种高效(快速)、安全(事务)、紧凑(内存)的方式来支持动态数据,从而 “扩
展”了“C”语言。
设计原则及实现概要
eXtremeDB的设计目标源自eXtremeDB目标应用程序的常见需求,这些高事务率的程序
通常具有硬实时或软实时的要求,使用动态的数据流和有限的硬件资源。典型的应用领域包
括网络应用(IA)、过程控制、网络/电话以及机顶盒应用。eXtremeDB完全支持DBMS ACID
事务特性,并提供易用的面向对象的应用程序开发方法。
eXtremeDB 文档
本用户手册配备了参考指南做为补充文档,其中列出了在使用eXtremeDB过程中可能用
到的所有函数。读者可以从网站下载白皮书 (http://www.mcobject.com),并可对照随
eXtremeDB附带的样例程序源码。
语法约定
本文提到eXtremeDB产生的函数时通常用如下谓词来表示数据库设计的元素,
classname
structname
fieldname
indexname
eventname
classname_fieldname_put( classname *handle, value)
在eXtremeDB的函数命名规范约定中包含了如下函数说明:
该函数说明描述了用于为每个类的每个字段填充数据库对象字段而产生的一族函数。
本书关于DDL语法的说明中,用方括号“[]”来表示可选元素,用省略号“…”表示重复
项,用竖杠“|”表示可选项,斜体字表示需要进一步定义的项。例如:
field-statement:
北京市海淀区上地信息路 1 号 2#-503 电话:+86 10 62987951 传真:+86 10 82895101
4
北京领先实时科技有限责任公司 翻译版权 资料汇编 用户指南
type-identifier | struct-name field-name;
field-statement声明了一个类或一个结构体的成员,该成员的类型必须被声明(或者是基本数
据类型,或者是由typedef定义的数据类型,或者是前面定义过的结构体)。其中的field-name
不需要进一步的定义。
北京市海淀区上地信息路 1 号 2#-503 电话:+86 10 62987951 传真:+86 10 82895101
5
北京领先实时科技有限责任公司 翻译版权 资料汇编 用户指南
第二章 数据库概念
导言
现在我们准备讨论基本的数据库概念,并将这些概念与eXtremeDB的特性结合起来。即
使您对数据库管理系统非常有经验,我们也鼓励您能够仔细阅读下面的章节,读完之后,您
会完全理解eXtremeDB以及它与其它数据库产品的相对定位。
我们对于数据库系统的看法立足于嵌入式和实时系统。因此,可能这些章节所展现的关
于数据库理论的看法不同于您原有的观点。我们的目标是利用先进的程序设计技术,为实时
和嵌入式应用程序提供高效的存储解决方案,为嵌入式应用开发人员提供高生产率的数据库
开发工具。对于外部的应用程序,eXtremeDB提供了丰富的面向对象的数据库接口,这使开
发人员能够极其方便地描述、存储、操作应用特定的数据。在内部,eXtremeDB使用为它所
支持的数据表示方式而进行特殊优化的存储布局和访问方法。
定义
“数据库”是为了能够有效的保存和提取数据而组织的相关数据的集合。如果要清楚地
说明数据库,应该从说明一个或多个特定的数据库的实现特性开始。
每个数据库都有若干组基本元素,一组元素的定义为“类”,其他常用的术语还有“表”
和“记录定义”。存储在数据库中的“类”的“实例”被称为“对象”,与之相似,“记录
定义”的实例就是“行”。正如本文将要详细探讨的,eXtremeDB的类不仅仅是关系数据库
的表或其他数据库的记录定义。我们的目的并不是把eXtremeDB的元素或关系和其它类型的
数据库等同,而是通过概括元素的层次,并和常见的数据库体系结构的元素相对比来帮助理
解。
在大部分面向对象的语言中都使用术语“类”,比如C++或Java。类定义了对象的属性
和用于控制对象行为的方法。对于持久化的eXtremeDB类,这种定义也是正确的,因为这种
数据库类定义了对象的字段和访问方法。
在eXtremeDB中元素通常被称为“字段”。其它同义的术语有“属性”和“列”。字段
具有“类型”属性。类型决定了元素是容纳一个字符还是一个整数,是一个实数还是二进制
数据。附录A中列出了eXtremeDB的数据类型。eXtremeDB通过blob和vector数据类型支持任
意大的字段,通过structure类型支持复合型字段。
blob是一个任意大的字节流、无类型的难以理解的数据,eXtremeDB认为它是没有结构
的。典型的例子是音频流(.wav文件)、视频流(.mpg文件)、图形文件(.jpg文件)和大于64K的
文本流。
Vector是任意大的有类型的数据流(矢量元素),例如由两个字节长的整数、字符串、
结构体组成的流。在eXtremeDB中,可以定义除blob之外的任何类型的向量。在描述真实世
界中复杂的对象时向量是非常有用的,例如描述树型数据结构。除将字段组装成类之外,
eXtremeDB还提供了建立二级类(我们称之为结构)的工具。结构声明定义了一个类型的名称,
并声明结构的元素,这些元素可以具有不同的类型。结构体和简单类型是构造对象定义的基
石。结构体可以被用作其他结构体的元素。与其他元素类型一样,你可以定义结构体矢量。
一般说来,字段可以是简单类型的也可以是复杂类型的。简单字段是原子类型的,例如
字符、整数、字符串等。复杂字段可以是简单数据类型的向量、结构体(结构体可能还包含
北京市海淀区上地信息路 1 号 2#-503 电话:+86 10 62987951 传真:+86 10 82895101
6