数据库内核月报 - 2014 / 11

TokuDB · 引擎特性 · FAST UPDATES

MySQL的update在执行时需要做read-modify-write:

  1. 从底层存储中读取row数据(read row)
  2. 对row数据做更改(modify row)
  3. 把更改后的数据写回底层存储(write row)

操作路径还是比较长的,TokuDB提供了fast update语法,让"某些"场景下update更快,无需做read和modify直接write。 用法:

 CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
 `count` bigint(20) NOT NULL,
  PRIMARY KEY (`id`)) ENGINE=TokuDB;

NOAR语句:

 INSERT NOAR INTO t1 VALUES (1,0) ON DUPLICATE KEY UPDATE count = count + 1;

语义是:插入一条记录,如果该记录存在(id为1),就对count的值做加法操作,不存在则做插入。 注意: fast updates的条件是比较苛刻的,必须满足:

  1. 表必须有主键,且只能有一个索引(包含主键)
  2. 主键必须为: int, char或varchar类型,被更新的列也必须为三种类型之一
  3. WHERE子句必须为单行操作
  4. 如果开启binlog,binlog_format必须为STATEMENT 看了这些苛刻的条件后,有种"臣妾做不到"的感觉了吧,可以看出TokuDB一直为细节而努力。