mysql csv存储引擎_2.2 mysql存储-CSV存储引擎

前言

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

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存储引擎怎么去存储的,那么存储引擎的数据是如何去存储的呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值