MYSQL内部数据格式

 MySQL底层可以提供不同的存储引擎,如myisam,heap,dbd,ndb,innobase。由此mysql可以简单的分为2层,上层为管理层,下层为存储引擎。具体如图所示:

 MySQL中对数据的各种操作都被抽象为一种Handle类,该类中有许多virtual方法,如open, close, rnd_init, rnd_next等方法。所有的存储引擎都继承自该类。如果要自己写一个存储引擎,就需要继承该类,实现对应的方法。

由于每种存储引擎都可能有自己的底层数据存储格式,为了让 MySQL上层能和具有不同存储格式的存储引擎通信,设计了 MySQL内部数据格式(将内部格式看做一种自定义协议,用于 MySQL上层和数据引擎的通信)。通过这种 MySQL内部格式,屏蔽了各种存储引擎数据格式的差异,即使有一层实现方式改变了,另一层也不用改变,两层之间相互透明。

内部 MySQL数据格式由头信息、数据信息组成:

  1. 头信息

头信息是每列一个比特的“NULL bitmap”(本质就是一个bitmap),用于标记该列值是否为NULL。

  1. 数据信息

数据信息中,固定长度的字段,直接存放其数据;

对于varchar类型数据,存放方式为长度+数据;

对于可变长度数据类型,如blob(二进制大对象,是一个可以存储二进制文件的容器),存放方式为一个整形长度信息+该字段数据在内存中的指针信息。

交流QQ:609400870

猜你喜欢

转载自blog.csdn.net/songguangfan/article/details/86498929