这里比较四个内存数据库系统情况,分别是Timesten、AltiBase、ExtremeDB、CacheDB(自研),需要说明的是,这是这段时间的粗略感性认识(并没有经过一段时间的使用,是换不来理性的客观认识)
项目 |
市场及应用领域比较 |
排行 |
Timesten |
全球化,领域全面,金融领域有应用。 |
2 |
AltiBase |
韩国及东南亚,分布较广,电信市场为主体 |
4 |
Extreme |
全球化,领域全面,在国内的金融领域有大商所撮合系统、国际有印度证券风控系统 |
1 |
CacheDB |
集中在电信、广电、监控领域。… |
3 |
项目 |
金融领域和电信领域对数据库的要求特性比较 |
金融领域 |
数据的复杂度和量很高很大。传统应用对数据访问性能要求不高,近年来对性能要求在提高 |
电信领域 |
数据的复杂度较低,量很大,对数据访问性能要求一直都很高。 |
项目 |
市场及应用领域比较 |
排行 |
Timesten |
市场老大,不见得会强力支持。 |
3 |
AltiBase |
中国区的技术支持力量薄弱。 |
4 |
Extreme |
感觉会提供更好的支持。 |
2 |
CacheDB |
… … |
1 |
项目 |
耦合特性比较 |
排行 |
Timesten |
松耦合(独立的不同进程),可采用共享内存直连和CS两种模式进行访问。 |
3 |
AltiBase |
松耦合(独立的不同进程),可采用共享内存直连和CS两种模式进行访问。 |
2 |
Extreme |
紧耦合(作为一个库嵌入应用进程),可通过共享内存进行不同应用间的数据共享。 |
4 |
CacheDB |
既支持紧耦合模式(小容量,作为一个库嵌入应用进程)、也支持松耦合模式(大容量,独立的不同进程,采用CS模式进行访问) |
1 |
项目 |
接口特性比较 |
排行 |
Timesten |
JDBC/ODBC/OCI,支持SQL交互 |
4 |
AltiBase |
JDBC/ODBC/ACI,XDB支持API,支持SQL交互 |
3 |
Extreme |
API,支持SQL交互 |
2 |
CacheDB |
API,支持SQL交互 |
1 |
项目 |
系统复杂度 |
排行 |
Timesten |
难管理 |
4 |
AltiBase |
较易管理 |
2 |
Extreme |
易管理 |
1 |
CacheDB |
易管理 |
1 |
项目 |
表特性比较 |
排行 |
Timesten |
行表; |
2 |
AltiBase |
行表 |
2 |
Extreme |
行表、列表,还可并存 |
1 |
CacheDB |
行表 |
3 |
项目 |
索引特性比较 |
排行 |
Timesten |
T树、散列(静态,可通过语句动态调整),主/外键 |
2 |
AltiBase |
B树、散列(静态,可通过语句动态调整),主/外键 |
2 |
Extreme |
B树、散列(动态,但可能会影响应用的访问)、KD树、R树、前缀匹配树可以通过OID等实现 |
1 |
CacheDB |
散列(静态,可修改配置重启生效,负载均衡模式下对业务不受影响), T树(目前不支持范围查询,仅仅用在漫游号码分配应用中) 前缀匹配树(用作号码分析) 不支持主/外键 |
3
|
项目 |
视图 |
排行 |
Timesten |
支持 |
1 |
AltiBase |
只读 |
2 |
Extreme |
不支持 |
3 |
CacheDB |
只读,相比传统视图而言,功能更简单。 |
2 |
项目 |
事务特性比较(目前风控系统不需要事务) |
排行 |
Timesten |
支持事务模型,默认不立即提交。 |
1 |
AltiBase |
支持事务模型,默认立即提交。 |
1 |
Extreme |
支持事务模型,必须手工提交。(非事务系统操作麻烦一些) |
2 |
CacheDB |
不支持事务模型。 |
3 |
项目 |
序列特性比较(目前风控系统不需要序列) |
排行 |
Timesten |
支持 |
1 |
AltiBase |
支持 |
1 |
Extreme |
不清楚是否支持 |
2 |
CacheDB |
不支持 |
2 |
项目 |
触发器特性比较。 如果紧耦合模式下,一般不需要,但从数据库复制数据到应用时应该支持。 松耦合模式下,应该要能支持(把部分计算的工作放在数据库后台,为的是减少通信量) |
排行 |
Timesten |
支持脚本性触发器或外挂C性驱动,但支持的特性不清楚 |
2 |
AltiBase |
支持脚本性触发器,但支持的特性不清楚 |
2 |
Extreme |
支持C性驱动,通过Event实现事件触发等。 |
2 |
CacheDB |
支持C性驱动,紧耦合方式下,仅在数据库动态通知到应用时支持。松耦合模式下在应用修改时也支持(动态库架构)。 |
1 |
项目 |
数据类型比较 |
排行 |
Timesten |
与Oracle一样 |
3 |
AltiBase |
支持C数据类型和扩展类型 |
2 |
Extreme |
支持所有的C数据类型,还支持时间,变长数据类型及大文件数据类型如,string,vector,blob。 |
1 |
CacheDB |
仅支持C数据类型 |
1 |
项目 |
查询特性比较(无条件查询、条件查询<索引查询、非索引查询,定值查询、范围查询>、分段查询<游标>、分组查询、排序查询、模糊查询) |
排行 |
Timesten |
都支持 |
1 |
AltiBase |
都支持 |
1 |
Extreme |
都支持,可以通过API和SQL等模式进行排序查询,另外也还要落实大量的排序字段对系统性能的冲击(这个需要根据应用场景进行测试,因素包括事务大小,环境信息等)。 |
2 |
CacheDB |
不支持分组查询、排序查询、模糊查询、范围查询 目前模糊查询的具体需求还不清楚,如果只是正则表达式模式,还是比较好加的。 增强范围查询的能力较难,范围查询支持后,分组排序查询就不是难点。 |
4 |
项目 |
纯内存表 |
排行 |
Timesten |
支持 |
1 |
AltiBase |
支持 |
1 |
Extreme |
支持 |
1 |
CacheDB |
支持 |
1 |
项目 |
部分字段持久化 |
排行 |
Timesten |
不支持 |
4 |
AltiBase |
不支持 |
4 |
Extreme |
不支持 |
4 |
CacheDB |
支持 |
1 |
项目 |
本地文件持久化 |
排行 |
Timesten |
支持 |
1 |
AltiBase |
支持 |
1 |
Extreme |
支持 |
1 |
CacheDB |
支持 |
1 |
项目 |
数据库持久化 |
排行 |
Timesten |
支持Oracle,其它数据库的持久化,需要应用自行扩展 |
2-2 |
AltiBase |
支持HDB持久化(性能较好),但HDB接受程度需要打问号。 其它数据库的持久化,需要应用自行扩展 |
3-1 |
Extreme |
不支持,需要应用自行扩展 |
4-4 |
CacheDB |
支持Oracle、MySql、SyBase无缝集成。尤其是Oracle和MySql |
1-2 |
第一个排行是指支持的能力,第二个排行指支持的性能
项目 |
数据库部分列加载 |
排行 |
Timesten |
支持 |
1 |
AltiBase |
不支持 |
4 |
Extreme |
X |
4 |
CacheDB |
支持 |
1 |
项目 |
数据库部分行加载 |
排行 |
Timesten |
支持,还能进行动态换出 |
1 |
AltiBase |
不支持 |
4 |
Extreme |
X |
4 |
CacheDB |
支持,不能进行动态换出 |
2 |
项目 |
数据库故障对系统的影响 |
排行 |
Timesten |
无影响,有本地CheckPoint文件和增量日志 |
1 |
AltiBase |
无影响,压根不从数据库读。 XDB+HDB配合下,是很好的模式,但是任然需要应用干预。 |
2 |
Extreme |
无影响,有本地数据库文件和redo,undo日志 |
4 |
CacheDB |
无影响,有本地备份文件和增量日志 |
1 |
项目 |
数据库变更对应用的反向复制 |
排行 |
Timesten |
需要另外的组件,其它特性不清楚 |
3 |
AltiBase |
无需另外的组件,利用复制特性实现,其它特性不清楚 |
1 |
Extreme |
可以根据项目提供 |
4 |
CacheDB |
需要另外的组件,可触发应用,便于做处理 |
2 |
项目 |
数据入库特性 |
排行 |
Timesten |
同步日志 |
2 |
AltiBase |
同步日志,采用复制特性实现 |
1 |
Extreme |
同步日志 |
4 |
CacheDB |
同步日志, |
2 |
项目 |
高频数据持久化策略(均没有入库的优化方案) |
排行 |
Timesten |
无特别方案 |
4 |
AltiBase |
无特别方案 |
4 |
Extreme |
无特别方案 |
3 |
CacheDB |
目前高频数据采用本地保存的策略 |
1 |
项目 |
主备方案 |
排行 |
Timesten |
支持,但需要应用层总裁 |
4 |
AltiBase |
无,需要应用管理 |
1 |
Extreme |
无,需要应用管理 |
1 |
CacheDB |
无,需要应用管理 |
1 |
项目 |
均衡方案 |
排行 |
Timesten |
支持,但不支持持久化 |
4 |
AltiBase |
支持,复制模型较复杂,最多32个节点 |
2 |
Extreme |
支持,无节点限制 |
1 |
CacheDB |
支持,最多16个节点 |
1 |
项目 |
本地表支持情况 |
排行 |
Timesten |
不清楚,从演示情况看,没有体现出来 |
4 |
AltiBase |
支持,因为复制是基于表级别的 |
2 |
Extreme |
支持,同时支持distributed特性,scatter和gather方式 |
1 |
CacheDB |
支持, |
1 |
项目 |
数据复制模型 |
排行 |
Timesten |
仅仅TCP,数据库级别复制 |
4 |
AltiBase |
仅仅TCP,表级别复制 |
3 |
Extreme |
主播、单播TCP、管道、单播UDP,表级别复制 |
1 |
CacheDB |
主播或单播TCP,数据库级别复制 |
1 |
项目 |
部分字段或部分记录的复制支持 |
排行 |
Timesten |
全表复制 |
4 |
AltiBase |
全表复制 |
4 |
Extreme |
全表复制 |
4 |
CacheDB |
支持部分复制 |
1 |
项目 |
数据库一致性策略 |
排行 |
Timesten |
支持事务,支持全同步方式(性能低),也支持异步模式 |
2 |
AltiBase |
支持事务,支持全同步方式(性能低),也支持异步模式 |
3 |
Extreme |
支持事务,支持全同步方式(性能低),也支持异步模式 |
1 |
CacheDB |
不支持事务,采用异步方式,允许系统暂时的不一致 |
1 |
项目 |
数据库冲突补救 |
排行 |
Timesten |
无 |
4 |
AltiBase |
无 |
4 |
Extreme |
可以通过mvcc的事务管理器进行冲突回滚,操作遵守ACID性 |
4 |
CacheDB |
有单独的组件,进行不同节点数据的一致性检查(包括与持久性数据库系统之间),并提供策略让应用恢复数据,原则是“错,也要错成一致” |
1 |
项目 |
数据库性能特性比较 |
排行 |
Timesten |
有公司做过比较测试 |
4 |
AltiBase |
2 |
|
Extreme |
从公开的测试数据来看,性能比AltiBase还快,官方网站上有1TB+的数据测试报告,内包含,join,子查询。http://www.mcobject.com/index.cfm?fuseaction=download&pageid=657§ionid=154 |
1 |
CacheDB |
没有做过纯内存表的测试,从均衡测试情况来看,性能应该与Extreme相当 |
2 |
(1)没有加权的统计,并不一定能说明什么问题。
统计 |
1 |
2 |
3 |
4 |
Timesten |
9 |
8 |
4 |
10 |
AltiBase |
8 |
10 |
4 |
9 |
Extreme |
12 |
6 |
2 |
11 |
CacheDB |
19 |
7 |
4 |
1 |
(2)从应用市场来看,Extreme无疑占据较大优势,无论从市场占有率还是在金融领域的应用,都是相当不错的。
(3)从数据库与应用集成特性来看,CacheDB和Extreme的集成难度最小、AltiBase稍高、Timesten最大。
(4)从数据库通用特性来看,Extreme、AltiBase、Timesten都差不多,CacheDB因为不支持范围查询(虽有T树索引),而相对较弱。
(5)从持久性上看,CacheDB无疑排在首位。Extreme不具备数据库持久化能力,需要应用层做工作【工作量应该很大】,如果接受HDB的持久化模式,在持久化性能上应该最好,否则也和Extreme一样。另外还有一个重要特性CacheDB可以支持临时字段。
(6)从分布式模式上看,CacheDB无疑排在首位。其次是Extreme,再就是AltiBase,Timesten最差。
(7)从数据一致性上看,强一致性的AltiBase、Timesten无疑性能低,所以用处不大,非强一致性的模式下,CacheDB提供了一致性补救措施。
(8)从性能上看,无疑Extreme和CacheDB都占据头号位置,而Timesten最差。
综合来看:
(1) 如果CacheDB支持了范围查询,无疑是首选。
(2) 如果ExtremeDB支持了Oracle数据库的持久化,无疑是首选。
(3) 如果大家能接受AltiBase的私有磁盘数据库系统,或者支持Oracle数据库系统,无疑是首选。
(4) 如果上面都不满足,那就只能选择Timesten。