以柏睿数据内存分布式数据库RapidsDB为例,自动优化体现在2个阶段:数据入库过程和数据入库后。
首先来看看数据入库过程。入库过程的自动优化解决2个常见的OLAP型MPP数据库问题,传统的数控则需要外部手段或者手工执行命令来实现相同的优化效果:
1、自动优化小批量写入(比如单行插入)过程,解决高频小数据量写入的性能低下问题;
2、自动优化数据入库前排序入库过程,解决因新数据无序写入产生的查询性能不高问题。
RapidsDB实现的方式如下:跟其他友商分布式数据库的列存储实现不同,RapidsDB将新写入的数据先将它们以跳表的方式临时存储在内存中。这个操作由数据库后台自动处理的,这些以行存方式的跳过列表数据,可以对读取可见。
具体一点,向列存表插入数据时,数据会先写入临时的行存跳表或创建新的列存储支持行段。至于是临时表还是新建行段,数据库引擎需要由根据插入数据量大小和列存储索引的当前状态的自动触发确定的。每个数据分区16 MB,是 INSERT 或 LOAD DATA 写入数据优化的默认阈值。当超过这个阈值时,当前外部写入的数据就会在内存经过排序后,直接写入新建的行段,反之则临时存放在行存跳表中,经过超时或者新来数据达到阈值后,写入列存行段中。
经过上述操作,数据入库过程的自动优化完成。