zoukankan      html  css  js  c++  java
  • 初识MariaDB存储引擎

    在看MariaDB的存储引擎之前,可以先了解MySQL存储引擎。

    MySQL常用的存储引擎:

    • MyISAM存储引擎:是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。 

    MyISAM表还支持3中不同的存储格式: 

    1 静态表 
    2 动态表 
    3 压缩表 

    静态表是默认的存储格式,静态表中的字段都是非变长的字段,优点是:存储非常迅速,容易缓存,出现故障容易恢复;缺点是:占用的空间通常比动态表多。(注意: 在存储时,列的宽度不足时,用空格补足,当时在访问的时候并不会得到这些空格) 
    动态表的字段是变长的,优点是:占用的空间相对较少,但是频繁地更新删除记录会产生碎片,需要定期改善性能,并且出现故障的时候恢复相对比较困难。 
    压缩表占用磁盘空间小,每个记录是被单独压缩的,所以只有非常小的访问开支。 

    MyISAM表存储为三个文件:.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)

    • InnoDB存储引擎:提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。 
    • MEMORY(heap)存储引擎:memory实际是heap的替代品。使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件(只包含表定义)。
      • 优点:MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引
      • 缺点:一旦服务关闭,表中的数据就会丢失掉。其只支持表锁,并发性能较差,并且不支持TEXT和BLOB列类型.存储变长字段(varchar)时是按照定常字段(char)的方式进行的,因此会浪费内存
      • 关于该存储引擎的浅析:http://www.jb51.net/article/29039.htm
    • MERGE存储引擎:是一组MyISAM表的组合,这些MyISAM表必须结构完全相同。MERGE表本身没有数据,类似于一个视图.对MERGE类型的表进行查询、更新、删除的操作,就是对内部的MyISAM表进行的。似乎看到分区表的影子,但完全是两种不同的东西.

          官网说明:https://www.mariadb.com/kb/en/merge/

    • archive存储引擎:这种类型只支持select 和 insert语句,而且不支持索引。非常适合存储大量的独立的作为历史记录的数据。Archive拥有高效的插入速度,但其对查询的支持相对较差常,应用于日志记录和聚合分析方面。
    • Federated: 将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
    • CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。
    • BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继

     MYSQL 中的部分存储引擎的特性:

    Attribute

    MyISAM

    Heap

    BDB

    InnoDB

    Transactions(支持事务)

    No

    No

    Yes

    Yes

    Lock granularity(锁粒度)

    Table

    Table

    Page (8 KB)

    Row

    Storage(存储)

    Split files

    In-memory

    Single file per table

    Tablespace(s)

    Isolation levels(隔离级别)

    None

    None

    Read committed

    All

    Portable format(可移植性)

    Yes

    N/A

    No

    Yes

    Referential integrity(参照完整性,似乎是对外键的支持)

    No

    No

    No

    Yes

    Primary key with data

    No

    No

    Yes

    Yes

    MySQL caches data records

    No

    Yes

    Yes

    Yes

    Availability(支持的版本)

    All versions

    All versions

    MySQL-Max

    All Versions

     


    MariaDB 与 MySQL 相比较

    MariaDB 提供以下特性:

    • XtraDB 替换 InnoDB,XtraDB 是 Percona 开发维护的 InnoDB 威力加强版,整合 Google、Facebook 等公司和 MySQL 社区的补丁。
    • Aria 存储引擎和 Sphinx 存储引擎
    • 基于 Gelera Cluster 的 MariaDB 集群方案
    • 多主复制(将在 MariaDB 10.0 实现,由淘宝贡献)
    • Cassandra 存储引擎(将在 MariaDB 10.0 实现)

    ,MariaDB 更强的地方在于:

    • Aria(原名Maria) 存储引擎

    Aria 存储引擎是默认被编译进MariaDB 5.1里的,并且在mysqld启动的时候就要求同时启动.

    另外,内部的磁盘表是Aria表格式而不是MyISAM表格式.这将使某些GROUP BYDISTINCT请求速度更快,因为Aria有比MyISAM更好的缓冲机制.包含Aria是MariaDB 5.1和MySQL 5.1之间的一个不同.

    There are also some new options to CREATE TABLE:

      • TRANSACTIONAL= 0 | 1 : Transactional means crash-safe for Aria
      • PAGE_CHECKSUM= 0 | 1 : If index and data should use page checksums for extra safety.
      • TABLE_CHECKSUM= 0 | 1 : Same as CHECKSUM in MySQL 5.1
      • ROW_FORMAT=PAGE : The new cacheable row format for Aria tables. Default row format for Aria tables and only row format that can be used if TRANSACTIONAL=1. To emulate MyISAM, use ROW_FORMAT=FIXED orROW_FORMAT=DYNAMIC
      • CHECKSUM TABLE now ignores values in NULL fields. This makes CHECKSUM TABLE faster and fixes some cases where same table definition could give different checksum values depending on row format. The disadvantage is that the value is now different compared to other MySQL installations. The new checksum calculation is fixed for all table engines that uses the default way to calculate and MyISAM which does the calculation internally. Note: Old MyISAM tables with internal checksum will return the same checksum as before. To fix them to calculate according to new rules you have to do an ALTER TABLE. You can use the old ways to calculate checksums by using the option --old to mysqld or set the system variable '@@old' to 1 when you doCHECKSUM TABLE ... EXTENDED;
      • At startup Aria will check the Aria logs and automatically recover the tables from last checkpoint if mysqld was not taken down correctly.
    • PBXT 存储引擎

    PBXT 是 MariaDB 附带的一种存储引擎,PBXT 在 MariaDB 的 5.1/5.2/5.3 版本中存在,但从 MariaDB 5.5 开始就不再提供 PBXT 存储引擎,而且以后也将不再提供。

    原因是 PBXT 已经不再继续开发了,当然,在 MariaDB 的源码发行中还将包含它的源码,但你需要自行 构建 才能使用。

    Percona XtraDB 是 InnoDB 存储引擎的增强版,被设计用来更好的使用更新计算机硬件系统的性能,同时还包含有一些在高性能环境下的新特性。

    XtraDB 存储引擎是完全的向下兼容,在 MariaDB 中,XtraDB 存储引擎被标识为"ENGINE=InnoDB",这个与 InnoDB 是一样的,所以你可以直接用XtraDB 替换掉 InnoDB 而不会产生任何问题。

    Percona XtraDB 包含有所有 InnoDB's 健壮性,可依赖的 ACID 兼容设计和高级 MVCC 架构。XtraDB 在 InnoDB 的坚实基础上构建,使 XtraDB 具有更多的特性,更好调用,更多的参数指标和更多的扩展。

    从实践的角度来看,XtraDB 被设计用来在多核心的条件下更有效的使用内存和更加方便,更加可用。

    新的特性被用来降低 InnoDB 的局限性。

    MariaDB 对存储引擎新特性的选择基于用户的需求和现实环境中的真实需求。

    • FederatedX 存储引擎 分布式存储 
    • SphinxSE 存储引擎 用于全文检索

      官网介绍:https://www.mariadb.com/kb/en/about-sphinxse/

    • 更快的复制查询处理
    • 线程池
    • 更少的警告和bug
    • 运行速度更快
    • 多的 Extensions (More index parts, new startup options etc)
    • 更好的功能测试
    • 数据表消除
    • 慢查询日志的扩展统计
    • 支持对 Unicode 的排序
    MariaDB存储引擎小结
    引擎引擎 优点 缺点 适用场景 问题思考
    Aria        
    XtraDB 支持事务

    1写入的效率较差
    2占用更多的存储空间

    需要事务支持的生产环境  
    FederatedX 支持分布式系统   需要使用分布式系统的情况

    1.和单机相比的读写效率如何?
    2.如某个RDBMS故障会发生什么?

    SphinxSE  支持全文检索  

    需要全文检索的情景
    使用前要单独安装

     
    MEMORY  读写速度快 1.重启后数据清空
    2.占用内存空间
     使用读频繁的基础代码表

    可以创建Aria表再通过触发器定入memory表
    aria表负责更新,memory表负责读取
    重启后通过aria表初始化memory表

    MERGE 合并多个同构表进行操作

    1.执行效率没有提升
    2.本身没有任何约束

    如:将数据进行分表存储(表的数
    量随时间增长)
    又需要对这些表
    进行聚合操作,这时可以使用merge

    感觉只是在使用的时候方便
    并没有带来效率的提升
    约束完全由基础表控制,这样会在多个表中
    产生重复数据
    archive  插入速度非常快

    1.只支持插入和查找
    2.不支持索引
     

     适用于日志类的,只插入不修改
    且查询较少的数据.
     
    CSV        
    BlackHole        

    官网的一些建议:

    Choosing the right storage engine

    • Xtradb and InnoDB is a good general transaction storage engine and usually the best choice if unsure.

       --Xtradb and InnoDB 是一种很好的通用事务存储引擎,在无法确定如何选择时,它也许就是一种最佳的选择

    • MyISAM and Aria have a small footprint and allow for easy copy between systems. MyISAM is MySQL's oldest storage engine, while Aria is MariaDB's more modern improvement.

      --MyISAM and Aria占用的资源比较小,两者是兼容的,可以很容易的在这两个系统间进行迁移 . MyISAM是mysql最古老的存储引擎,而Aria是MariaDB对它的更先进的改进.

    • TokuDB is a transactional storage engine which is optimized for workloads that do not fit memory, and provides a good compression ratio.
    • MEMORY does not write data on-disk (all rows are lost on crash) and is best-used for read-only caches of data from other tables, or for temporary work areas.

      --MEMORY 不写数据到硬盘中(意味着重启将丢失),最适用于缓存其它表中的数据用于只读,或者用于临时工作

    • The Archive storage engine is, unsurprisingly, best used for archiving.

      --Archive顾名思义最适用于存档类的数据

    • CONNECT allows access to different kinds of text files and remote resources as if they were regular MariaDB tables.
    • SphinxSE is used as a proxy to run statements on a remote Sphinx database server (mainly useful for advanced fulltext searches).
    • Spider uses partitioning to provide data sharding through multiple servers.
    • ScaleDB is a commercial storage engine suited for large-scale online transaction processing and data warehousing.

    常用的有关存储引擎的操作命令

    查看数据库可以支持的存储引擎:

    show engines

    查看某张表使用的存储引擎

    Show create table tablename; //显示表的创建语句,其中包含存储引擎信息ENGINE=XXX
    show table status like ‘XXX’G   //显示表的当前状态

     创建表时指定:

    Create table XXX(
    columnName(列名1)  type(数据类型)  attri(属性设置),
    columnName(列名2)  type(数据类型)  attri(属性设置),
    ……..) engine = engineName

    修改表的存储引擎:

    Alter table tableName engine =engineName
  • 相关阅读:
    linux grep命令
    PHP 利用simplexml_load_file 读取XML对应的字段 然后存入mysql数据库
    php 设计模式之单类模式
    Mac C#开发工具Rider安利与环境配置教程
    模拟,贪心,枚举(二)
    模拟,贪心,枚举
    10.10 review
    review 10.9
    10.6 review
    9.28 review
  • 原文地址:https://www.cnblogs.com/champaign/p/3422377.html
Copyright © 2011-2022 走看看