转载自:http://blog.csdn.net/hejianhua/article/details/6656404

内存数据库fastdb的使用研究报告

相对于传统磁盘数据库,内存数据库通过将数据完全加载到内存,在内存中实现对数据的管理,在数据同步、数据传送、事务处理、并行操作等方面进行了相应的改进设计,使得内存数据库在处理数据上能够比磁盘数据库快得多,可以有效地解决计费系统中信控、实时累账等部分对系统响应要求高的问题。

项目决定在信控模块使用内存数据库机制取代账单中心模式进行实时累账优惠触发信控。

以下是对FastDB进行的几点说明:

【开源代码链接:http://sourceforge.net/projects/fastdb】

1、 功能归纳

1)内存数据库具备传统数据库的一些基本功能:

A:数据的管理,内存数据库机制是支持永久数据的管理的,包括数据库的的定义、存储、维护等功能。

B:数据的操作,内存数据库支持对数据进行增,删,改,查,数据完整性校验等一些基本功能。

C:事务管理,内存数据库支持调度,进程间、线程间的一些并发等操作。

d.数据恢复备份机制,内存数据库支持在线备份和系统崩溃后的自动恢复。

2)FastDB在功能上特有的一些特点

A:查询优化,与传统数据库管理系统咋红执行查询相比,当所有的数据存在于内存当中时,查询的数度是非常快的,但是FastDB还是进一步使用了索引(hash,T-tree)、反向指针和查询并行化进行了查询优化。

B:提供了一个灵活方便的应用程序语言接口,能够方便写出查询等语句。

2、工作原理

FastDB是一个高效率的内存数据库系统,在磁盘上的数据库文件和使用该数据库的每一个应用程序占用的虚拟内存空间相映射,这样取消了数据文件和缓冲池中的数据传输。再将整个文件数据读入内存,并且使用了高性能的锁工具实现了只读模式线程间、单个更改模式线程和多个只读模式线程间的并发执行。FastDB通过位图实现对内存进行分配,最小单位块是分配量子(16字节)。如此大大提高了数据引用的局部性(对象数据尽可能分配在连续的内存区域),最小化了修改页的数目和减少了事务提交时间。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作,恢复效率很高,在存储数据结构上可以采用T-tree结构(T-tree和AVL-tree相似,只是T-tree中每个节点中顺序存储了多个值),对于大量相似重复性数据的查询性能相当高;也可以采用Hash存储,这是用关键字段定位表中记录的最好办法(采用等号进行查询)。

影子根页算法概述:FastDB数据库中每条对象都具有唯一的标识符(OID),用作一个数组(对象索引)的下标,元素值表示对象的一个句柄,在FastDB数据库中存在两个索引(当前索引和影子索引),当某个对象第一次被修改时,它会创建一个副本,当前索引中的对象句柄被修改指向副本,影子索引仍然包含一个指向该对象原始版本的句柄。所有更改发生在副本上,FastDB在对象索引的一个特殊位图页上标记出哪个索引包含修改过的对象句柄。

当一个事务被提交时,FastDB首先检查对象索引的尺寸的大小,若增长了,还会重新为对象索引的影子副本重新分配内存,然后释放“旧对象”占用的内存,释放后,将修改过的所有位图页flush到磁盘上,然后FastDB将改变数据库头部中的当前对象索引指示符,以切换对象索引的角色。当前对象索引将变成影子索引之后,FastDB 把修改过的所有句柄从新的对象索引中复制到先前是影子的、现在已成为当前的对象索引中。此时,两个索引都得到了同步。(具体内存块的移动索引管理细节需要进一步琢磨)

3、 部署方法

1)应用程序编译环境需求,首先是任何一个FastDB应用程序必须包含头文件:fastdb.h;

然后是可以选择调用库文件(FastDB编译后提供静态库(libfastdb_r.a)和共享库两种库(libfastdb_r.so/ libfastdb_r.so.2)给调用);

最后是FastDB提供很多编译选项接口,用户可以根据需要进行设置,比如:容错支持,无盘模式,锁检测清理机制等等功能。

2)运行系统环境需求,理论上说,内存加载的数据库文件规模最小是1MB,上限就是内存和磁盘的容量了(FastDB 的整个优化设计是基于真个数据库系统存放在机器物理内存中,但是它依然支持将应用在规模超过物理内存的数据库上,只是效率不会很高)

4、接口调用方法

1)FastDB提供了subsql交互式工具供用户进行备份,查询,监控等。(按着提示走即可)

2)C++接口

A:打开或创建数据库:

dbDatabase db(parameter);

db.open(parameter);

mode的有:dbReadOnly,dbAllAccess,dbConcurrentRead,dbConcurrentUpdate四模式

B:FastDB支持的数据类型:

类型                     描述

bool                     布尔类型 (true,false)

int1                      一个字节的带符号整型(-128..127)

int2                      两个字节的带符号整型(-32768..32767)

int4                      四个字节的带符号整型(-2147483648..2147483647)

int8                      八个字节的带符号整型(-2**63..2**63-1)

real4                    四个字节的ANSI 浮点型

real8                    八个字节的双精度浮点型

char const*           非中断整型

dbReference<T>    到类T 的指针。

dbArray<T>          元素类型是T 的动态数组。

C:FastDB对表的接口描述

C++需要用类的形式来定义表结构,然后一一映射到表的fields,如果类有方法就得用宏:   CLASS_DESCRIPTOR(name,field_list),进行描述,还有方法宏TYPE_DESCRIPTOR(field_list)(具体的查看的帮助文档)

最后只需要将类进行注册:REGISTER(Class Name);

D:游标

游标有两种模式:    dbCursorViewOnly,dbCursorForUpdate

定义举例dbCursor<Class Name> instance (dbCursorForUpdate);

提供了数据库的改、删、查方法接口

Instance.udate()

Instance.remove()/removeAllSelected () /removeAll ()

Instance.select()/select(dbquery &q);

E:dbquery Q;

Q = “id = ” idvalue,”and datetime = ”,currtime;

F:

数据的insert方法FastDB提供了重载

dbReference<T> insert(T const& record);

所以使用起来是很简单的。

具体细节用法查阅手册。Hoho。。。

5、改造计划

暂时不用改造现有机制,如果不想在内存数据库当中形成综合账单表(从原来的账单中心的四张内存表(累账账单表,周期性费用表,优惠结果表,调账结果表)中提取),减少冗余,就需要改造其现有的事务提交机制。使得事务提交后,程序能够控制数据改变对其他进程的可见性。

6、本人的两点担心

1)FastDB适合主导读取模式的应用程序,在大规模数据群处理上,进行更改事务处理的效率和准确性能上有待后查。

2)FastDB虽然是一个极其优秀的开源内存数据库,但毕竟没有或者很少经过商用的专业的测试。系统中复杂的内存管理过程,可能容易产生过多的内存碎片,导致系统的不稳定。

内存数据库fastdb的使用研究报告相关推荐

  1. 如何构建高扩展性网站?

    本篇通过阅读<高扩展性网站的50条原则>,总结出以下内容. 一方面博主没有实际的架构经验,另一方面知识面也不够宽阔,所以只能系统的总结书中的要点,并根据自己的理解做些归纳. 主要内容 本书 ...

  2. 如何构建和设计高扩展性系统

    主要内容 本书从多个方面围绕高扩展性提出了50条建议,一个高扩展性的网站会随着业务的发展.用户的增加,自由的扩展架构,从而轻松的应付网站的快速发展.下面看看本书的具体内容: 化简方程 1 不要过度的设 ...

  3. FastDB内存数据库API

    1.  查询语言 mdb支持类SQL句法的查询语言.mdb更接近oop而不是关系数据库.Table中的行被认为是对象实例,table则是这些对象的类.与SQL不同,mdb是面向对象的而不是SQL元组. ...

  4. fastdb学习笔记

    fastdb学习笔记 这几天一直在学习fastdb的使用,将一些学习心得和笔记写出来供大家参考! 1,register_in()宏不能在主函数中使用; 2,更新和删除操做的游标是updatecurrs ...

  5. 比较令人惊叹的FastDB和SQLite的RAMDISK内的性能对比

    小兵这段时间在优化一个程序,现在程序的效率问题集中在了数据库上. 经选型,最初使用的是SQLite,后感觉效率实在不满意,现在在测试其和FastDB这种内存数据库的性能差别. 真是不是不知道,一试吓一 ...

  6. 飞刀:云原生内存数据库解锁存算一体

    "内存数据库进入了新阶段,云原生,持久化,融合计算是三大特征",12月13号,阿里云数据库负责人李飞飞在云内存数据库峰会上表示,经过多年阿里巴巴经济体内应用的验证,今年年初上线的阿 ...

  7. 万向区块链技术研究报告 | EOS.IO技术调研(二)

    区块链技术迅猛发展,新想法.新概念.新名词层出不穷.万向区块链因此推出"技术研究报告"专栏,定期与大家分享在区块链行业创新及热门技术方面的研究成果,带领大家第一时间研究学习新技术, ...

  8. 主流内存数据库功能特性和性能比较

    内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库.在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能,作用类似于缓存,并不注重数据完整性和数据一致性.基 ...

  9. 2022-2028年中国SIP芯片行业市场前景预测及投资战略研究报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国SIP芯片行业市场行业相关概述.中国SI ...

  10. 2022-2028年中国UI设计行业现状调研分析及发展趋势研究报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国UI设计行业市场行业相关概述.中国UI设 ...

最新文章

  1. 轻量级的jQuery表单验证插件 - HAPPY.js
  2. C/C++:多个.cpp文件包括同一个.h头文件定义方法
  3. ContentValues和HashTable和HashMap和properties
  4. LeetCode 1564. 把箱子放进仓库里 I(排序)
  5. 数据库高级知识——查询截取分析(一)
  6. 让你的创业失败的18个昏招 都归结到这里
  7. 运行 lighttrack 遇到错误和解决方法
  8. Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法
  9. react-native学习小结
  10. python创建对象_python对象
  11. Flash Builder 4.6(安装破解)
  12. 宋代词人前十名都有谁?第一名更是震铄古今最全能的大文豪
  13. 悉尼大学计算机科学硕士专业,悉尼大学计算机硕士
  14. 硬件-2-显示器Redmi27英寸显示器
  15. Outlook邮箱不简单带你重新认识它
  16. 经纬度坐标转为上海地方坐标代码(js代码)
  17. 年总结(一):逝去的14年
  18. 自动计数报警器c语言程序,简易STC15F104E单片机定时报警器制作 附程序
  19. 【观察】当 SmartX 遇见英特尔傲腾,超融合系统性能突破新极限
  20. 利用FFmpeg进行视频文件进行分割

热门文章

  1. 多功能雨伞项目计划书_多功能雨伞项目计划书_雨伞策划书范文
  2. 境外显示手机无服务器,手机卡在国外无服务怎么办
  3. crtlc不能复制文件_win10系统按ctrl+c快捷键无法复制文件的操作方法
  4. 可视化讲解:什么是棒球游戏问题?
  5. if函数多个条件怎么用,excel求和函数
  6. 怎么冻结表格前几行和前几列_如何冻结表格前几列
  7. Go 依赖管理工具 Dep 的安装及配置
  8. C++定义一个描述员工(Employee)基本情况的类
  9. 【C语言初学】C语言中表示次方与开根
  10. 上证50基金有哪些_哪一只上证50指数基金最值得关注?