接触内存数据库系统:fastdb

【从我原来空间搬来的】

 

前不久,项目需要实时运算处理大规模数据,因为项目要支持多线程,并发性,事务性。第一反应是要找一个这样的内存数据库,商用的有Oracle的TimesTen和SOUTH KOREA的Altibase,但是费用不菲。我们只需要对内存数据库的一些简单操作即可。所以我们就锁定了开源的fastdb。其代码非常简练,一共不过3万代码左右,它并不是用想象的SysV IPC mechanism (shmat) 实现,而是用Memory mapping mechanism (mmap) 。虽然使用了部分shmat存储一些数据库控制变量信息等,但是数据还是用内存文件映射的。对于千万级的数据,其需内存是4GB以上,所以感觉用内存映射文件数据库更合适。

fastdb实现的方法重要的几点特征:

1、内存文件映射时更改了系统的自动提交更新页数据机制,为事务性性能提高基础。

2、数据库事务提交机制是基于一个影子根页算法(shadow root pages algorithm),对数据库进行原子更新操作,所以恢复非常快。

3、提供游标化,结构化语句的查询。

4、还提供了一个可视化的数据查询工具SUBSQL。

 

 

对于fastdb的一些使用心得和技巧将继续贴出。

 

 

下面是作者给我回的邮件(作者:Konstantin 很热心):

By default size of FastDB database is limited by 4Gb.
But it also depends on OS limits on maximal size of memory mapped object.
In 32-bit OS it usually smaller than 2Gb.


To support work with larger databases, you need to use 64-bit OS and define dbDatabaseOffsetBits to have some large value than 32. (for example 40 corresponds to terrabyte database).


Memory mapping mechanism (mmap) also allows shared access to the memory from multiple applications.
The main idea of mapping fiel on memory is that modified pages are automatically stored in the file by OS.
But you can use SysV IPC mechanism (shmat) instead of mmap if for some reasons use of mmap is not desired.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概述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、付费专栏及课程。

余额充值