Posted on 2011-12-14 03:14
S.l.e!ep.¢% 阅读(2151)
评论(1) 编辑 收藏 引用 所属分类:
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.