WEB开发网
开发学院数据库MySQL MySQL内核:innodb动态数组内部实现 阅读

MySQL内核:innodb动态数组内部实现

 2008-12-03 11:15:15 来源:WEB开发网   
核心提示:动态数组涉及的文件是innodb存储引擎的三个文件:dyn0dyn.h、dyn0dyn.ic以及dyn0dyn.c, 这是一个基本的组件功能,MySQL内核:innodb动态数组内部实现,是作为一个动态的虚拟线性数组,数组的基本元素是byte,该数据项被分拆,这种情况主要用于log的缓冲,动态数组dyn主要用来存放mt

动态数组涉及的文件是innodb存储引擎的三个文件:dyn0dyn.h、dyn0dyn.ic以及dyn0dyn.c。

这是一个基本的组件功能,是作为一个动态的虚拟线性数组。数组的基本元素是byte。动态数组dyn主要用来存放mtr的锁定信息以及log。Dyn在实现上,如果block需要分裂节点,则会使用一个内存堆。每个blok块存储数据的数据字段的长度是固定的(默认值是512),但是不一定会完全用完。假设需要存储的数据项的尺寸大于数据块时,该数据项被分拆,这种情况主要用于log的缓冲。

2. 数据结构

  typedef struct dyn_block_struct  dyn_block_t;
typedef dyn_block_t     dyn_array_t;
#defineDYN_ARRAY_DATA_SIZE  512
  struct dyn_block_struct{
mem_heap_t*  heap;
ulint    used;
byte    data[DYN_ARRAY_DATA_SIZE];
UT_LIST_BASE_NODE_T(dyn_block_t)  base;
UT_LIST_NODE_T(dyn_block_t)     list;
#ifdef UNIV_DEBUG
ulint    buf_end;
ulint    magic_n;
#endif
};
  //下面两个是公共宏定义,见ut0lst.h
#define UT_LIST_BASE_NODE_T(TYPE)
struct {
ulintcount;/* count of nodes in list */
TYPE *start;/* pointer to list start, NULL if empty */
TYPE *end;/* pointer to list end, NULL if empty */
}
  #define UT_LIST_NODE_T(TYPE)
struct {
TYPE *prev;/* pointer to the previous node,
 NULL if start of list */
TYPE *next;/* pointer to next node, NULL if end of list */
}

字段解释:

1 2 3 4 5 6  下一页

Tags:MySQL 内核 innodb

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接