기본 모드와 Datastore 모드 중 선택
Firestore 데이터베이스를 새로 만들 때 Datastore 모드로 실행되도록 데이터베이스 인스턴스를 구성하면 Datastore와의 하위 호환이 가능합니다. 이 페이지는 Native 모드와 Datastore 모드라는 두 가지 Firestore 데이터베이스 모드의 차이점을 이해하는 데 도움이 됩니다.
기본 모드의 Firestore
Firestore는 Datastore의 다음 주 버전이며 이 제품의 리브랜딩입니다. Datastore와 Firebase 실시간 데이터베이스를 최대한 활용하는 Firestore는 자동 확장, 고성능, 간편한 애플리케이션 개발을 위해 빌드된 NoSQL 문서 데이터베이스입니다.
Firestore는 다음과 같은 새로운 기능을 제공합니다.
- strong consistency를 가진 새로운 스토리지 레이어
- 컬렉션 및 문서 데이터 모델
- 실시간 업데이트
- 모바일 및 웹 클라이언트 라이브러리
Firestore는 Datastore의 이전 버전과 호환되지만 새로운 데이터 모델, 실시간 업데이트, 모바일 및 웹 클라이언트 라이브러리 기능은 호환되지 않습니다. 새로운 모든 Firestore 기능에 액세스하려면 기본 모드의 Firestore를 사용해야 합니다.
Datastore 모드의 Firestore
Datastore 모드의 Firestore는 Datastore 시스템 동작을 사용하지만 Firestore의 스토리지 레이어에 액세스하여 다음과 같은 Datastore 제한사항을 제거합니다.
- Eventual consistency: eventual consistency를 명시적으로 요청하지 않으면 Datastore 쿼리는 strong consistency를 갖게 됩니다.
- 트랜잭션의 쿼리는 더 이상 상위 쿼리일 필요가 없습니다.
- 트랜잭션이 더 이상 25개의 항목 그룹으로 제한되지 않습니다.
- 항목 그룹에 대한 쓰기가 더 이상 초당 1회로 제한되지 않습니다.
Datastore 모드에서는 Datastore와 호환되지 않는 Firestore 기능이 중지됩니다.
- 프로젝트는 Datastore API 요청을 수락하고 Firestore API 요청을 거부합니다.
- 프로젝트는 Firestore 색인 대신 Datastore 색인을 사용합니다.
- 이 프로젝트에는 Datastore 클라이언트 라이브러리를 사용할 수 있지만 Firestore 클라이언트 라이브러리는 사용할 수 없습니다.
- Firestore 실시간 기능은 사용할 수 없습니다.
- Google Cloud 콘솔에서 데이터베이스가 Datastore 뷰어를 사용합니다.
Datastore 모드로 자동 업그레이드
기존 Datastore 데이터베이스는 자동으로 Datastore 모드의 Firestore로 업그레이드됩니다. Datastore 데이터베이스가 필요한 새 프로젝트는 Datastore 모드의 Firestore를 사용해야 합니다.
가격 책정 및 위치
기본 모드 데이터베이스와 Datastore 모드 데이터베이스는 동일한 가격 책정 구조를 사용하며 동일한 위치에서 사용될 수 있습니다. 가격 책정 및 위치는 다음 페이지에서 자세히 설명합니다.
기본 모드의 Firestore
Datastore 모드의 Firestore
데이터베이스 모드 선택
Firestore 데이터베이스를 새로 만들 때 데이터베이스 모드를 선택해야 합니다. 같은 프로젝트에서 Native 모드와 Datastore 모드를 모두 사용할 수는 없습니다. 데이터베이스 모드 선택 시 권장사항은 다음과 같습니다.
새 서버 프로젝트에는 Datastore 모드의 Firestore를 사용합니다.
Datastore 모드의 Firestore를 사용하면 설정된 Datastore 아키텍처를 사용하면서 기본적인 Datastore 제한사항을 제거할 수 있습니다. Datastore 모드는 초당 수백만 회의 쓰기로 자동 확장될 수 있습니다.
새 모바일 및 웹 앱에는 기본 모드의 Firestore를 사용합니다.
Firestore는 실시간 기능과 오프라인 기능이 있는 모바일 및 웹 클라이언트 라이브러리를 제공합니다. 기본 모드는 동시 클라이언트 수백만 개로 자동 확장될 수 있습니다.
기능 비교
다음 표는 데이터베이스 모드의 시스템 동작을 비교한 것입니다.
기본 모드의 Firestore |
Datastore 모드의 Firestore |
|
---|---|---|
데이터 모델 | 문서와 컬렉션으로 구성된 문서 데이터베이스 | 종류 및 항목 그룹으로 구성된 항목 |
스토리지 레이어 | 항상 strong consistency를 가지는 새로운 스토리지 레이어 | 항상 strong consistency를 가지는 새로운 스토리지 레이어 |
쿼리 및 트랜잭션 |
|
|
Datastore v1 API 지원 | 아니요, 요청이 거부됨 | 예 |
Firestore v1 API 지원 | 예 | 아니요, 요청이 거부됨 |
실시간 업데이트 |
실시간 업데이트를 위해 문서 또는 문서 집합을 리슨할 수 있는 기능을 지원합니다. 문서 하나 또는 문서 집합을 리슨하는 동안 클라이언트는 데이터 변경사항을 받고 최신 데이터 세트를 보냅니다. |
지원되지 않음 |
오프라인 데이터 지속성 | 모바일 및 웹 클라이언트 라이브러리는 오프라인 데이터 지속성을 지원합니다. | 지원되지 않음 |
클라이언트 라이브러리 |
Firestore 클라이언트 라이브러리:
|
Datastore 클라이언트 라이브러리:
|
보안 |
|
IAM은 데이터베이스 액세스를 관리함 |
성능 | 수백만 개의 동시 클라이언트로 자동 확장됩니다. | 초당 쓰기 수백만 회로 자동 확장됩니다. |
SLA | Firestore SLA | Firestore SLA |
위치 |
두 모드 모두 동일한 위치 지원
|
|
가격 책정 |
두 모드 모두 항목 및 문서 작업에 동일한 가격 책정 구조를 사용합니다. Datastore 모드의 Firestore는 소규모 작업에 요금을 부과하지 않습니다. 두 모드 모두 저장된 데이터 및 네트워크 대역폭에 동일한 가격 책정 구조를 사용합니다. 가격 책정에 대한 자세한 내용은 다음을 참조하세요. |
|
콘솔 | Firebase Console 및 Google Cloud 콘솔 Firestore 뷰어 | Google Cloud 콘솔 Datastore 뷰어 |
네임스페이스 | 지원되지 않음 | 네임스페이스가 지원됨 |
App Engine 클라이언트 라이브러리 통합 | App Engine 표준 환경 Python 2.7 및 PHP 5.5 런타임에서는 지원되지 않음 App Engine 표준 환경, 다른 모든 런타임에서 지원됨 App Engine 가변형 환경, 모든 런타임에서 지원됨 |
모든 런타임에서 지원됨 |
Native 모드 또는 Datastore 모드로 변경
데이터베이스가 비어 있으면 기본 모드 또는 Datastore 모드로 변경할 수 있습니다.
데이터베이스를 Native 모드로 변경합니다.
gcloud
gcloud alpha firestore database update 명령어를 사용하여 데이터베이스를 Native 모드로 변경합니다.
gcloud alpha firestore databases update --type=firestore-native
rest
curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"type":"FIRESTORE_NATIVE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=type"
데이터베이스를 Datastore 모드로 변경합니다.
gcloud
gcloud alpha firestore database update 명령어를 사용하여 데이터베이스를 Datastore 모드로 변경합니다.
gcloud alpha firestore databases update --type=datastore-mode
rest
curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"type":"DATASTORE_MODE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=type"