mysql에서 100억 행의 키/값 테이블을 어떻게 정의합니까?
k | v
k
는 고유 문자열(varchar 32)입니다.v
또한 문자열(varchar 50)입니다.
다음 쿼리만 수행합니다.
insert into
select v from TABLE where k = "${k}"
내 생성 테이블 sql을 어떻게 작성해야 합니까?
mysql의 파티션처럼?제가 그것을 사용해야 합니까?
예를 들어, isam을 사용해야 합니까, innobb를 사용해야 합니까?
저는 많은 읽기와 작은 삽입을 가지고 있는데, 행 레벨 잠금 InnoDB가 맞을까요?
이거 시험문제야?NULL 값을 허용하지 않고 중복 값을 허용하지 않는다고 가정하면 인덱스로 구성된 테이블을 선택할 수 있습니다.
CREATE TABLE mytable
( k VARCHAR(32) NOT NULL COMMENT 'pk (cluster key), ...'
, v VARCHAR(50) NOT NULL COMMENT 'pk (cluster key), ...'
, PRIMARY KEY (k,v)
) ENGINE=InnoDB
가장 중요한 것은 WHERE 절의 동일한 술어 때문에 'k'가 선행 열인 클러스터 키입니다.
'k'가 고유한 것으로 보장되면 단독으로 주 키 역할을 할 수 있습니다.
CREATE TABLE mytable
( k VARCHAR(32) NOT NULL COMMENT 'pk (cluster key), ...'
, v VARCHAR(50) NOT NULL COMMENT '...'
, PRIMARY KEY (k)
) ENGINE=InnoDB
이렇게 하면 INSERT가 중복 값이 'k'인 행을 만들 수 없습니다.
최악의 경우, 무효성과 고유성에 대한 가정이 유효하지 않으면 클러스터 키를 제공하는 데 어려움을 겪게 됩니다.InnoDB가 내부 식별자를 클러스터 키로 사용할 수 있도록 하고, 내부 식별자의 오버헤드로 인해 약 2배의 공간과 별도의 인덱스가 필요한 쿼리에 대한 커버링 인덱스를 만들 수 있습니다.
CREATE TABLE mytable
( k VARCHAR(32) COMMENT ''
, v VARCHAR(50) COMMENT ''
, KEY mytable_IX1 (k,v)
) ENGINE=InnoDB
그렇게 효율적이지는 않지만 중복 및 NULL을 허용합니다.다시 말씀드리지만, 우리는 다음과 같은 열이 있는 색인을 원합니다.k
(WHERE 절의 동등한 술어 때문에), 또한 다음을 포함합니다.v
기본 데이터 테이블의 페이지를 조회할 필요 없이 인덱스 페이지에서 SELECT 쿼리를 충족할 수 있습니다.
MySQL은 InnoDB 이외의 스토리지 엔진을 지원합니다.클러스터링, 복제 등과 관련된 다른 사양은 생략한 것이 최선의 추측입니다.
라고 가정하면innodb_file_per_table
활성화되었습니다. 파티션 분할을 고려해 보겠습니다.이렇게 하면 쿼리 성능 측면에서 바늘이 움직이지는 않지만, 예를 들어 재구성을 원하거나 필요한 경우 테이블의 관리성을 향상시킬 수 있습니다.
PARTITION BY RANGE (k)
( PARTITION ke VALUES LESS THAN ('e')
, PARTITION ki VALUES LESS THAN ('i')
, PARTITION ko VALUES LESS THAN ('o')
, PARTITION ku VALUES LESS THAN ('u')
, PARTITION kz VALUES LESS THAN ('z')
, PARTITION px VALUES LESS MAXVALUE
)
그런 다음 파티션을 한 번에 재구성할 수 있습니다.
ALTER TABLE mytable REBUILD PARTITION ko;
언급URL : https://stackoverflow.com/questions/42404691/how-to-define-a-key-value-table-with-10-billion-rows-in-mysql
'programing' 카테고리의 다른 글
CSS3 미디어 쿼리가 모바일 장치에서 작동하지 않는 이유는 무엇입니까? (0) | 2023.07.28 |
---|---|
MariaDB 완전 텍스트 색인을 사용하지 않는 매우 간단한 MATCH-AGHINE 쿼리? (0) | 2023.07.28 |
Angular 8 응용 프로그램에서 Internet Explorer를 지원하려면 어떻게 해야 합니까? (0) | 2023.07.28 |
오름차순 및 내림차순 정렬에 의한 MYSQL 순서 (0) | 2023.07.28 |
PHP에서 2일보다 오래된 모든 파일을 삭제하는 올바른 방법 (0) | 2023.07.28 |