IQ 16之前的版本(IQ 12.X和IQ 15.X)对于一个表只能有一个写入者,不允许多个并发事物同时往一张表中写入数据。IQ 16在Simplex环境下引入了新的“RLV (row-level versioning) 内存列式存储”组件改变了这种行为。"RLV内存列式存储"是一种为高性能行级更新(row-level updates)而优化的内存数据存储。它支持实时并发DMLs (update、insert、delete) 操作,采用行级MVCC(即,多版本并发控制)并发控制技术。这使得针对相同表中数据的写操作和读操作之间以及读操作和写操作之间不会发生阻塞;多个用户事务能够并发地、无阻塞地向相同的表中写入(包括:load table、insert、update和delete等)不同的记录行,多个并发事务只有在针对相同记录行执行update和delete等操作时才会发生阻塞。
从这篇博文开始,将向大家介绍 "RLV内存数据存储的"基本特点、基本概念和原理、事物和并发控制以及使用方法等方面的知识。下面将首先介绍"RLV内存列式存储"的概貌:
SAP Sybase IQ 16之前的版本一个表只能有一个写入者,不允许多个并发用户同时往一张表中写入数据。IQ 16在Simplex环境下引入了新的"RLV (row-level versioning) 内存列式存储"组件,它支持实时并发DMLs (update、insert、delete) 操作。"RLV内存列式存储 (In-Memory RLV Store) "简称为"RLV Store"。
当一个表注册到"RLV内存列式存储"组件中后,多个用户事务能够并发地、无阻塞地向相同的表中写入(包括:load table、insert、update和delete等)不同的记录行;多个并发事务只有在针对相同记录行执行update和delete等操作时才会发生阻塞。用户事务能够等待发生冲突的事务锁(transaction locks),而不像IQ 16之前版本那样报错,然后重新提交事务的处理方法。对于允许了RLV的IQ表,其DDL的锁定行为是不变的。即对于DDL操作来说(比如,在一个已有表上增加字段)仍然需要在相应表上请求一个排它表锁。
SAP Sybase IQ 16引入的"RLV 内存列式存储"组件是一种为高性能行级更新(row-level updates)而优化的内存数据存储(in-memory data store)。这个内存数据存储来自于SAP HANA内存数据库的"Column Store"技术。"RLV内存列式存储"可以作为写活动的暂存区(staging area),它采用了行级MVCC(即,多版本并发控制)并发控制技术。
如果一个表允许RLV,那么所有DMLs操作(LOAD TABLE、INSERT、UPDATE、DELETE)可以直接写到"RLV内存列式存储"中。为了保证内存中写入数据的持久性,"RLV内存列式存储"组件会把内存中的数据定期地合并(merged)到"IQ Main Store"中。可以通过相应参数设置自动化合并操作,也可以在需要时通过手工命令启动合并操作。
"IQ Main Store" 是一种为高性能查询(读操作)优化的,而不是针对写操作而优化的数据存储。"RLV内存列式存储"为IQ数据库增加了高性能写操作能力。你可以使用RLV技术联同已有的插入技术(比如,bulk loading)。例如,你的应用能够在上班时间进行实时更新操作;而在晚上执行绕过 "RLV Store"的bulk load操作,直接装载数据到"IQ Main Store"中。
IQ 16的"RLV内存列式存储"技术采用了"混合存储模型"(即In-Memory RLV Store 和Disk-Based IQ Main Store)优化数据写操作,同时也不会牺牲读操作性能。
下面是IQ 16 "RLV内存列式存储"所带来变化:
1. 表并发写入 (Concurrent Table Writes)
IQ 16之前的版本,由于在同一时间只能够有一个用户对同一个表进行写操作,因此对于修改相同表的多个请求只能串行执行。IQ 16引入了"RLV内存列式存储"技术,这将允许多个连接并发执行修改相同表中数据的DMLs操作。只要这些DMLs是增加或修改不同记录行就不会发生锁等待,只有在修改 (update或delete) 相同记录行的时候才会阻塞。
2. 阻塞和锁定 (Blocking and Locking)
(1) 对于IQ 16之前的版本,一个事务对一个表加的写锁,只要事务没有结束,那么会阻塞试图对相同表进行写操作的所有其他连接上运行的事务,或者会导致这些连接上执行的语句报错。这些连接不得不实现"重试逻辑(即编写一个循环,不断的提交语句)",这会影响应用性能。
(2) "RLV内存列式存储"通过行级的版本管理技术支持"多版本并发控制(MVCC)"。其他连接上运行的事务能够对锁进行等待(在表级或行级锁上),这就消除了重试逻辑的需要。
使用"RLV Store"并不需要额外的License,然而为了使用RLV(row-level versionning)需要注意如下事项:
(1) 目前只能在Simplex database环境下使用,还不支持Mulitplex环境;
(2) 需要有一个RLV dbspace,并进行相应设置;
(3) "row-level snapshot versioning"必须被允许;
(4) 在特定表或所有base表上,允许RLV 存储属性。
对于有关"RLV内存列式存储"组件的架构、配置、阻塞、锁定、监控、数据合并和"行级版本"技术等详细信息,可以参见如下SAP Sybase IQ官方手册:
(1) Administration: In-Memory Row-Level Versioning > About In-Memory Row-Level Versioning
(2) Administration: In-Memory Row-Level Versioning > Appendix: SQL Reference
阅读(2395) | 评论(0) | 转发(0) |