fastDB学习笔记

来源:互联网 发布:盗墓笔记重启豆瓣知乎 编辑:程序博客网 时间:2024/06/06 16:46
 FastDB基本情况:
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关联的记录也被删除。