More Related Content
Similar to 腾讯大讲堂42 数据库内核设计思路浅析
Similar to 腾讯大讲堂42 数据库内核设计思路浅析 (20)
More from George Ang (20)
腾讯大讲堂42 数据库内核设计思路浅析
- 4. 服务器核心系统总体结构
客户客户 客户客户 客户客户
TCP/IP 网络TCP/IP 网络
连接监听线程连接监听线程
总控线程总控线程 检查点线程检查点线程
工作线程工作线程
工作线程工作线程
工作线程工作线程
任务队列任务队列
系统 / 日志缓冲系统 / 日志缓冲
读 / 写线程读 / 写线程 日志线程日志线程
DBDB
会话线程会话线程
- 13. 语法 / 词法分析
负责解析 SQL 命令和过程性语句块
过滤注释 , 解析参数
使用成熟的工具(如 YACC/LEX )生成
灵活的语法规则定义
便于语法的扩展与修改
生成统一格式的语法树
- 14. 举例
from_tv_list :
from_tv
{
$$ = (par_from_tv_list_t *)new_node(PAR_FROM_TV_LIST,1);
$$->un_1.from_tv_list_1.from_tv = $1;
}
| from_tv ',' from_tv_list
{
$$ = (par_from_tv_list_t *)new_node(PAR_FROM_TV_LIST,2);
$$->un_1.from_tv_list_2.from_tv_list = $3;
$$->un_1.from_tv_list_2.from_tv = $1;
};
- 15. struct par_from_tv_list_struct
{
ulint par_type; // 值为 PAR_FROM_TV_LIST : 1134
ulint par_tag; //1 :规则 1 ; 2 :规则 2
ulint par_lineno;
union
{
struct
{
par_from_tv_t *from_tv; //$1
}from_tv_list_1; // 规则 1
struct
{
par_from_tv_t* from_tv; //$1
par_from_tv_list_t* from_tv_list; //$3
}from_tv_list_2; // 规则 2
}un_1;
};
- 16. 对应的语法结构
Select * from t1, t2, t3;
par_from_tv_list_str
uct 结构
par_from_tv_list_t*
from_tv_list;
par_from_tv_t*
from_tv
par_from_tv_list_str
uct 结构
par_from_tv_list_t*
from_tv_list;
par_from_tv_t*
from_tv
par_from_tv_list_str
uct 结构
par_from_tv_t*
from_tv
par_from_tv_struct
结构
T1
par_from_tv_struct
结构
T2
par_from_tv_struct
结构
T3
规
则
2 规
则
1
- 23. 事务和线程的分离
事务对应于用户连接 / 会话 (SESSION)
每个连接,有一个活动的事务
工作线程是共享资源
一组工作线程,协同工作,为所有的事务
服务
数据库对象的封锁失败,导致事务暂停,
却不会阻塞工作线程
提高 CPU 的利用率
- 24. 事务和线程的分离
事务对应于用户连接 / 会话 (SESSION)
每个连接,有一个活动的事务
工作线程是共享资源
一组工作线程,协同工作,为所有的事务
服务
数据库对象的封锁失败,导致事务暂停,
却不会阻塞工作线程
提高 CPU 的利用率
- 27. 重做 (REDO) 日志
日志数据的构成:物理页的修改信息
日志中不记录逻辑上的数据库操作,如 : 插入,删除等
逻辑上的数据库操作,被记录在回滚段上
恢复时,以完整的物理事务为单位
最后一个不完整的物理事务被丢弃
日志对回滚段和普通的数据文件同样处理
物理恢复完成后,按照回滚段上的逻辑操作,对
未提交的事务做相应的反动作,以取消这个事务
- 28. 分层设计 / 优化
隔离 CPU 的特性
高地址高位 (INTEL)
低地址高位 (SPARC)
隔离 OS 特性
文件系统
线程
同步原语
充分利用 LINUX 2.6 核心