南大通用数据技术有限公司ALTIBASE介绍内存数据库简介1234内存数据库的产生各种业务系统、管理系统等通常是构建在传统数据库之上的,例如Oracle、DB2、Sybase、MSSqlServer……随着数据量增加,业务复杂度增加,并发访问增加,对数据访问和处理的速度要求越来越高传统数据库无法满足高性能高并发数据处理的需求性能出现瓶颈!!!内存数据库的产生传统数据库,产生性能瓶颈的根源在于磁盘I/OCPU/内存/网络的速度日新月异,然而磁盘的速度并没有质的提升,磁盘一直是最慢的部件磁盘访问速度是几个微妙(1/106)内存访问数据是几十个纳秒(1/109)如果把数据装入内存,不再访问磁盘,性能不就可以大幅度提升吗?内存数据库磁盘数据库数据存储在磁盘上存储数据库查询优化复杂的查询优化算法(减少磁盘I/O瓶颈)数据操作速度速度一般数据量大,TB级磁盘数据库内存数据库数据存储在内存中存储数据库查询优化简单的查询优化算法(不存在磁盘I/O瓶颈)数据操作速度比磁盘数据库快10倍以上数据量小,GB级磁盘数据库支持标准SQL支持ODBC、JDBC等标准访问接口从应用程序的角度,二者并无差别用户需求推动着内存数据库不断的发展性能/易开发/可管理/高可用性/复杂性内存数据库技术商业复杂性需求性能/易开发/可管理/高可用性性能/易开发性能查询处理技术并发控制/复制技术接口技术存储管理技术(共享内存)内存数据库发展性能/易开发/可管理管理/监控工具内存数据库使用方案替换方案增强方案使用内存数据库,解决现有系统的性能瓶颈,可以采用如下两种方案:内存数据库使用方案–替换方案磁盘数据库(Oracle,Informix,Sybase,DB2,…)App1App2AppN应用程序内存数据库2数据导出,导入134应用场景:1.磁盘数据库中数据量较少;2.前端应用程序可以修改,连接到内存数据库内存数据库使用方案–增强方案App1App2AppN应用程序内存数据库2热数据导出,导入应用场景:1.磁盘数据库中数据量大,无法全部装入内存;2.仅将频繁访问处理的热数据装入内存数据库,解决性能瓶颈的高性价比方案磁盘数据库(Oracle,Informix,Sybase,DB2…)80%冷数据20%热数据14同步数据3实际应用中,绝大多数采用此方案!磁盘数据库(Oracle),可以将表装入内存,这样就不需要内存数据库了!这种观点是错误的!数据加载到内存中,仅仅是提高性能的第一步;还必须针对内存存储方式进行全面的优化:地址直接访问磁盘数据库要将记录(RecordId)映射为内存地址查询优化磁盘数据库查询优化,需考虑数据全部在磁盘上的最恶劣的情况,而内存数据库无需考虑这些情况,算法简洁高效索引优化:采用T-Tree索引,比磁盘数据库的B-Tree索引简洁高效内存数据库简介1234介绍Altibase是韩国ALTIBASE公司的高性能内存数据库产品南大通用是ALTIBASE中国独家总代理2004年ALTIBASE进入中国,已经得到广泛的应用产品发展历程•通用、高性能、大容量的MMDBMS•适用于所有领域•支持基于MVCC的,利用记录级锁的中小规模数据及复杂语句2000200220032005~•MVCC–世界上最初实现MMDBMS的多版本并发控制产品的使用领域增多(通信设备、服务、金融、公共…)•性能、安全性、开发方便性•应用于各个领域,确保产品的可信度IT演进离线,封闭,非实时在线,开放,实时CISAM,LDAP等需要高性能的领域中小规模实时/通用领域实时DB实时·大容量DB2008Altibase52005Altibase42003Altibase32002Altibase22000AltibaseV1AltibaseV5提供了更加完善的数据支持、分析、管理功能和第三方DB同步接口|CLI|ODBC|JDBCDatafilesLogFilesLogAnchorStorageManagerQueryProcessorParsing/validationExecutorTransactionManagerRecoveryManagerBufferManagerOptimizerTCP/IP性能(1)单条DML性能MemoryTableDML:磁盘数据库的10倍MemoryTableSelect:磁盘数据库的2~5倍•Platform:SUNV880•CPU:1.2Ghz8Core•Memory:16G测试环境TPSThread个数05000100001500020000250003000035000400001234567[ALTIBASE]SELECTINSERTUPDATEDELETE[DRDBMS]SELECTINSERTUPDATEDELETE050010001500200025001248163264(second)respnseTime(second)(2)复杂查询(TPC-H)性能:代表现代复杂业务环境的22个查询语句使用MemoryTable时大部分语句反应时间比磁盘数据库快TPC-HQ1~Q11020406080100120Q1Q2Q3Q4Q5Q6Q7Q8Q9Q10Q11TPC-HQ12~Q2201020Q12Q13Q14Q15Q16Q17Q18Q19Q20Q21Q22ALTIBASEDiskDBMS曹操34刘备34查询更新建立新记录版本ExclusiveModeLockTransaction#1Transaction#3MVCC(MultiVersionConcurrencyControl)(3)MVCC并发控制:数据并发访问频繁的大量事务环境下有最佳的性能效果查询时不加锁,显著提高并发访问性能(4)启动性能:通过ParallelDBLoading快速加载数据通过ParallelIndexBuilding快速构建索引数据安全性由于内存存储数据的易失性,内存数据库的数据安全性显得尤为重要对于已提交的事务来说,数据会及时反映在内存中同样对于内存中已修改数据必须可靠地反映到可靠的存储介质中,否则一旦系统或硬件出现问题,事务的持久性即无法保证。数据安全性Logging:为了恢复已提交的事务,处理事务时记录日志Checkpoint:日志文件达到一定个数或周期达到设定的时间时把更新的内存数据页写到磁盘以缩短恢复时间•数据页储存数据并返回事务结果前以文件形式记录(logging)事务的内容•非正常时内存上的数据即使发生了流失,也可通过文件系统上的日志文件可以恢复数据WAL(WriteAheadLogging)TX1DBinMemoryLogBufferinMemoryLogSync23CheckpointLogArchDataFileArchiveLogFileOnlineLogFile422提供多种数据持久性级别,满足不同的需求:DurabilityLevel2:日志被记录在进程的日志缓冲(Logbuffer)中,同步线程再把日志同步到日志文件中。特点:1)性能最好2)数据持久性不能得到充分保障应用场景:电源、硬件等有保障的系统中InAltibaseprocesslogbufferlogfilesyncthreadslogfilessynctxtx提供多种数据持久性级别,满足不同的需求:DurabilityLevel3:操作系统的核心区(SharedMemory)被用作日志缓冲区特点:1)即使数据库服务进程意外中断(发生宕库),提交的事务日志仍然能够反映到磁盘文件中。例如:kill-92)性能和安全性之间的最佳平衡方案ALTIBASE默认的持久性级别,推荐使用InOSKernelmemoryInAltibaseprocesslogfilesyncthreadslogfileslogbuffersynctxtx提供多种数据持久性级别,满足不同的需求:DurabilityLevel5:日志记录在进程内的日志缓冲中。在每个事务提交的时候,同步线程把日志同步到日志文件中。特点:1)保证事务的持久性,不会丢失任何数据2)性能有所下降应用场景:对数据安全有极高要求的领域InAltibaseprocesslogbufferlogfilesyncthreadslogfilestxtxtxtxtxsync读一致性读一致性:对于某个时间点(pointintime),查询会产生一致的结果。案例:查询余额ACCT_BALANCEACCT_IDBALANCE(账户ID)余额11002100……………………6000000100统计所有账户的余额:selectsum(BALANCE)fromACCT_BALANCE;结果:600000000600万账户,每个帐户余额都为100元读一致性案例:查询余额并发情况:会话1执行前面的统计余额的查询;会话2将ACCT_ID=1的账户余额中的50元转移到ACCT_ID=6000000的账户中时间点会话1会话2T1取得第一行(即ACCT_ID=1)的用户的余额,sum=100T2更改了ACCT_ID=1的账本的余额为50.T3读取第二行的余额,sum=200T4更改了ACCT_ID=6000000的账本的余额为150T5读取第三行的余额,sum=300T6commit;提交了事务……继续读取后续行记录Tn读取最后一行(即ACCT_ID=6000000)的余额,这时读到的应该是多少?是100还是150?这两个会话在同一时间点并发执行,并且事务执行的时序如下表:支持多版本控制和读一致性更可怕的是,当多次运行上面的例子,可能会有不同的结果出现,有时是600000000,有时是600000050,变成了一种不可预期的结果。如果数据库系统不支持读一致性读,那么Tn时刻会读取到150,统计结果将变成600000050。在Tn时刻,读到的仍然会是会话1执行的那一时刻的版本的数据,也就是100,保证统计结果为600000000