mysql文档--架构体系--《Mysql底层探索》-文档架构首页

阿丹:

        中存在很多其他的文章,一定要细心阅读以及理解!!!

架构体系大纲:

当涉及到MySQL的架构体系时,可以按以下大纲组织:

  1. 客户端/应用程序层:

    • 各种客户端工具和应用程序通过网络连接到MySQL服务器。
    • 客户端使用MySQL提供的协议与服务器进行通信,并发送SQL查询和接收结果。
  2. 连接管理组件:

    • 连接管理组件主要负责处理客户端连接和身份验证。
    • 它管理连接池,控制连接的建立和断开,并执行身份验证和授权。
  3. SQL接口:

    • SQL接口接收来自客户端的SQL查询。
    • 它解析查询语句并将其转发给适当的处理组件。
  4. 查询优化器和执行计划:

    • 查询优化器负责分析和优化查询语句,以确定最佳的查询执行计划。
    • 执行计划确定了查询的具体逻辑和物理执行方式。
  5. 存储引擎:

    • 存储引擎负责实际存储和检索数据。
    • MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等。
    • 每个存储引擎具有自己的数据存储和索引结构、事务处理机制等。
  6. 缓存和缓冲管理:

    • 缓存和缓冲管理用于提高查询性能和减少I/O操作。
    • MySQL使用查询缓存来缓存查询结果,并使用缓冲区来缓存磁盘上的数据。
  7. 日志管理:

    • 日志管理用于记录和恢复数据库的操作和更改。
    • MySQL使用二进制日志、事务日志和错误日志来记录关键操作和故障信息。
  8. 事务处理:

    • 事务处理用于确保数据库操作的原子性、一致性、隔离性和持久性。
    • MySQL支持ACID事务,并使用锁和读写隔离级别来处理并发访问。
  9. 数据字典:

    • 数据字典包含有关数据库结构、表、列等的元数据信息。
    • MySQL使用数据字典来管理和存储这些信息,并在查询和操作过程中使用它们。

重点:

        存储引擎、缓存和缓冲管理、日志管理、事务管理、数据字典。

本文章探索mysql实现的底层。追求为学习系统化的进行梳理。

存储引擎:

MySQL使用不同的存储引擎来支持底层数据存储和索引结构。每个存储引擎可以实现不同的底层数据结构,下面是MySQL中两个常见的存储引擎及其底层数据结构:

  • InnoDB存储引擎:

    • InnoDB是MySQL默认的事务性存储引擎,它使用了B+树索引结构。
    • 对于表数据的存储,InnoDB使用了聚簇索引(clustered index),即将表数据和主键索引存储在一起,这样可以提高查询性能。
    • 辅助索引(secondary index)使用B+树结构存储,与聚簇索引相关联。辅助索引的叶子节点包含主键值,以便在查询时能够定位到正确的行。

mysql文档--默认存储引擎--innodb存储引擎--innodb引擎全解_一单成的博客-CSDN博客

事务隔离级别详解--效果演示以及解释: 

mysql文档--innodb中的重头戏--事务隔离级别!!!!--举例学习--现象演示_一单成的博客-CSDN博客

事务隔离级别详解--原理底层详解: 

mysql文档--innodb中的重头戏--事务隔离级别!!!!--举例学习--底层原理探索_一单成的博客-CSDN博客

  • MyISAM存储引擎:

    • MyISAM是MySQL的另一个常用存储引擎,它使用了表级锁定和非聚簇索引结构。
    • MyISAM使用B+树索引来管理表数据和辅助索引数据。
    • 对于表数据的存储,MyISAM将数据行按照插入顺序进行物理存储,而不是根据主键值进行聚簇存储。
    • 辅助索引也使用B+树结构进行存储,不同于InnoDB,辅助索引的叶子节点存储指向数据行的物理地址。

mysql文档--myisam存储引擎--myisam引擎全解--底层探索_一单成的博客-CSDN博客

值得注意的是,MySQL还支持其他存储引擎,如Memory存储引擎、CSV存储引擎等,每个存储引擎都可以具有不同的底层数据结构和索引实现,以满足不同的应用需求。选择适当的存储引擎取决于你的应用程序的性能、事务需求和数据访问模式等因素。

innoDB引擎与Mylsam存储引擎的区别

nnoDB和MyISAM是MySQL中两种常用的存储引擎,它们在以下方面存在一些区别:

  1. 事务支持:InnoDB是MySQL中唯一支持事务处理的存储引擎,它采用了ACID(原子性、一致性、隔离性和持久性)的事务特性。这使得在并发环境下数据的一致性得到保证。而MyISAM不支持事务,如果有并发的读写操作,可能会导致数据不一致。

  2. 锁级别:InnoDB使用行级锁(row-level locking),可以更细粒度地锁定数据,提供更好的并发性能。而MyISAM只支持表级锁(table-level locking),在同时进行读写操作时可能会出现锁冲突,导致性能下降。

  3. 数据存储方式:InnoDB将数据和索引存储在同一个文件中,而MyISAM将数据和索引存储在不同的文件中。这使得InnoDB在进行范围查询和排序操作时具有更好的性能,因为相关的数据通常存储在一起。

  4. 外键支持:InnoDB支持外键(foreign key)约束,可以确保关联表之间的数据完整性。MyISAM不支持外键约束。

  5. 全文搜索:MyISAM是MySQL中唯一一个支持全文搜索索引的存储引擎。InnoDB在MySQL 5.6及更高版本中也开始支持全文索引功能。

综上所述,InnoDB相较于MyISAM具有更多的高级功能和可靠性,适用于需要事务支持、高并发性能和数据一致性的应用场景。MyISAM则适合于主要进行插入操作和全文搜索的应用场景。选择合适的存储引擎应根据实际需求和优化目标进行决策。

mysql中的其他存储引擎

除了InnoDB和MyISAM,MySQL还提供了其他存储引擎。以下是一些常见的MySQL存储引擎:

  1. Memory(或Heap):Memory引擎将表数据存储在内存中,适用于对于速度和临时性而言非常重要的场景,但是当数据库关闭时,数据将丢失。

  2. Archive:Archive引擎使用压缩算法存储数据,对于数据存档和只读目的非常有用。它适用于大量历史数据的存储,但不支持索引,只支持插入、查询和删除。

  3. Federated:Federated引擎允许将数据从一个MySQL服务器存储在另一个MySQL服务器上。它可以在不同的数据库实例之间实现数据共享和分布式查询。

  4. CSV:CSV引擎将表数据存储为逗号分隔的值(CSV)文件,适用于导入和导出数据。

  5. Blackhole:Blackhole引擎接收写操作但不实际将它们存储在磁盘上,而是将它们丢弃。它用于复制或转发操作,并且不占用磁盘空间。

  6. NDB Cluster:NDB Cluster(或MySQL Cluster)引擎是一个分布式存储引擎,适用于高可用性和高写入负载的大规模数据库集群。它提供了自动数据分片和复制,是MySQL的集群解决方案。

每个存储引擎都具有自己的特点和应用场景,选择合适的存储引擎应根据应用程序的需求,例如数据一致性、事务支持、读写频率等因素进行决策。在选择存储引擎时,需要仔细评估每个引擎的功能和限制,确保符合需求。

mysql中的锁

MySQL中有多种类型的锁用于控制对数据的并发访问。以下是MySQL中常见的锁类型:

  1.   表级锁(Table-level lock):

    • 表级锁是对整个表进行锁定,其他会话无法同时对同一表进行修改操作。这种锁是MySQL默认的锁策略,适用于并发较低的场景或者需要全表修改的情况。
    • 表级锁包括读锁(共享锁)和写锁(独占锁)。读锁之间不互斥,多个会话可以同时持有读锁;而写锁之间互斥,只有一个会话可以获得写锁。
  2. 行级锁(Row-level lock):

    • 行级锁是对数据行进行锁定,可以允许在同一表上并发地读取和写入不同的行。这种锁提供了更细粒度的并发控制,可以减少锁冲突和提高并发性能。
    • 行级锁可以是共享锁(读锁)或独占锁(写锁)。共享锁允许并发读取,但阻止写入操作;独占锁则要求排它性访问,其他会话无法同时对同一行进行修改操作。
  3. 页级锁(Page-level lock):

    • 页级锁是对数据页进行锁定,每个数据页包含多个数据行。它介于表级锁和行级锁之间,在并发性能和锁粒度之间取得平衡。
    • 页级锁对于少量修改操作时可能比表级锁更有效,但对于高并发环境下的大规模修改操作,页级锁可能导致锁冲突和性能问题。

MySQL还支持其他类型的锁,如意向锁(Intent Lock)、间隙锁(Gap Lock)和记录锁(Record Lock)等,用于在不同的情况下做更精确的锁定。这些锁都旨在保证数据的一致性和并发性能。

为了正确使用锁,需要了解锁的类型和使用方式,避免锁住过多的资源,减少锁冲突和死锁的发生。根据具体的业务需求和并发访问模式,选择合适的锁策略以提高数据库系统的性能和可用性。

mysql技术文档--mysql锁专精--锁全解!!!_一单成的博客-CSDN博客

数据字典

MySQL中的数据字典是一个存储关于数据库和其表的元数据信息的系统表。数据字典包含了有关数据库、表、列、索引、约束等的详细信息。以下是关于MySQL数据字典的一些重要信息:

  1. INFORMATION_SCHEMA:MySQL中的数据字典信息存储在一个名为INFORMATION_SCHEMA的系统数据库中。它包含了一系列的系统表,这些表存储了关于数据库、表、列、索引、视图、用户权限等的元数据信息。

  2. 数据字典表:INFORMATION_SCHEMA数据库中的表可以查询用于获取数据库和表的元数据信息。例如,可以使用"INFORMATION_SCHEMA.TABLES"来获取数据库中的所有表,或使用"INFORMATION_SCHEMA.COLUMNS"来获取表的列信息。

  3. 元数据信息:数据字典表提供了丰富的元数据信息,如表名、列名、数据类型、索引、主键、外键和约束等。使用这些表,可以查询和了解数据库中的结构和属性,以便进行管理和优化。

  4. 动态更新:数据字典是动态更新的,它反映了数据库对象的实时状态。当创建、修改或删除数据库对象时,数据字典将自动更新以反映这些更改。

利用数据字典,您可以查询数据库的结构以及相关的元数据信息,以帮助您管理数据库和进行性能优化。可以使用SQL语句与INFORMATION_SCHEMA表进行交互,以获取所需的信息。这对于开发人员、数据库管理员和分析师来说都是非常有用的工具。

undo log(撤销日志)与redo log(重做日志)

Undo log是InnoDB特有的日志类型,其作用是记录每个事务所做的修改操作,以便在事务回滚或数据库恢复时撤销这些修改。Undo log用于实现事务的原子性、隔离性和一致性。

Redo log是大多数数据库管理系统中常见的概念,它也在InnoDB中使用。Redo log记录了事务对数据库所做的修改操作,以便在数据库崩溃或故障恢复时重新执行这些操作,确保数据的持久性。

因此,虽然undo log是InnoDB存储引擎中独有的日志类型,但redo log是常见于许多数据库管理系统中对数据持久性进行保护的一种机制。这两种日志类型在InnoDB中的结合使用,确保了事务的原子性、一致性和持久性。

你可能感兴趣的:(mysql,mysql,数据库,架构,java,大数据)