Fastdb内部采用C/C++实现,支持各种面向对象的特性:数据库定义时支持类的继承,属性可以是数组,对象引用(关联)。
不足:
1. FastDB 不能单独取出特定记录的特定属性,只能取出完整的记录。
2. FastDB 在建表的时候支持继承。但是在访问数据的时候只能访问指定的类。
编程接口:
1, C++接口:FastDB 的 C++接口是其开发者推荐使用的接口。
2, 调用层接口(CLI):
调用层接口是纯 C 语言编写的,它可以很容易地映射成各种编程语言,同时也提供了本地/网络 socket 访问数据库 方式。 它弥补了 C++接口的几个缺点:
1)局限于 C++编程;
2)局限于本地数据访问;
3)局限于已有的强类型定义。
CLI接口包含:通用调用层接口和本地调用层接口
通用调用层接口:通用调用层接口使得客户端可以通过网络访问远方的 FastDB 数据库
本地调用层接口:本地调用层接口使得客户端可以直接访问本地的 FastDB 数据库,其访问效率比通用调用层接口要高。
由于在 DAF 的接口规范中,类和属性都是通过 URI(字符串)或者 ResourceID(两
个无符号 64 位整数)描述的,而没有确切的 C++类型定义,这就决定了无法采用C++接口,而只能采用调用层接口访问 FastDB。
实现步骤:
1, 采用C++类的方法基于FastDB构建 CIM 数据库,将这样的程序编译成可执行程序并运行,就在计算机中建立了 CIM 数据库。
2, 导入数据:在 FastDB 中构建了数据库以后,我们就可以导入 CIM 数据了。填充 CIM数据库有多种方式,可以从已有的CIM XML中导入,也可以从CIS写接口导入数据。由于 FastDB 可以从 XML 文件中通过 import 命令导入,我们只需要将CIM XML 文件转化成 FastDB 支持的 XML 文件即可。
-----------+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------
概述
Fastdb传说是读写效率最高的内存数据库。他是一套库,向应用程序提供访问数据的一系列方法。他只能运行在本地,不支持网络访问,这点和IBM的内存数据库soliddb有点类似。它支持磁盘模式和非磁盘模式。Fastdb也支持事务,错误恢复和查询优化等功能。
内存数据结构组织
采用了两种数据组织方式,达到快速索引的目的,一种是传统的Hash组织方式,另一种,则采用了T树。下面可以比较一下这两种方式:
1. HASH的组织方式,具有最高的查找效率。但是,对数据进行插入操作时,假如键值冲突发生频率较高,这样就会导致效率下降。
2. T树查找效率仅次于HASH,它继承了B树和AVL树的优点,B树解决了在查找过程中频繁的对磁盘进行I/O的问题。AVL树的查找效率是最高的。假如又频繁的添加,删除动作,就尽量避免使用T树这种组织形式,因为,频繁的添加删除可能导致T树失去平衡,需要频繁的调整,同时,频繁的添加删除操作,也使得T树的节点频繁的合并和分裂。这样,效率会变的比较低。
3. 在fastdb中,申明为HASH的KEY,采用HASH这种结构,申明为INDEXED的KEY采用了T树这种形式。
磁盘模式与非磁盘模式的性能
在磁盘模式下,所有的数据将写到磁盘的文件中,对于这种模式,性能和一般的数据库差不多。对于非磁盘模式,效率非常高,网上有一篇文章,对fastdb和磁盘数据库的性能进行了对比。默认情况下是磁盘模式,要使用非磁盘模式,重新编译,加入
-DDISKLESS_CONFIGURATION
推荐文章:http://www.360doc.com/content/11/0227/02/6001117_96477992.shtml
在采用非磁盘模式的时候,要注意因为内存越界的问题导致进程crash。因为,对于非磁盘模式fastdb是实现划分了一大块共享内存,当超出这块内存的容量时,就会有可能导致程序crash。
事务和备份
Fastdb支持ACID事务机制,用户提交的数据将被同步的写到磁盘,这种同步操作,性能是很低的,基本上1秒钟很难处理超过100个事务提交。同时,fastdb考虑了这种同步提交的性能很难用到对性能要求较高的系统上,提供了一种延时事务提交机制,也可以理解为异步提交,在用户指定时间之后,真正的数据同步才会发生。
Fastdb提供自动备份机制,可以在数据库运行期间,自动得对数据库文件定期进行备份。
主备模型
支持1个active的fastdb和N个standby的fastdb。所有应用在active节点上的操作,都将同步到standby节点上,一旦active挂掉,从standby中选择一个作为active的节点,当挂掉的active节点被重启后,变为standby的节点。编译时,加入-DREPLICATION_SUPPORT
。
实体间关系描述
RELATION:用于描述两张表(对象,实体)之间的关系,可以是1对1,1对多,多对多。
例子:
两个类A,B:
一对一:
A:
dbReference<B> b;
TYPE_DESCRIPTOR (RELATION(b,a))
B:
N/A
一对多:
A:
dbArray<dbReference<B>> bs;
TYPE_DESCRIPTOR (RELATION(bs,a))
B:
N/A
多对多:
在A中:
dbArray<dbReference<C>> cs;
TYPE_DESCRIPTOR (RELATION(cs, a))
在B中:
dbArray<dbReference<C>> cs;
TYPE_DESCRIPTOR (RELATION(cs , b));
在C中:
dbReference<A> a;
dbReference<B> b;
TYPE_DESCRIPTOR((KEY(a , INDEXED) , KEY(b , INDEXED)))
OWNER: 这个宏和RELATION类似,唯一区别在于,当owner被删除,与owner关联的记录也被删除。