fastDB个人使用心得

fastDB开始使用的时候,经常会出现程序无缘无故的挂掉,或者频频出现一些操作失败的现象,这些错误信息可以自己加日志获取。让使用的人心惊胆战。毕竟fastDB没有经过专门的商业测试,但是使用fastdb实现进程之间通信是非常方便且快速的,这也是很多人使用它的原因。作者用了很长的时间工程使用和测试,终于探索出一条可行的道路,总结了一些经验和大家分享,希望能给大家带来帮助。

 

1、在工程项目中,主要是用fastdb来实现多进程通信。所以是面向进程来使用fastdb的,而不是面向线程。因此在同一个进程中一个数据库对象只能open一次,下次open之前必须close.也就是说只存在一个open的对象,不允许如使用多线程时候每个线程open一次而不close。

    2、对于fdb等fastdb内存映射文件来说,所以的锁操作是以文件为单位,而不是对每个表都有锁机制。

    3、fastdb多进程锁的机制主要作用在commit上,而不是在open操作上。工程中主要用dbConcurrentUpdate和dbConcurrentRead两中模式,同一时刻,允许一个进程写,多个进程读的操作。当2个以上进程用dbConcurrentUpdate模式open后,做了insert/update等操作后执行commit,在同一时刻只能一个进程commit,谁先抢到谁先执行,后抢的进程就会一直在那里等到机会后再执行。当一个dbConcurrentUpdate和多个dbConcurrentRead进程同时执行时,dbConcurrentRead模式执行select操作后可以随时commit,而不会被dbConcurrentUpdate模式进程或者别的dbConcurrentRead进程干扰,这也是多个进程并行读的精髓所在,但是此时dbConcurrentRead执行select后没有commit之前,dbConcurrentUpdate进程是不可以commit的,必须等待dbConcurrentRea执行commit之后才会执行。总之一句话,同时只能一个进程写,多个进程读。

    4、fastdb在执行open操作时候dbConcurrentUpdate模式每次都会成功,因此可以随心所欲打开内存库,但是dbConcurrentRead模式open是有可能失败的,原因是上一次有进程open后没有执行close操作而异常退出导致,所以处理方法是先用dbConcurrentUpdate模式打开在close,然后在用dbConcurrentRead方式打开就可以了。

5、其它:

Ø 同一张表只能放入一个数据库中,不允许放入多个dbDatabase中。

Ø Register宏只能将所有的表放入默认数据库,REGISETER_IN宏可以将表放入不同数据库文件中。

Ø 程序中dbDatabase用REGISETER_IN注册的表与open的*.fdb文件中表不同时,会导致程序挂掉。

Ø REGISETER_IN宏执行了很多操作,做了很多事情,只可以放入cpp文件中使用,它将表放入对应的数据库中。

Ø dbArray<char> 于char *之间差别:dbArray<char>可以放byte流,比如当中含有\0等字符,char*只能放入字符串;char*可以做为索引列来使用(作为select查询条件),但是dbArray<char>不可以。Char*使用的时候要防止野指针,比如匿名变量(作用域只有一行),这样会使程序挂掉

dbQuery可以用‘,’号分隔,‘。’结束的简单条件,还可以使用dbQueryExpression写一些比较复杂的逻辑语句。
概述FastDB是一个高效率的内存数据库系统,具有实时性能和方便的C++接口。 FastDB并不支持客户端/服务器结构,所有使用FastDB数据库的应用程序都必须运行在同一台主机上。FastDB为具有主导读取访问模式的应用程序作了优化。通过消除数据传输的开销和使用高性能的锁工具实现了查询执行的高速度。数据库文件和使用数据库的每一个应用程序占用的虚拟内存空间相映射。所以查询在应用程序的任务中执行,不需要进行任务切换和数据传输。在FastDB中,通过原子指令来实现对数据库并发访问的同步,对查询处理几乎不增加任何开销。FastDB假设整个数据库都在当前内存中,并且在这个假设的基础上优化查询算法和结构。另外,数据库缓存管理几乎不会给FastDB增加任何开销,同时FastDB也不需要在数据库文件和缓冲池中进行数据传送。这就是为什么FastDB比将所有数据放在缓冲池中的传统数据库明显速度快的原因。   FastDB支持事务、在线备份和系统崩溃之后的自动恢复。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作。恢复操作执行起来非常快,给关键应用程序提供了高效率。另外,它还取消了事务日志,提高了系统的整体性能,并且能够更加有效地使用系统资源。   FastDB是面向应用程序的数据库使用应用程序的类信息来构建数据库的表。FastDB支持自动系统赋值,只允许你在一个地方——你的应用程序的类中,改变它们的值。FastDB为从数据库中提取数据提供了一个灵活而方便的接口。使用类似于SQL的语言来书写查询语句。这些非原子字段、嵌套数组、用户自定义类型和方法、直接指向对象内部的指针等后关系性能,简化了数据库应用程序的设计,并且使得它们更加高效。   虽然FastDB的优化是基于整个数据库都存放在机器的物理内存的这个假设上的,我们依然可以将FastDB使用在那些大小超过系统物理内存的数据库上。最后,标准操作系统的交换机制将会起作用。但是所有的FastDB的算法和结构的优化都是基于数据存放在内存中这个假设上的,所以数据交换的效率不会很高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值