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关联的记录也被删除。