이 페이지에서는 MySQL 스키마를 Spanner 스키마로 마이그레이션하는 방법을 보여줍니다. 기존 MySQL 스키마에서 Spanner 스키마를 빌드하려면 Spanner 마이그레이션 도구를 사용하는 것이 좋습니다. 이 도구는 대부분의 MySQL 데이터 유형을 Spanner 유형에 매핑하고, 선택사항을 강조 표시하며, 잠재적인 마이그레이션 문제를 방지하기 위한 제안을 제공합니다.
데이터 유형 비교
다음 MySQL 데이터 유형 목록을 상응하는 Spanner 데이터 유형에 매핑합니다.
MySQL 데이터 유형 | 대응하는 Spanner 데이터 유형 | 참고 |
---|---|---|
INTEGER ,
INT ,
BIGINT ,
MEDIUMINT ,
SMALLINT ,
TINYINT
|
INT64 |
|
TINYINT ,
BOOL ,
BOOLEAN ,
|
BOOLEAN |
TINYINT(1) 값은 'true' (0이 아닌 값) 또는 'false' (0)의 불리언 값을 나타내는 데 사용됩니다. |
BIT
|
BOOLEAN , INT64 |
|
CHAR ,
VARCHAR ,
TINYTEXT ,
TEXT ,
MEDIUMTEXT ,
LONGTEXT
|
STRING |
Spanner는 전체적으로 유니코드 UTF8 문자열을 사용하며 구성 가능한 콜레이션이 없습니다.VARCHAR 는 최대 길이 65,535바이트를 지원하지만 Spanner는 최대 2,621,440자(영문 기준)를 지원합니다.
|
FLOAT |
FLOAT32 |
|
DOUBLE |
FLOAT64 |
|
DECIMAL , NUMERIC |
NUMERIC
|
MySQL에서 NUMERIC 및 DECIMAL 데이터 유형은 열 선언에 정의된 대로 최대 65자리의 정밀도와 척도를 지원합니다. Spanner NUMERIC 데이터 유형은 최대 38자리의 정밀도와 소수점 9자리의 척도를 지원합니다.더 높은 정밀도가 필요한 경우 다른 메커니즘에 대해 임의 정밀도 숫자 데이터 저장을 참고하세요. |
BINARY ,
VARBINARY ,
TINYBLOB ,
BLOB ,
MEDIUMBLOB ,
LONGBLOB
|
BYTES |
작은 객체 (10MiB 미만)를 BYTES 로 저장할 수 있습니다. 더 큰 객체를 저장하려면 Cloud Storage와 같은 다른 Google Cloud 서비스를 사용하는 것이 좋습니다.
|
DATE |
DATE |
Spanner와 MySQL 모두 날짜에 'yyyy-mm-dd ' 형식을 사용하므로 변환할 필요가 없습니다. 날짜를 형식이 지정된 문자열로 변환할 수 있는 SQL 함수가 제공됩니다.
|
DATETIME , TIMESTAMP |
TIMESTAMP |
Spanner는 시간대와 관계없이 시간을 저장합니다. 시간대를 저장해야 하는 경우에는 별도의 STRING 열을 사용해야 합니다.
타임스탬프를 표준 시간대를 사용한 형식이 지정된 문자열로 전환할 수 있는 SQL 함수가 제공됩니다. |
TEXT , TINYTEXT , ENUM |
STRING |
작은 TEXT 값 (10MiB 미만)을 STRING 으로 저장할 수 있습니다. 더 큰 TEXT 값을 지원하려면 Cloud Storage와 같은 다른 Google Cloud 서비스를 사용하는 것이 좋습니다.
|
ENUM |
STRING |
ENUM 값의 유효성 검사는 애플리케이션에서 수행해야 합니다. |
SET |
ARRAY<STRING> |
SET 요소 값의 유효성 검사는 애플리케이션에서 수행해야 합니다. |
LONGBLOB , MEDIUMBLOB |
BYTES 또는 STRING (객체 URI 포함)
|
작은 객체(10 MiB 미만)를 BYTES 로 저장할 수 있습니다.
더 큰 객체를 저장하려면 Cloud Storage와 같은 다른 Google Cloud 서비스를 사용하는 것이 좋습니다.
|
LONGTEXT , MEDIUMTEXT |
STRING (데이터 또는 외부 객체의 URI 포함)
|
작은 객체(2,621,440자 미만(영문 기준))를 STRING 으로 저장할 수 있습니다. 더 큰 객체를 저장하려면 Cloud Storage와 같은 다른 Google Cloud 서비스를 사용하는 것이 좋습니다.
|
JSON |
JSON
|
작은 JSON 문자열(2,621,440자 미만(영문 기준))을 JSON 으로 저장할 수 있습니다. 더 큰 객체를 저장하려면 Cloud Storage와 같은 다른 Google Cloud 서비스를 사용하는 것이 좋습니다.
|
GEOMETRY ,
POINT ,
LINESTRING ,
POLYGON ,
MULTIPOINT ,
MULTIPOLYGON ,
GEOMETRYCOLLECTION
|
STRING ,
ARRAY
|
Spanner는 지리정보 데이터 유형을 지원하지 않습니다. 이 데이터를 표준 데이터 유형으로 저장하고 애플리케이션에서 검색 또는 필터링 로직을 구현해야 합니다. |
대부분의 경우 여러 MySQL 유형이 단일 Spanner 유형으로 매핑됩니다. MySQL에는 길이가 다른 제한이 있는 동일한 개념의 유형 집합이 있고 Spanner에는 비교적 큰 단일 제한이 있는 하나의 전체 유형이 있기 때문입니다.
다음 예를 고려하세요.
MySQL에는
TEXT
,TINYTEXT
,MEDIUMTEXT
,LONGTEXT
이 있습니다. Cloud Spanner에는 문자 길이 매개변수가 있으며 최대 2,621,440자(영문 기준)까지 설정할 수 있는 단일 유형STRING
이 있습니다.MySQL에는
INTEGER
,INT
,BIGINT
,MEDIUMINT
,SMALLINT
,TINYINT
이 있습니다. Spanner에는 8바이트 부호 있는 정수 값을 저장하는 단일 유형INT64
이 있습니다. 가장 큰 차이점은 Spanner의INT64
이MEDIUMINT
,SMALLINT
,TINYINT
보다 더 많은 스토리지를 사용한다는 것입니다. 또한INT64
는MEDIUMINT
,SMALLINT
,TINYINT
의 범위 제한을 캡처하지 않지만CHECK
제약 조건을 추가하여 적용할 수 있습니다.
Spanner는 지리정보 유형을 지원하지 않습니다. 이러한 유형의 값은 문자열, 바이트 또는 배열로 인코딩하여 저장할 수 있습니다. 필터링, 작업, 함수는 애플리케이션 수준에서 실행해야 합니다.
쿼리
Spanner는 ANSI 2011 SQL 언어(확장 포함)를 사용하며 데이터를 변환하고 집계하는 데 유용한 다양한 함수 및 연산자를 포함합니다. MySQL 관련 언어, 함수, 유형을 사용하는 모든 SQL 쿼리를 Spanner와 호환되도록 전환해야 합니다.
Spanner는 구조화된 데이터를 열 정의로 지원하지 않습니다. 하지만 ARRAY<>
및 STRUCT<>
유형을 사용하여 SQL 쿼리에서 구조화된 데이터를 사용할 수 있습니다. 예를 들어, 사전 결합된 데이터를 활용하여 STRUCT
의 ARRAY
를 사용하는 아티스트의 모든 앨범을 반환하는 쿼리를 작성할 수 있습니다. 자세한 내용은 문서의 하위 쿼리 섹션을 참조하세요.
Google Cloud 콘솔의 Spanner 스튜디오 페이지에서 SQL 쿼리를 실행할 수 있습니다. 일반적으로 큰 테이블에 전체 테이블 검색을 수행하는 쿼리 비용이 비싸므로, 아껴서 사용해야 합니다. SQL 쿼리 최적화에 대한 자세한 내용은 SQL 권장사항 문서를 참고하세요.
저장 프로시저 및 트리거
Spanner는 데이터베이스 수준에서 사용자 코드 실행을 지원하지 않습니다. 스키마 마이그레이션의 일환으로 MySQL 데이터베이스 수준에서 구현한 저장 프로시저와 비즈니스 로직 트리거를 애플리케이션으로 이동합니다.
시퀀스
Spanner에서는 UUID 버전 4를 기본 방법으로 사용하여 기본 키 값을 생성하는 것이 좋습니다. GENERATE_UUID()
함수는 STRING
유형으로 표시되는 UUID 버전 4 값을 반환합니다.
정수 값을 생성해야 하는 경우 Spanner는 비트 반전 포지티브 시퀀스를 지원하며, 이러한 시퀀스는 양의 64비트 숫자 공간에 균등하게 분산되는 값을 생성합니다. 부하 집중 문제를 방지하기 위해 이러한 수치를 사용할 수 있습니다.
자세한 내용은 기본 키 기본값 전략을 참조하세요.