zoukankan      html  css  js  c++  java
  • MySql存储引擎探索

    数据库存储引擎

    是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。

    这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)

    我的理解:他是一种底层技术,一种解决方案,引擎就相当于数据库开发组将常用的一些数据库的存储问题解决方法,拼接起来组成一个套餐。你使用套餐123可以对应解决一系列不同的问题

     

    MySQL的存储引擎

     

    MyISAM拥有较高的插入,查询速度,但不支持事务

    InnoDB 5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定

    BDB源自Berkeley DB,事务型数据库的另一种选择,支持COMMITROLLBACK等其他事务特性

    Memory :所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失

    Merge:将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用

    Archive:非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取Archive拥有高效的插入速度,但其对查询的支持相对较差

    Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用

    Cluster/NDB :高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用

    CSV逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。---我记得这个就是用来存储索引的....?

    BlackHole 黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继???

     

    存储

     

    找到Mysql的数据路径

    C:ProgramDataMySQLMySQL Server 5.6data 中找到对应表格的所有文件

    如果引擎为MYISAM那么一张表一般存储3个文件

     

    这个图标识如果col1 是一个索引列,那么查找时我就会先去查找索引文件(MYI)然后根据索引的数据结构(B+Tree)快速定位到49数据的地址,然后再去MYD(数据)中查到地址对应的数据

    增加索引后,MYI文件中新增了对应的数据内容

    之前似乎会有个.frm存储表结构,现在字段似乎都存在别的统一存在别的文件里了可能是这个你也能找到log文件非常庞大估计就是用来存各种操作的

    InnoDB引擎

    我们尝试打开一个未加索引的 db 查看他的存储格式

    1. 发现存储一个ibd文件最小也要112KB

    2. 存储的方式

    t_test只有4行数据:

    t_test.idb文件打开后:

    1. 在文件中找不到表结构字段(搜索ID name是找不到的)

    2. 搜索主键ID 150701201也是找不到的

    3. 加了name索引后文件中多了两行(数字估计是以二进制存的)

    MongoDB的存储引擎

    serverStatus查看到storageEngine https://mongoing.com/archives/25432

     

    各类存储引擎说明https://mongoing.com/archives/1533

     

    MMAPv1 MMAPV1StorageEngine包含了mmapv1存储引擎的所有实现逻辑。

    WiredTiger https://docs.mongodb.com/manual/core/wiredtiger/index.html

    KVStorageEngine KVStorageEngine实际上不是一个真正存储引擎的实现,只是为了方便接入wiredTigerrocksKV类型的存储引擎而增加的一个抽象层。 KVStorageEngine实现了StorageEngine的接口,但其实现由KVEngine类代理,wiredTigerKV存储引擎接入mongdb时,只需实现KVEngine定义的接口即

    WiredTigerKVEngine WiredTigerKVEngine继承KVEngine,实现KVEngine的接口,其他的引擎如RocksEngine类似。

    inMemory https://docs.mongodb.com/manual/core/inmemory/index.html

     

    ·        如果参数值是wiredTigerMongoDB使用的存储引擎是WiredTiger,将数据持久化存储在Disk Files中;

    ·        如果参数值是inMemoryMongoDB使用的存储引擎是In-Memory,将数据存储在内存中;

    ACID

    事务的四个特点

    原子性(atomicity)

    一致性(consistency)

    隔离性(isolation)不同的事务并发操作相同的数据时,每个事务都有各自完成的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰。

    持久性(durability

     

    DDL

    数据库模式定义语言DDL(Data Definition Language)

     

     

  • 相关阅读:
    记录--部分sql函数、...
    记录--keep-alive实现路由页面缓存
    记录--JS隐式类型计算
    Node.js 安装及环境配置 以及google浏览器安装插件并使用
    Windows系统下PHP使用Redis
    linux常用命令全集
    LEMP--如何在Ubuntu上安装Linux、Nginx、MySQL和PHP
    进制的表现形式
    使用拆分组合法进行二进制与八进制,十六进制的相互转换
    使用8421码进行二进制与十进制的相互转换
  • 原文地址:https://www.cnblogs.com/RikuBlog/p/13296463.html
Copyright © 2011-2022 走看看