programing

MySQL에서 데이터를 저장하는 방법

css3 2023. 10. 22. 20:18

MySQL에서 데이터를 저장하는 방법

구글을 둘러보았지만 좋은 답을 찾지 못했습니다.데이터를 하나의 큰 파일에 저장합니까?일반 파일을 읽고 쓰는 것보다 데이터에 더 빨리 액세스할 수 있는 방법은 무엇입니까?

이 질문은 좀 오래된 질문이지만, 제가 같은 질문을 좀 파헤쳐왔기 때문에 어쨌든 대답하기로 결정했습니다.제 대답은 리눅스 파일 시스템을 기반으로 합니다.기본적으로 mySQL은 하드디스크의 파일에 데이터를 저장합니다.시스템 변수 "dataadir"가 있는 특정 디렉토리에 파일을 저장합니다. 열기 amysql콘솔과 다음 명령을 실행하면 폴더가 정확히 어디에 있는지 알 수 있습니다.

mysql>  SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)

위의 명령에서 알 수 있듯이, 나의 "데이터디어"는/var/lib/mysql/ "데이터디어"의 위치는 시스템마다 다를 수 있습니다.디렉터리에는 폴더와 일부 구성 파일이 들어 있습니다.각 폴더는 mysql 데이터베이스를 나타내며 해당 특정 데이터베이스에 대한 데이터가 포함된 파일을 포함합니다.아래는 제 시스템에 있는 datadir 디렉토리의 스크린샷입니다.

sample "datadir" directory screenshot

디렉토리의 각 폴더는 MySQL 데이터베이스를 나타냅니다.각 데이터베이스 폴더에는 해당 데이터베이스의 테이블을 나타내는 파일이 들어 있습니다.각 테이블마다 두 개의 파일이 있는데, 하나는 A와 함께..frm확장 및 다른 하나는 a와 함께..idb내선 참조.아래 스크린샷 참조.

sample MySQL database table screenshot

.frm테이블 파일은 테이블의 형식을 저장합니다.세부사항:MySQL .frm 파일 형식

.ibd파일에는 테이블의 데이터가 저장됩니다.세부사항:InnoDB File-Per-Table 테이블스페이스

다 됐습니다 여러분!내가 누군가를 도왔으면 좋겠습니다.

데이터를 하나의 큰 파일에 저장합니까?

일부 DBMS는 전체 데이터베이스를 하나의 파일에 저장하고, 일부 분할 테이블, 인덱스 및 기타 객체 종류를 분리하여 파일을 분리하고, 일부 분할 파일은 객체 종류가 아니라 일부 저장/크기 기준에 따라 저장하고, 일부는 파일 시스템을 완전히 우회할 수도 있습니다.

MySQL이 사용하는 전략 중에서 어떤 것을 사용하는지는 모르겠습니다(아마도 MyISAM을 사용하는지 여부에 따라 다를 것입니다).InnoDB 등), 하지만 다행히 중요하지는 않습니다. 클라이언트의 관점에서 보면, 이는 고객이 거의 걱정하지 말아야 할 DBMS 구현 세부 사항입니다.

일반 파일을 읽고 쓰기만 하면 데이터 액세스 시간을 단축할 수 있는 방법은 무엇입니까?

우선, DBMs는 성능에 관한 것만이 아닙니다.

  • 이들은 데이터의 안전성에 더 중점을 두고 있습니다. 즉, 정전이나 네트워크 장애에도 데이터 손상이 없도록 해야 합니다.1
  • DBMS는 동시성에 관한 것이기도 합니다. 동일한 데이터에 접근하고 잠재적으로 수정할 수 있는 여러 클라이언트 간에 조정해야 합니다.2

성능에 대한 구체적인 질문과 관련하여, 관계형 데이터는 인덱싱 및 클러스터링에 매우 "취약"하므로 DBMS는 성능을 달성하기 위해 이를 풍부하게 활용합니다.또한 SQL의 세트 기반 특성을 통해 DBMS는 데이터를 검색하는 최적의 방법을 선택할 수 있습니다(적어도 이론적으로는 일부 DBMS가 다른 DBMS보다 더 우수함).DBMS 성능에 대한 자세한 내용은 다음을 적극 권장합니다.인덱스를 사용해, 루크!

또한 대부분의 DBMS가 오래된 제품이라는 것을 알아차렸을 것입니다.몇십 년 것처럼, 우리 산업의 관점에서 보면 정말 몇 개월 된 것입니다.그 결과 중 하나는 사람들이 DBMS 코드 기반을 최적화하는 데 많은 시간을 할애했다는 것입니다.

이론적으로는 파일을 통해 이 모든 것을 달성할 수 있지만, DBMS에 상당히 근접해 보이는 결과를 초래하게 될 것이라고 생각합니다(실제로 실행할 시간과 리소스가 있다 하더라도).그렇다면 (애초에 바퀴를 원하지 않았다면) 바퀴를 다시 개발한 이유는 무엇입니까?


1 보통 일종의 "저널링"이나 "거래 로그" 메커니즘을 사용합니다.또한 대부분의 DBMS는 애플리케이션 버그로 인한 "논리적" 손상 가능성을 최소화하고 코드 재사용을 촉진하기 위해 선언적 제약(도메인, 키 및 참조), 트리거 및 저장 프로시저를 지원합니다.

2 트랜잭션을 분리하고 클라이언트가 데이터베이스의 특정 부분을 명시적으로 잠글 수 있도록 허용합니다.

엄밀히 말하면 폴더를 포함한 모든 것이 "파일"입니다.하드 드라이브 전체가 거대한 파일입니다.MySQL에는 데이터를 하드 드라이브의 데이터 파일에 저장하는 기능이 포함되어 있습니다.데이터베이스와 파일에 쓰기/읽기의 차이점은 사과와 오렌지입니다.데이터베이스는 파일을 읽고 쓰는 것만으로 결코 복제할 수 없는 방식으로 데이터를 저장하고 검색/검색할 수 있는 구조화된 방법을 제공합니다.물론 당신이 직접 db를 작성하지 않는 한..

도움이 되기를 바랍니다.

데이터를 플랫 파일에 저장하면 순차적으로 읽기에 압축적이고 효율적이지만 랜덤으로 액세스할 수 있는 빠른 방법은 없습니다.문서, 이름 또는 문자열과 같은 가변 길이 데이터의 경우 특히 그렇습니다.빠른 랜덤 액세스를 허용하기 위해 대부분의 데이터베이스는 B-Tree라는 데이터 구조를 사용하여 단일 파일에 정보를 저장합니다.이 구조는 삽입, 삭제, 검색을 빠르게 할 수 있지만 원래 파일보다 최대 50% 더 많은 공간을 사용할 수 있습니다.그러나 일반적으로 디스크 공간이 저렴하고 크기 때문에 문제가 되지는 않지만 주요 작업은 일반적으로 빠른 액세스가 필요합니다.자세한 내용: http://en.wikipedia.org/wiki/B-tree

MySQL 문서를 자세히 살펴보면 인덱스가 "BTREE" 또는 "HASH" 유형으로 선택적으로 설정될 수 있음을 알 수 있습니다.하나의 MySQL 파일 내에는 여러 인덱스가 저장되어 있으며, 이 인덱스는 두 가지 데이터 구조 중 하나를 사용할 수 있습니다.

안전성과 동시성이 중요하지만, 이는 데이터베이스가 존재하는 이유가 아니라 추가된 기능입니다.가변 길이 데이터가 포함된 순차 파일에 랜덤하게 접근할 수 없기 때문에 맨 처음의 데이터베이스가 존재합니다.

언급URL : https://stackoverflow.com/questions/10378693/how-does-mysql-store-data