① "数据字典"指的是什么
一、数据字典并不是传统的纸质字典,它是一些系统自带表,可以查询数据库相关信息,一般存在于电脑系统或是其它电子系统中,供人查阅不了解条目的信息与解释。
数据字典存储有关数据的来源、说明、与其他数据的关系、用途和格式等信息,它本身就是一个数据库,存储“关于数据项的数据”。数据字典是个指南,它为数据库提供了“路线图”,而不是“原始数据”。
换句话说,数据字典通常是指数据库中数据定义的一种记录,类似一个数据库的数据结构,但其内容要比数据库的数据结构描述丰富得多(Malamud, 1989)。在收集有关数据信息,建立数据库的初始阶段,必须建立数据项的命名约定,必须统一不同部门、不同个人之间对共同关心的数据的内涵、来源和命名的观念。
这个过程要涉及数据监管人、用户和数据库开发人员,是一个需要反复多次的过程。这个统一的命名约定,及其附带的说明,就是数据字典。
二、数据字典内容包括:
1、数据库中所有模式对象的信息,如表、视图、簇、及索引等;
2、分配多少空间,当前使用了多少空间等;
3、列的缺省值;
4、约束信息的完整性;
5、用户的名字;
6、用户及角色被授予的权限;
7、用户访问或使用的审计信息;
8、其它产生的数据库信息。
② MySQL Data Dictionary 详解
在 MySQL 8.0 之前,Server 层和存储引擎(例如 InnoDB)各自保留元数据,如 schema 名称、表定义等,导致信息存储重复冗余,且存在元数据不同步的问题。不同引擎间元数据存储形式和位置的差异(如.FRM, .PAR, .OPT, .TRN and .TRG 文件)使得元数据管理分散且复杂。将元数据存放在不支持事务的表和文件中,使 DDL 变更非原子,增加了崩溃恢复的难度。为解决这些挑战,MySQL 8.0 引入了 data dictionary,实现统一的元数据管理。
data dictionary 通过 Server 层和引擎层共享的 InnoDB 引擎表存储元数据,支持原子性操作,有效避免了元数据不同步的问题。它提供统一的 client API,包括元数据的基本操作(如获取、删除、存储、更新)。底层实现包括对 InnoDB 引擎数据字典表的读写操作,以及两级缓存加速内存访问,提高性能。
在内存和引擎层面,data dictionary 的数据结构遵循多态和接口/实现设计模式。Table_impl 是一个常访问的内存结构,包含表相关的元数据属性,如基本引擎类型、注释、分区类型等。Table_impl 还集成列信息、索引信息和分区信息等复杂属性,这些属性来自其他 DD 表。Column_impl 和 Partition_impl 分别表示列和分区的元信息,与 Table_impl 联系。
Table_impl 的持久化存储和访问通过 DD tables 实现,这些表存储在 mysql 表空间中,用户可通过 INFORMATION SCHEMA 查看部分视图。获取表元信息时,会调用 Storage_adapter::get() 接口,该接口根据 Tables 对象的枚举类型下标查找表定义中的列。
data dictionary 实现了两级缓存:一级是客户端本地的缓存,用于加速对相同对象的重复访问;二级是多线程共享的缓存,确保所有线程可访问并处理并发访问。缓存底层统一基于哈希表实现。
局部缓存位于每个 Dictionary_client 内部,管理不同类型的对象缓存,包含 committed、uncommitted 和 dropped 状态的对象。共享缓存是全局唯一的,通过 Shared_dictionary_cache 实现,包含针对各种类型对象的缓存。
缓存获取过程从一级局部缓存到二级共享缓存,最后到存储引擎。在缓存中获取时,优先查找 uncommitted 和 dropped 的 registry,然后是 committed registry,如果未找到,则从存储引擎加载。
在缓存 miss 的处理中,共享缓存会加锁后进行 hash map 查找,若存在则增加引用计数并返回;若不存在,则从存储引擎加载并加入缓存。并发控制通过广播和等待机制实现。
Auto_releaser 类用于确保在作用域内获取的 DD cache 对象不被释放,通过链式管理在不同层次间转移释放需求。在 DDL 过程中,通过 data dictionary 完成表定义的删除和存储。
总结而言,MySQL data dictionary 通过统一的管理、高效的缓存机制和原子性操作,显著提高了元数据的管理效率和安全性,简化了跨层访问的复杂性。
③ 数据字典与表有什么联系和区别
区别: 在数据库中,数据字典描述了一组表、视图和索引的结构定义。数据字典信息通常存放在数据库的系统表中。而表描述的是用户数据的结构。
联系:数据字典描述了表的元信息,即表的结构和定义的相关信息。