집 >데이터 베이스 >MySQL 튜토리얼 >고급 MYSQL을 소개하는 두 번째 기사
추천 무료 학습: mysql 비디오 튜토리얼
5 MySQL 아키텍처
아래에서는 간략한 설명을 위해 가장 일반적으로 사용되는 스토리지 엔진 중 일부를 선택합니다. 데이터베이스의 성능에 직접적인 영향을 미치게 됩니다. 또한 스토리지 엔진을 사용하기 전에 스토리지 엔진의 몇 가지 특성을 잘 이해하시기 바랍니다.
5.1 MyISAM
MyISAM은 MySQL5.5 이전의 기본 스토리지 엔진이었습니다. 이러한 이유로 아직도 MyISAM 스토리지 엔진을 사용하는 서버가 많이 있습니다. 동시에 MyISAM은 현재 많은 시스템 테이블과 임시 테이블에서 사용되는 스토리지 엔진입니다. 여기서 언급하는 임시 테이블은 우리가 create table
을 통해 생성하는 테이블을 의미합니다. 정렬, 그룹화 및 기타 작업 중에 숫자가 특정 크기를 초과하면 쿼리 최적화 프로그램에 의해 임시 테이블이 생성됩니다. create table
创建出来的表,是指在排序、分组等操作中,当数量超过一定的大小之后,有查询优化器建立的临时表。
MyISAM存储引擎是由MYD和MYI组成,MYD是数据文件的扩展名,MYI是索引文件的扩展名,这个存储引擎是将表存储在以这两个为扩展名的数据文件和索引文件中。
特性:
check table tablename
对表进行检查,通过repair table tablename
对表进行恢复。myisampack
命令来对表进行压缩。压缩是对表独立进行压缩的,因此读取一行数据的时候,不必对整个表进行解压。限制:
适用场景:
5.2 Innodb
Innodb是MySQL5.5及之后版本默认的存储引擎,Innodb是事务存储的存储引擎,也就是说支持事务的处理。
Innodb有自己的表空间的概念,然后数据是存储在表空间之中的,是由innodb_file_per_table
这个参数来决定的,如果这个参数为ON
,则会对每个Innodb表建立一个扩展名为ibd
的系统文件,如果这个参数为OFF
时,则会把数据存储到系统的共享表空间,也就是ibdataX
,X
代表的时一个数字,默认从1开始。
查看这个参数的命令为:show variables like 'innodb_file_per_table';
修改这个参数的命令为:set global innodb_file_per_table=off;
5.2.1 系统表空间和独立表空间要如何选择
比较:
系统表空间 | 独立表空间 |
---|---|
无法简单的收缩文件大小 | 可以通过optimize table MyISAM 스토리지 엔진은 MYD와 MYI로 구성됩니다. MYD는 데이터 파일의 확장자이고 MYI는 이 두 가지 확장자를 가진 데이터 파일과 인덱스 파일에 테이블을 저장합니다. |
MyISAM은 행 수준 잠금이 아닌 테이블 수준 잠금을 사용합니다. 즉, 테이블의 데이터를 수정할 때 테이블 전체를 수정해야 합니다. 테이블을 읽을 때 모든 테이블에 공유 잠금도 추가하세요. 여기에서 MyISAM을 엔진으로 사용하는 테이블 읽기 및 쓰기 작업이 상호 배타적이라는 것을 알 수 있습니다. MyISAM은 동시 읽기 및 쓰기 작업에 그다지 좋지 않다는 것을 알 수 있습니다. 읽기 전용 작업에만 해당하는 경우 공유 잠금이 공유 잠금을 차단하지 않으므로 동시성 측면에서 성능이 나쁘지 않습니다. | MyISAM은 예상치 못한 종료로 인해 손상된 MyISAM 테이블을 확인하고 복구하는 것을 지원하지만 여기서 언급한 복구는 데이터 복구가 아닙니다. MyISAM은 트랜잭션 스토리지 엔진이 아니기 때문에 수행할 수 없습니다. 트랜잭션 복구에 필요한 관련 로그가 있으므로 MyISAM 테이블 복구로 인해 데이터 손실이 발생할 수 있다는 점에 유의하세요. check table tablename 을 통해 테이블을 확인하고, repair table tablename 을 통해 테이블을 복원할 수 있습니다. | MyISAM은 전체 텍스트 인덱싱을 지원하며 mysql5.7 이전에 전체 텍스트 인덱싱을 기본적으로 지원하는 유일한 공식 스토리지 엔진이었습니다.
innodb_file_per_table
매개변수에 의해 결정되는 테이블스페이스에 저장됩니다. 이 매개변수가 ON
이면 시스템입니다. 각 Innodb 테이블에 대해 확장자가 ibd
인 파일이 생성됩니다. 이 매개변수가 OFF
인 경우 데이터는 시스템의 공유 테이블 공간, 즉 에 저장됩니다. >ibdataX
, X
는 기본적으로 1부터 시작하는 숫자를 나타냅니다. 🎜 이 매개변수를 보는 명령은 다음과 같습니다. 🎜show Variables like 'innodb_file_per_table';
🎜 이 매개변수를 수정하는 명령은 다음과 같습니다. 🎜set global innodb_file_per_table=off;
🎜🎜🎜 5.2.1 시스템 테이블스페이스와 독립 테이블스페이스 중에서 선택하는 방법 🎜🎜🎜🎜비교: 🎜🎜시스템 테이블스페이스 | 독립 테이블스페이스🎜 |
---|
쓰기 잠금 | 읽기 잠금 | |
---|---|---|
쓰기 잠금 | 호환되지 않음 | 호환되지 않음 |
읽기 잠금 | 호환되지 않음 | 호환됨 |
실제 상황에서는 결과가 위 표의 결과와 다를 수 있습니다. 주로 Innodb의 잠금 메커니즘이 매우 복잡하고 최종 결과에 영향을 미치는 잠금이 많기 때문입니다.
차단: 차단은 서로 다른 잠금 간의 호환성 관계로 인해 발생합니다. 한 트랜잭션에서는 다른 트랜잭션의 잠금이 해제될 때까지 기다려야 하며, 해당 트랜잭션이 차지하는 리소스는 차단을 형성합니다.
교착상태(Deadlock): 교착상태란 트랜잭션 실행 중에 상대방이 기다리고 있는 자원을 두 개 이상의 트랜잭션이 점유할 때 발생하는 예외를 말한다. 정의에서 알 수 있듯이, 차단된 트랜잭션이 여러 개일 때 차단된 트랜잭션이 기다리고 있는 자원을 점유하는 경우를 말하며, 차단된 트랜잭션이 여러 개일 때 서로가 기다리고 있는 리소스를 점유하는 경우를 교착상태(deadlock)라고 합니다.
5.3 CSV 저장 엔진
CSV 저장 엔진은 csv 파일을 mysql 테이블 파일로 처리할 수 있습니다. 이 저장 엔진의 저장 형식은 csv 저장 엔진의 데이터 저장 방법이 매우 독특합니다. MyISAM 또는 Innodb에 테이블을 저장하면 이 두 파일은 바이너리 형식으로 저장되지만 CSV 저장 엔진은 텍스트가 파일에 저장되기 때문에 데이터 파일을 직접 볼 수 없습니다. 즉, more와 같은 파일을 보는 명령을 통해 볼 수 있고, CSV 파일의 형식과 요구 사항을 충족하는 한 vi 명령을 사용하여 CSV 저장소 엔진의 테이블을 보고 편집할 수 있습니다. 데이터 손상을 걱정할 필요가 없습니다.
mysql에서 CSV 스토리지 엔진 테이블을 생성하면 3가지 파일 시스템의 파일을 볼 수 있어야 합니다. 이 세 가지 파일 이름은 모두 테이블 이름을 기반으로 하지만 각각 접미사로 csv, csm 및 frm이 있습니다. csv 파일은 CSV 저장소 엔진의 데이터 파일입니다. csm 파일은 테이블의 메타데이터와 테이블 상태, 데이터 볼륨을 저장합니다. FRM 파일은 테이블 구조 정보를 저장합니다.
5.3.1 CSV 저장 엔진의 특징
,
로 구분되며, 텍스트의 내용이 동봉되어 있습니다. 아래와 같이 큰따옴표로 묶습니다. ,
来分隔的,并且文本的内容是以双引号来引起来的,如下图所示:5.3.2 CSV存储引擎的适用场景
CSV存储引擎适合作为数据交换的中间表
5.4 Archive存储引擎
5.4.1 文件系统存储特点
Archive存储引擎会缓存所有的写,并且利用zlib对插入的行进行压缩,因此Archive存储引擎相对于MyISAM存储引擎的表更加节省磁盘I/O,对于同样数量级的数据,Archive存储引擎相对于MyISAM和Innodb更加节省存储空间。一个几T的Innodb的表存储在Archive存储引擎当中,可能只需要几百兆的存储空间。
Archive存储引擎的表的数据是以ARZ为后缀的一个文件,和其他引擎一样,也存在一个以frm为后缀的系统文件,用于存储表的结构信息。
5.4.2 Archive存储引擎的特点
insert
和select
인덱스를 지원하지 않습니다. 대규모 테이블에는 적합하지 않습니다.
데이터 파일을 직접 편집할 수 있습니다 텍스트 파일 내용 저장
5.3.2 CSV 스토리지 엔진의 적용 시나리오
CSV 스토리지 엔진은 데이터 교환을 위한 중간 테이블로 적합합니다
🎜🎜5.4 아카이브 스토리지 엔진🎜🎜🎜🎜5.4.1 파일 시스템 스토리지 기능🎜🎜🎜 아카이브 스토리지 엔진 모두 쓰기 그리고 zlib를 사용하여 삽입된 행을 압축합니다. 따라서 Archive 스토리지 엔진은 MyISAM 스토리지 엔진의 테이블과 비교하여 디스크 I/O를 절약합니다. MyISAM 테이블은 저장 공간을 더 절약합니다. Archive 스토리지 엔진에 저장된 수 테라바이트 Innodb 테이블에는 수백 메가바이트의 저장 공간만 필요할 수 있습니다. 🎜 Archive 스토리지 엔진의 테이블 데이터는 접미사 ARZ를 갖는 파일입니다. 다른 엔진과 마찬가지로 테이블의 구조 정보를 저장하는 데 사용되는 접미사 frm을 갖는 시스템 파일도 있습니다. 🎜🎜🎜5.4.2 아카이브 스토리지 엔진의 기능🎜🎜🎜🎜삽입
및 선택
작업만 지원🎜🎜자동 증가 ID 열에 대한 인덱싱만 허용🎜🎜🎜 🎜 5.4.3 아카이브 스토리지 엔진 사용 시나리오🎜🎜🎜시나리오 1: 로그 및 데이터 수집 데이터🎜 아카이브는 수정 및 삭제를 지원하지 않기 때문에 우리 ORDB는 확실히 데이터를 수정하지만 일부 웨어하우스 유형 애플리케이션의 경우 또는 일부 특수 테이블은 여전히 데이터를 수정합니다. 로깅 테이블이나 데이터 수집 테이블과 같이 유용하며 많은 양의 데이터를 수집해야 하기 때문에 Archive 스토리지 엔진이 더 적합합니다. Archive 스토리지 엔진은 모든 엔진 중에서 저장 공간이 가장 작기 때문에 데이터 수집이나 로깅 응용 프로그램에서도 Archive 스토리지 엔진은 이러한 데이터를 업데이트할 수 없으므로 로그를 기록할 때 또는 데이터 컬렉션에서 데이터를 수정하는 경우 주의해야 합니다. 응용 프로그램을 사용하는 경우 Archive 스토리지 엔진을 사용하지 못할 수 있습니다. 🎜🎜🎜5.5 메모리 저장 엔진🎜🎜🎜🎜5.5.1 파일 시스템 저장 기능🎜🎜메모리 스토리지 엔진은 HEAP 스토리지 엔진이라고도 부르므로 데이터가 메모리에 저장됩니다. 이는 데이터 테이블이 일회용임을 의미합니다. MySQL 서비스가 다시 시작되면 모든 메모리 스토리지 엔진 데이터가 사라지지만 테이블 구조는 다음과 같습니다. 왜냐하면 메모리 스토리지 엔진에서 테이블을 생성할 때 테이블 구조를 저장하는 데 사용되는 frm 시스템 파일이 하나만 생성되기 때문입니다. 이것이 MySQL 서버를 다시 시작할 때 데이터가 손실되지만 테이블 구조는 손실되지 않는 이유입니다.
파일 저장 특성을 통해 MyISAM의 인덱스만 메모리에 저장되고 데이터는 연산에 의해 캐시되기 때문에 메모리 저장 엔진의 I/O 효율성이 MyISAM보다 훨씬 높음을 알 수 있습니다. 시스템에 비해 메모리 스토리지 엔진은 데이터와 인덱스가 메모리에 저장되는 반면, 메모리 스토리지 엔진의 특징을 살펴보겠습니다.
5.5.2 메모리
기능:
5.5.3 메모리에서 쉽게 혼동되는 개념
메모리 스토리지 엔진 테이블:
모든 시스템에서 사용할 수 있으며 임시 테이블이 아닙니다.
임시 테이블:
임시 테이블에는 두 가지 유형이 있습니다. 하나는 쿼리 최적화 프로그램이 쿼리를 최적화할 때 시스템에서 사용하는 임시 테이블이며, 이는 내부 임시 테이블입니다. BLOB 또는 TEXT 대형 필드)), MyISAM 임시 테이블을 사용하고 메모리 테이블을 제한을 초과하지 않고 사용하십시오.
다른 하나는 create temporary table
명령을 통해 생성된 임시 테이블입니다. 생성된 테이블은 모든 스토리지 엔진을 사용할 수 있습니다. create temporary table
建立的临时表,建立的表可以使用任何存储引擎。
无论是哪种临时表,只对内部可见。
5.5.4 Memory的使用场景
Memory数据易丢失,所以要求数据可再生。
5.6 Federated存储引擎
5.6.1 Federated的特点
5.6.2 Federated如何使用
Federated存储引擎可以实现SQL Server连接服务器的功能,但是由于本身的性能并不太好,通常可以通过复制等实现相同的目的,所以在当前的MySQL版本中,Federated存储引擎默认是禁止的。如果需要使用Federated存储引擎,则需要在/usr/local/mysql/my.cnf
中加入federated=1
,接着重启MySQL服务器,我们可以通过show engine
来确认当前MySQL服务器是否支持Federated存储引擎。
而在create table
语句中使用下面的连接字符串,mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
远程服务器绑定连接:grant select,update,insert,delete on remote.remote_fet to fred_link@'127.0.0.1' identified by '123456'
어떤 종류의 임시 테이블이라도 내부에서만 보입니다.
5.5.4 메모리 사용 시나리오
메모리 데이터는 쉽게 잃어버리기 때문에 재현이 가능해야 합니다. 🎜🎜5.6 Federated 스토리지 엔진 🎜🎜🎜🎜5.6.1 Federated의 특징 🎜🎜🎜🎜 원격 MySQL 서버의 테이블에 액세스하는 방법을 제공합니다. 🎜 Federated 스토리지 엔진은 원격 서버에 로컬로만 연결을 설정하므로 우리가 액세스하려는 모든 테이블은 여전히 원격 서버에 있으며 로컬에 데이터가 저장되어 있지 않다고 할 수 있습니다. 페더레이티드 스토리지 엔진 테이블에 접근할 때마다 쿼리가 원격 서버로 전송되어 실행되고, 원격 MySQL 서버에서 관련 데이터를 가져옵니다. 🎜🎜데이터는 로컬에 저장되지 않으며 모든 데이터는 원격 서버에 저장됩니다.🎜🎜원격 서버의 테이블 구조와 연결 정보는 로컬에 저장되어야 합니다.🎜 따라서 시스템에 원격 저장을 위한 frm 파일도 있습니다. 정보 및 원격 테이블 관련 정보에 연결하는 방법. 🎜🎜🎜🎜5.6.2 Federated 사용 방법 🎜🎜🎜 Federated 스토리지 엔진은 서버에 연결되는 SQL Server의 기능을 구현할 수 있습니다. 그러나 자체 성능이 좋지 않기 때문에 일반적으로 동일한 목적을 다음을 통해 달성할 수 있습니다. 복제 등이 포함되어 있으므로 현재 MySQL에서는 이 버전에서는 통합 스토리지 엔진이 기본적으로 비활성화되어 있습니다. Federated 스토리지 엔진을 사용해야 하는 경우
/usr/local/mysql/my.cnf
에 federated=1
를 추가한 다음 MySQL 서버를 다시 시작해야 합니다. 현재 MySQL 서버가 페더레이션된 스토리지 엔진을 지원하는지 확인하기 위해 show 엔진
을 전달할 수 있습니다. 🎜 그리고 create table
문에 다음 연결 문자열을 사용합니다. 🎜mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
🎜 Remote Server 바인딩 연결: 🎜'123456'으로 식별되는 fred_link@'127.0.0.1'에 대해 remote.remote_fet에서 선택, 업데이트, 삽입, 삭제 권한을 부여합니다.
🎜 쿼리할 원격 서버의 관련 정보를 확인할 수 있습니다. 관련 데이터베이스 테이블에 대한 일부 정보. 🎜🎜🎜5.6.3 Federated의 적용 가능한 시나리오🎜🎜🎜🎜수시적 통계 분석 및 수동 쿼리🎜 Federated의 느린 성능으로 인해 수시적 통계 분석 및 수동 쿼리에만 적합합니다. 🎜🎜🎜🎜6 올바른 스토리지 엔진을 선택하는 방법🎜🎜🎜참조 조건: 🎜위 내용은 고급 MYSQL을 소개하는 두 번째 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!