前言

写这个东西基本没有什么计划,也是自己边写边看,边总结的一个过程,不过存储引擎这块应该是会占据大量的篇幅的。

CSV存储引擎

先看看我们比较简单的类型,CSV类型的(InnoDB太复杂了)

CREATE TABLE USER1(

id int not null ,

c1 varchar(10) not null,

c2 char(20) not null) engine=csv;

可以看到,在data目录下的,对应的database里面,对了几个文件

data>ls

user1.CSM user1.CSV user1_354.sdi

#.CSM文件记录表状态与数据量

#.CSV文件记录的就是具体的数据信息

#.sdi记录了表结构信息

我们指定了CSV类型,那么SQL解析器识别到这里的时候,那一块代码去处理呢,又是怎么去处理的呢?

在源码的目录中,有一个目录是storage/csv,这里面就保存csv存储引擎是如何工作的。

在ha_tina.h文件中,定义了存储引擎的很多接口,我们现在只看create接口的实现,实现在ha_tina.cc文件中。

那么我们就会思考,这个create函数是从哪里调用过了的,ha_tina是handler的派生类。因此就是

>Sql_cmd_create_table::execute

| >mysql_create_table

| | >mysql_create_table_no_lock

| | | >create_table_impl

| | | | >rea_create_base_table

| | | | | >ha_create_table

| | | | | | >handler::ha_create

| | | | | | | >ha_tina::create

根据我们提交的命令行,进入sql解析器,然后进行执行的。

>do_command

| >dispatch_command: COM_QUERY

| | >mysql_parse

| | | >mysql_execute_command: SQLCOM_CREATE_TABLE

还有就是sdi文件是在什么时候生成的?大略的翻了下ha_create_table代码,没有发现。打开sdi文件文件看看,发现关键字“mysqld_version_id”,源码中搜索可以发现在sdi.cc文件中。以下完成了初始化的过程。

>rea_create_base_table

| >Dictionary_client::store

| | >Storage_adapter::store

| | | >sdi::store

| | | | >serialize

| | | | | >generic_serialize

| | | | >sdi_file::store_tbl_sdi

到这里我们就了解了,三个文件是如何存储的。

那么,一个create table语句,他是如何被监听,被执行的呢?我们先简单过下.

在mysqld_main函数中,监听连接,有新的请求的时候,创建新的连接。这块内容与我们本章要去学习的东西没有太大相关性,之后再去理解。

>mysqld_main

| >mysqld_socket_acceptor->connection_event_loop();

| |>Mysqld_socket_listener::listen_for_connection_event

| |>Connection_handler_manager::process_new_connection

| | |>Per_thread_connection_handler::add_connection

/*校验是否存在空闲的线程*/

if (!check_idle_thread_and_enqueue_connection(channel_info)) return false;

/*

There are no idle threads avaliable to take up the new

connection. Create a new thread to handle the connection

*/

channel_info->set_prior_thr_create_utime();

/*handle_connection中创建线上*/

error =

mysql_thread_create(key_thread_one_connection, &id, &connection_attrib,

handle_connection, (void *)channel_info);

进入handle_connection函数,就可以看到在这个里面创建THD(线程描述对象)描述了请求线程相关的信息。这里就可以看到do_command函数,到这里可以看到就回来了。

总结

本节从存储文件开始,大致梳理下整体的SQL的执行流程,并且了解了比较简单的CSV存储引擎怎么去存储的,那么存储引擎的数据是如何去存储的呢?

mysql csv存储引擎_2.2 mysql存储-CSV存储引擎相关推荐

  1. mysql支持数据安全的引擎_2、MySQL常见数据库引擎及比较?

    MySQL存储引擎简介 MySQL支持数个存储引擎作为对不同表的类型的处理器.MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎: MyISAM管理非事务表.它提供高速存储和检索,以及 ...

  2. mysql支持的并发数_重学MySQL系列(五):谈谈对MySQL的存储引擎的理解

    原创作者,公众号[程序员读书],欢迎关注公众号,转载文章请注明出处哦. MySQL关于存储引擎的架构设计,相较于其他关系数据库管理系统,比如Oracle,SQL Server等数据库,这是MySQL最 ...

  3. Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型

    1.基础知识 1.1.数据库概述 简单地说:数据库(Database或DB)是存储.管理数据的容器: 严格地说:数据库是"按照某种数据结构对数据进行组织.存储和管理的容器". 总结 ...

  4. MySQL存储引擎精讲(附带各种存储引擎的对比)

    接下来介绍一下存储引擎的基本概念.MySQL 支持的存储引擎.存储引擎的选择以及操作默认存储引擎. 什么是存储引擎 数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和 ...

  5. mysql中存储引擎是啥_mysql中的存储引擎

    mysql存储引擎概述 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. ...

  6. mysql maria引擎_MySQL/mariadb知识点——存储过程及存储引擎

    MySQL架构 连接器 连接池,安全认证.线程池.连接限制.检查内存.缓存 SQL接口 DML.DDL SQL解析器,对SQL语句的权限检查.解析为二进制程序 优化器,优化访问路径 缓存cache,b ...

  7. mysql barracuda_这可能是把MySQL存储引擎讲解的最清楚的一篇文章了

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享!Java架构筑基​zhuanlan.zhihu.comJava架构筑基--专注于Java技术的研究与分享! 后续文章将首 ...

  8. Linux九阴真经之九阴白骨爪残卷9(存储引擎MyISAM、MySQL服务器变量)

    一.MyISAM存储引擎 缺点: 不支持事务 最小粒度锁:表级 读写相互阻塞,写入不能读,读时不能写 不支持MVCC(支持多版本并发控制机制) 不支持聚簇索引 不支持数据缓存 不支持外键 崩溃恢复性较 ...

  9. mysql各版本的默认的存储引擎_Mysql常见的几种存储引擎

    一.mysql的体系结构 整个MysqlServer有一下几部分组成 Connection Pool : 连接池组件 Management Services & Utilities : 管理服 ...

最新文章

  1. WEBSHELL恶意代码批量提取清除工具
  2. C#人爱学不学9[C#5.0异步实例+WPF自己的MVVM Async应用 1/12]
  3. php cros跨域处理,php接口设置cors实现ajax跨域
  4. 《Fabric 云存储的电子健康病历系统》(2)病历结构体 Records
  5. 使用 Visual Studio Code 进行远程开发
  6. MS的完整形式是什么?
  7. EasyRecovery---ppt恢复技巧
  8. 解决SecoClient接收返回码超时
  9. 网购工具软件chrome扩展插件大推荐
  10. 十款免费数据恢复软件
  11. 解决outlook2016 中邮件中,点击链接提示(您的组织策略阻止我们为您完成此操作)解决方案
  12. oracle 统计标准误差,标准偏差和标准误差的区别
  13. excel表格斜线_WORD圆角表格,如此惊艳
  14. WIN间远程桌面连接:你的凭据不工作解决(亲测有效)
  15. 记录四川移动盒子打开adb命令的方法 型号:UNT402H
  16. 苹果手机隐私分析数据是什么_苹果公司以用户为中心的隐私保护方法能教给我们什么?
  17. eclipse写程序从hdfs上下载文件到本地报错:at org.apache.hadoop.util.Shell.runCommand
  18. win10安装c语言不兼容,手把手还原win10系统visual c++不兼容的技巧
  19. PDF和CDF图的区别
  20. 向excel里面插入网络图片

热门文章

  1. 美国一公司起诉苹果 指控iPhone中“个人热点”技术侵犯其专利
  2. 苹果新闻订阅服务Apple News +推出48小时获得逾20万用户
  3. 刘强东发新年信:过去一年我们异常艰难
  4. ubuntu java android_Ubuntu中为Android系统实现内置Java应用程序测试Application Frameworks层的硬件服务...
  5. android canvas 清空画布,清除canvas画布内容(点擦除+线擦除)
  6. 多目录Makefile(库及分层目录)
  7. 深度学习入门读书笔记:Day-14
  8. ORACLE删除表分区和数据
  9. seo日常工作表_5 個日常要做的 SEO 維護工作
  10. 怎么找到python的文件_python – 如何找到文件所在的挂载点?