TokuDB的索引结构–分形树的实现
TokuDB和InnoDB最大的不同在于TokuDB采用了一种叫做Fractal Tree的索引结构,使其在随机写数据的处理上有很大提升。
目前无论是SQL Server,还是MySQL的innodb,都是用的B+Tree(SQL
Server用的是标准的B-Tree)的索引结构。InnoDB是以主键组织的B+Tree结构,数据按照主键顺序排列。
对于顺序的自增主键有很好的性能,但是不适合随机写入,大量的随机I/O会使数据页分裂产生碎片,索引维护开销很多大。
TokuDB解决随机写入的问题得益于其索引结构,Fractal Tree 和
B-Tree的差别主要在于索引树的内部节点上,B-Tree索引的内部结构只有指向父节点和子节点的指针,而Fractal
Tree的内部节点不仅有指向父节点和子节点的指针,还有一块Buffer区。
当数据写入时会先落到这个Buffer区上,该区是一个FIFO结构,写是一个顺序的过程,和其他缓冲区一样,满了就一次性刷写数据。所以TokuDB上插入数据基本上变成了一个顺序添加的过程。