Spanner는 안정성이 뛰어난 완전 관리형 데이터베이스 시스템입니다. Spanner는 관계형 데이터베이스 관리 시스템으로 발전했지만, 처음에는 비관계형, 키-값 스토리지 시스템에서 시작되었으며 여전히 그러한 시스템의 기본적인 특성을 보유하고 있습니다. 따라서 Spanner를 비관계형(NoSQL) 데이터베이스로 사용할 수 있으며 다른 비관계형 데이터베이스에서 Spanner로 마이그레이션을 수행할 수 있습니다. 이 문서는 Spanner가 사용자의 비관계형 워크로드에 적합한지 여부를 이해할 수 있게 도와줍니다.
NoSQL 데이터베이스는 기존의 관계형 데이터베이스에서 높은 확장성, 가용성, 탄력적인 컴퓨팅 성능이 필요한 새로운 애플리케이션을 지원하는 능력이 부족하던 시기에 사용되었습니다. NoSQL 데이터베이스는 트랜잭션, 일관성, 임시 쿼리 등 데이터 관리에 핵심적인 일부 기능을 희생함으로써 이러한 요구를 해결했습니다. Spanner는 가용성이 높은 애플리케이션의 요구를 충족시키는 동시에 기존 관계형 데이터베이스의 기능을 제공하도록 설계되어 고객이 두 가지 이점을 모두 활용할 수 있습니다.
Spanner를 사용하면 직관적인 비관계형 스토리지 요구부터 시작하여 필요에 따라 애플리케이션을 확장할 수 있습니다.
Spanner가 NoSQL 데이터베이스 기준을 충족하는 방법
Spanner는 NoSQL 워크로드에 대해 다음과 같은 주요 기준을 충족합니다.
확장성 및 성능
NoSQL 데이터베이스는 읽기 및 쓰기를 수평적으로 확장할 수 있는 기능 덕분에 인기를 얻었습니다. Spanner에서는 확장성이나 성능을 걱정하지 않아도 됩니다. 키-값 스타일의 Spanner 데이터베이스는 수평으로 확장되어 초당 수억 건의 읽기 또는 쓰기 요청과 페타바이트급 데이터를 지원할 수 있습니다. Spanner의 컴퓨팅 용량은 워크로드에 따라 확장되므로 애플리케이션이 크게 확장되더라도 일관적이고 짧은 지연 시간 프로필을 유지합니다.
NoSQL API
기존 관계형 데이터베이스는 일반적으로 SQL을 사용하여 액세스됩니다. 따라서 관계형 데이터베이스에 익숙하지 않은 개발자에게는 학습 기간이 요구됩니다. 또한 이러한 데이터베이스의 클라이언트에는 일반적으로 영구적인 연결이 사용되며 확장을 위해 연결 풀링 인프라를 배포해야 합니다. 반면에 Spanner API는 연결 오류를 자동으로 처리하는 gRPC/HTTP2 요청 및 응답 모델을 기반으로 개발되었습니다. Spanner는 직관적이고, 고유 언어로 지원되고, 효율적인 NoSQL 읽기-쓰기 API를 제공하며, SQL 지식이 필요하지 않습니다. 또한 Spanner 클라이언트는 확장을 위한 연결 풀링이 필요하지 않습니다.
완전 관리형
NoSQL 데이터베이스의 주요 매력 중 하나는 관리가 수월하다는 인식입니다. 완전 관리형 서비스인 Spanner는 고객에게 운영적인 부담을 주지 않습니다. Spanner는 하위 호환성을 유지하면서 제로 다운타임 소프트웨어 및 하드웨어 업데이트를 자동으로 수행합니다. Spanner API 및 시맨틱스는 작업을 단일 머신 데이터베이스에서 수행하는 것과 동일하며 Spanner의 내부 아키텍처에 대한 지식이 필요하지 않습니다. Spanner는 한 노드의 1/10부터 수만 개 노드까지 다양한 배포에서 실행되며, 자동으로 그리고 관리형 자동 확장 처리를 통해 반응형으로 확장됩니다.
반정형 데이터
Spanner는 반정형 또는 비정형 데이터를 저장하는 데 사용되는 JSON 및 BYTES와 같은 유연한 데이터 유형을 지원합니다. 다른 NoSQL 데이터베이스와 같이 이러한 데이터 유형을 사용해서 모든 스토리지 스키마를 한 번에 지정할 필요가 없도록 방지할 수 있습니다.
액세스 제어
다른 NoSQL 데이터베이스와 마찬가지로 Spanner는 IAM 기반의 액세스 제어를 지원합니다. 관리자는 데이터베이스에 사용자 이름과 비밀번호를 저장하지 않아도 액세스 제어 정책을 구성하고 관리할 수 있습니다.
Spanner가 기존 NoSQL 데이터베이스와 다른 차이점
Spanner는 기존 NoSQL 데이터베이스에 비해 다음과 같은 이점을 제공합니다.
트랜잭션
애플리케이션 복잡성이 증가함에 따라 데이터베이스에서 다중 행 및 다중 테이블 트랜잭션 작업을 수행해야 할 경우가 많습니다. Spanner에서는 읽기-쓰기 트랜잭션이 완전히 지원되기 때문에 데이터베이스 증가에 따라 트랜잭션 데이터 스토어로 마이그레이션할 필요가 없습니다. ACID 호환 데이터베이스인 Spanner는 확장에 관계없이 항상 데이터베이스의 트랜잭션 일관성을 유지합니다.
데이터 모델링
NoSQL 데이터베이스의 스키마 디자인은 모든 데이터를 하나의 테이블에 맞출 필요가 있고 조인을 수행할 수 없어서 데이터를 강제로 비정규화해야 하기 때문에 부자연스러울 수 있습니다. Spanner에서는 사용하면 단일 테이블로 안주하거나 비정규화를 수행할 필요 없이 스키마를 지정할 수 있습니다. 여러 테이블이 사용되는 액세스 패턴을 최적화하기 위해서는 테이블 인터리브 처리를 사용할 수 있습니다. 또한 테이블 간에 조인을 수행할 수 있습니다.
임시 쿼리
NoSQL API를 주로 사용하더라도 디버깅 또는 분석 목적으로 임시 쿼리를 실행하는 것이 유용한 경우가 많습니다. Spanner는 SQL 표준 쿼리 언어를 따릅니다. 요청 우선순위 지정을 사용해서 온라인 트래픽에서 우선순위가 낮은 임시 트래픽을 격리하거나 Spanner Data Boost를 사용하여 온라인 데이터베이스 트래픽에서 완전히 격리된 컴퓨팅 리소스에 대해 분석 쿼리를 실행할 수 있습니다.
strong consistency를 갖춘 보조 색인
애플리케이션에는 낮은 지연 시간 조회를 지원하기 위해 보조 색인이 필요한 경우가 많습니다. 일반적인 NoSQL 데이터베이스는 eventual consistency를 갖춘 보조 색인을 제공하거나 색인 증가 가능 범위에 대한 제약조건을 설정합니다. 그 결과 이러한 제약조건을 처리하기 위해 애플리케이션 논리가 복잡해질 수 있습니다. Spanner는 크기 제약조건 없이 확장할 수 있는 strong consistency를 갖춘 보조 색인을 제공합니다. 따라서 일관성 문제를 염려할 필요 없이 애플리케이션 논리에 집중할 수 있습니다.
Spanner가 사용자의 NoSQL 데이터베이스 요구에 부합되는지 여부
Spanner는 SQL 및 NoSQL 사용 사례를 모두 지원하는 유연한 데이터 스토리지 시스템입니다. 일부 애플리케이션은 단순한 스토리지 요구로 시작하더라도 복잡성이 증가함에 따라 트랜잭션, 일관적인 보조 색인, 유연한 쿼리 언어와 같이 NoSQL 데이터베이스에서 일반적으로 제공되지 않는 더 많은 기능을 필요로 합니다. Spanner에서는 이러한 제한사항 없이 애플리케이션을 필요에 따라 성장시킬 수 있습니다.
대부분의 비관계형 워크로드는 Spanner와 매우 잘 맞습니다. Spanner는 직관적인 NoSQL 읽기-쓰기 API를 제공할 뿐만 아니라 고가용성, 높은 신뢰성, 낮은 지연 시간, 탄력적인 컴퓨팅, 뛰어난 확장성을 지원합니다. Spanner를 사용하면 다양한 워크로드를 유연한 단일 플랫폼으로 통합할 수 있습니다.