programing

mysql에서 100억 행의 키/값 테이블을 어떻게 정의합니까?

megabox 2023. 7. 28. 21:55
반응형

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

반응형