
Java编程语言是一种简单、面向对象、分布式、解释型、健壮安全、与系统无关、可移植、高性能、多线程和动态的语言。如今Java已经广泛应用于各个领域的编程开发。
InnoDB存储架构
从这张图可以看到,InnoDB存储结构主要包括两部分:逻辑存储结构和物理存储结构。
逻辑上是由表空间tablespace—>段segment或者inode—>区Extent——>数据页Page构成,Innodb逻辑管理单位是segment,空间分配的最小单位是extent,每个segment都会从表空间FREE_PAGE中分配32个page,当这32个page不够用时,会按照以下原则进行扩展:如果当前小于1个extent,则扩展到1个extent;当表空间小于32MB时,每次扩展一个extent;表空间大于32MB,每次扩展4个extent。
物理上主要由系统用户数据文件,日志文件组成,数据文件主要存储MySQL字典数据和用户数据,日志文件记录的是datapage的变更记录,用于MySQLCrash时的恢复。
Innodb表空间
InnoDB存储包括三类表空间:系统表空间,用户表空间,Undo表空间。
**系统表空间:**主要存储MySQL内部的数据字典数据,如information_schema下的数据。
**用户表空间:**当开启innodb_file_per_table=1时,数据表从系统表空间独立出来存储在以table_name.ibd命令的数据文件中,结构信息存储在table_name.frm文件中。
**Undo表空间:**存储Undo信息,如快照一致读和flashback都是利用undo信息。
从MySQL8.0开始允许用户自定义表空间,具体语法如下:
CREATETABLESPACEtablespace_name
ADDDATAFILE'file_name'#数据文件名
USELOGFILEGROUPlogfile_group#自定义日志文件组,一般每组2个logfile。
[EXTENT_SIZE[=]extent_size]#区大小
[INITIAL_SIZE[=]initial_size]#初始化大小
[AUTOEXTEND_SIZE[=]autoextend_size]#自动扩宽尺寸
[MAX_SIZE[=]max_size]#单个文件最大size,最大是32G。
[NODEGROUP[=]nodegroup_id]#节点组
[WAIT]
[COMMENT[=]comment_text]
ENGINE[=]engine_name
这样的好处是可以做到数据的冷热分离,分别用HDD和SSD来存储,既能实现数据的高效访问,又能节约成本,比如可以添加两块500G硬盘,经过创建卷组vg,划分逻辑卷lv,创建数据目录并mount相应的lv,假设划分的两个目录分别是/hot_data和/cold_data。
这样就可以将核心的业务表如用户表,订单表存储在高性能SSD盘上,一些日志,流水表存储在普通的HDD上,主要的操作步骤如下:
#创建热数据表空间
createtablespacetbs_data_hotadddatafile'/hot_data/tbs_data_hot01.dbf'max_size20G;
#创建核心业务表存储在热数据表空间
createtablebooking(idbigintnotnullprimarykeyauto_increment,……)tablespacetbs_data_hot;
#创建冷数据表空间
createtablespacetbs_data_coldadddatafile'/hot_data/tbs_data_cold01.dbf'max_size20G;
#创建日志,流水,备份类的表存储在冷数据表空间
createtablepayment_log(idbigintnotnullprimarykeyauto_increment,……)tablespacetbs_data_cold;
#可以移动表到另一个表空间
altertablepayment_logtablespacetbs_data_hot;
以上内容由开课吧老师敖丙提供,更多Java教程尽在开课吧广场Java教程频道。
