< Datastore Concepts and Indexes >
Datastore = Firestore in Datastore mode
Datastore = Datastore 모드의 Firestore
- Datastore 모드의 Firestore는 Datastore 시스템 동작을 사용하지만
Firestore의 향상된 스토리지 계층에서 데이터를 저장하고 읽음 - Datastore 모드의 Firestore는 Datastore와 역호환되지만
Firestore의 기본 데이터 모델, 실시간 업데이트, 모바일 및 웹 클라이언트 라이브러리 기능은 Datastore 모드에서 사용 불가 - 모든 새로운 Firestore 기능에 액세스하려면 기본 모드에서 Firestore를 사용해야 함
- 새 Firestore 데이터베이스를 만들 때 데이터베이스 모드를 선택해야 하며
동일한 프로젝트에서 기본 모드와 Datastore 모드를 모두 사용할 수 없음 - Dtatstore 모드는 일반적으로 서버 애플리케이션에 사용해야 하며
기본 모드는 새로운 모바일 및 웹 앱 또는 실시간 및 오프라인 기능이 필요할 때 사용
Datastore concepts
데이터 저장소 개념
- Datastore의 데이터 개체는 (Entity) 항목이라고 하며 하나 이상의 속성으로 구성
- 속성은 하나 이상의 값을 가질 수 있음
- 각 엔티티에는 네임스페이스, 엔티티의 종류, 식별자 및 선택적 Ancestor Path로 구성된 고유하게 식별하는 키가 있음
- 하나 이상의 엔티티에 대한 작업을 트랜잭션이라고 하며 원자적
You can specify ancestors of an entity
엔티티의 상위 항목을 지정 가능
- 항목을 생성할 때 다른 항목을 상위 항목으로 지정할 수 있음 :
- 상위 항목이 없는 항목은 루트 항목
- 엔티티의 부모, 부모의 부모 등은 엔티티의 조상
- 엔티티의 자식, 자식의 자식 등은 엔티티의 자손
- 루트 엔티티에서 특정 엔티티까지의 엔티티 시퀀스는 상위 경로를 형성
- 이 예에서는 Customer 종류가 있는 루트 엔티티 John Do를 보여주며
Pencil 엔티티의 전체 키에는 종류 식별자 쌍인 Customer John Doe, Invoice June 및 Product Pencil이 포함
Datastore has two types of indexes
Datastore에는 두 가지 유형의 색인 존재
- Datastore에는 기본 제공 색인과 복합 색인이라는 두 가지 유형의 색인이 있음 :
1) 기본적으로 각 항목 종류의 각 속성에 대해 오름차순 및 내림차순 인덱스가 미리 정의되어 있으며 내장 인덱스라 함
이러한 단일 속성 인덱스는 동일성 전용 쿼리 및 단순 부등식 쿼리와 같은 많은 단순 쿼리를 수행
이러한 색인은 가정되며 Google Cloud Console의 색인 페이지에 표시되지 않음
2) 더 복잡한 쿼리의 경우 복합 인덱스를 수동으로 정의해야 하며 복합 인덱스는 여러 속성으로 구성
쿼리에 속성이 필요하지 않은 경우 인덱스에서 속성을 제외하며 속성을 불필요하게 인덱싱하면 일관성을 유지하기 위해
대기 시간이 늘어나고 인덱스에 대한 스토리지 비용이 증가하므로 너무 많은 복합 인덱스를 사용하지 않도록 해야 함
복합 인덱스를 과도하게 사용하면 대기 시간과 스토리지 비용이 증가 - 이전에 정의한 인덱스 없이 대규모 데이터세트에 대해 임시 쿼리를 실행해야 하는 경우 BigQuery를 사용
단조 증가하는 값(예: NOW() 타임스탬프)으로 속성을 인덱싱하지 말아야 하며 이러한 색인을 유지하면
읽기 및 쓰기 속도가 높은 애플리케이션의 Datastore 지연 시간에 영향을 미치는 핫스팟이 발생할 수 있음
Create and delete your composite indexes
복합 색인 (인덱스) 생성 및 삭제
- 복합 인덱스는 애플리케이션 인덱스 구성 파일(index.yaml)에 정의 :
- 복합 색인은 볼 수 있지만 Cloud Console을 통해 수정할 수는 없음
- 복합 인덱스를 배포하려면 인덱스할 모든 속성을 포함하도록 index.yaml 구성 파일을 수정
- "gcloud datastore indexes create"를 실행하여 새 색인을 생성
- Datastore에 이미 있는 데이터의 양에 따라 색인을 만드는 데 상당한 시간이 걸릴 수 있음
- 인덱스 작성이 완료되기 전에 실행되는 쿼리는 예외를 발생시킴
- 색인 구성에서 기존 색인을 변경하거나 삭제해도 원본 색인은 Datastore에서 자동으로 삭제되지 않음
- 이전 색인이 더 이상 필요하지 않다고 확신하면 "gcloud datastore indexes cleanup"을 사용하여
index.yaml의 로컬 버전에 언급되지 않은 프로덕션 Datastore 인스턴스에 대한 모든 색인을 삭제
- Cloud Console에서 색인 상태를 확인 가능
Datastore as compared to relational databases
관계형 데이터베이스와 비교한 데이터 저장소
- Datastore의 개념을 표준 관계형 데이터베이스 개념과 비교 :
- Datastore는 자동으로 확장되어 매우 큰 데이터 세트를 처리하도록 설계되어
애플리케이션이 더 많은 트래픽을 수신할 때 고성능을 유지할 수 있음
- Datastore는 필요에 따라 자동으로 데이터를 배포하여 확장
- Datastore는 데이터 세트와 반대로 결과 세트의 크기에 따라 성능이 확장되는 쿼리만 지원하여 확장성을 읽음
- 결과 집합에 100개의 엔티티가 포함된 쿼리는 100개 이상의 엔티티를 검색하든 백만 개 이상을 검색하든 동일한 작업을 수행
- 모든 쿼리는 이전에 구축된 인덱스에 의해 제공되므로 실행할 수 있는 쿼리 유형은
SQL을 사용하는 관계형 데이터베이스에서 허용되는 쿼리 유형보다 더 제한적
- Datastore는 조인 작업, 여러 속성에 대한 비균등 필터링
또는 하위 쿼리 결과를 기반으로 하는 데이터 필터링에 대한 지원을 포함하지 않음
- 관계형 데이터베이스와 달리 데이터 저장소는 스키마가 없고 일관된 속성 집합을 갖기 위해 동일한 종류의 엔티티가 필요 없음
- 특정 종류에 대한 특정 속성 집합을 적용하려면 자신의 애플리케이션 코드에서 이를 적용해야 함