Google Cloud Firestore
- Google Cloud Firestore provides a fully managed, scalable, and serverless document database.
- Firestore stores the data in the form of documents and collections
- Firestore provides horizontal autoscaling, strong consistency with support for ACID transactions
- Firestore database can be regional or multi-regional
- Firestore multi-region instances provide five-nines (99.999%) availability SLA and regional instances with four-nines (99.99%) availability SLA
Data Model
- Firestore is schemaless
- Document & Collections
- Unit of storage is the document in Firestore
- Each document contains a set of key-value pairs
- stores the data in documents organized into collections.
- is optimized for storing large collections of small documents.
- supports a variety of data types for values: boolean, number, string, geo point, binary blob, and timestamp.
- Documents can contain subcollections, arrays, or nested objects, which can include primitive fields like strings or complex objects like lists.
- Documents within a collection are unique and can be identified using your own keys, such as user IDs, or Firestore generated random IDs.
- Indexes
- Firestore guarantees high query performance by using indexes for all queries.
- supports two types of indexes
- Single-field
- automatically maintains single-field indexes for each field in a document and each subfield in a map.
- Single-field index exemption can be used to exempt a field from automatic indexing settings
- Single-field index exemption for a map field is inherited by the map’s subfields
- Composite
- A composite index stores a sorted mapping of all the documents in a collection, based on an ordered list of fields to index.
- does not automatically create composite indexes but helps identify fields based on the query pattern
- Single-field
Data Contention
- Data Contention occurs when two or more operations compete to control the same document.
- Mobile/Web SDKs
- uses optimistic concurrency controls to resolve data contention
- resolves data contention by delaying or failing one of the operations
- client libraries automatically retry transactions that fail due to data contention. After a finite number of retries, the transaction operation fails and returns an error message
- Server Client Libraries
- use pessimistic concurrency controls to resolve data contention.
- Pessimistic transactions use database locks to prevent other operations from modifying data.
- Transactions place locks on the documents they read. A transaction’s lock on a document blocks other transactions, batched writes, and non-transactional writes from changing that document.
- A transaction releases its document locks at commit time. It also releases its locks if it times out or fails for any reason.
Firestore Security
- Firestore automatically encrypts all data before it is written to disk.
- Server-side encryption can be used in combination with client-side encryption, where data is encrypted by the client as well as server i.e double encryption
- Firestore uses Transport Layer Security (TLS) to protect the data as it travels over the Internet during read and write operations.
Firestore Native vs Datastore Mode
Firestore in Native mode
- Strongly consistent storage layer
- Collection and document data model
- Real-time updates
- Mobile and Web client libraries
- Firestore is backward compatible with Datastore, but the new data model, real-time updates, and mobile and web client library features are not.
- Native mode can automatically scale to millions of concurrent clients.
- Native mode is recommended for Mobile and Web apps
Firestore in Datastore mode
- Datastore mode uses Datastore system behavior but accesses Firestore’s storage layer, removing the following Datastore limitations:
- No more eventual consistency. Is a strongly consistent database
- No more entity group limits on writes per second. Writes to an entity group are no longer limited to 1 per second. Transactions are no longer limited to 25 entity groups.
- Transactions can be as complex as you want to design them.
- No more cross-entity group transaction limits. Transactions can span documents and be as complex as your app requires. Queries in transactions are no longer required to be ancestor queries.
- Datastore mode disables Firestore features that are not compatible with Datastore:
- accepts only Datastore API requests and denies Firestore API requests.
- uses Datastore indexes instead of Firestore indexes.
- do not support Firestore client libraries, but only Datastore client libraries
- do not support Firestore real-time capabilities
- Datastore mode can automatically scale to millions of writes per second.
GCP Certification Exam Practice Questions
- Questions are collected from Internet and the answers are marked as per my knowledge and understanding (which might differ with yours).
- GCP services are updated everyday and both the answers and questions might be outdated soon, so research accordingly.
- GCP exam questions are not updated to keep up the pace with GCP updates, so even if the underlying feature has changed the question might not be updated
- Open to further feedback, discussion and correction.
- Your existing application keeps user state information in a single MySQL database. This state information is very user-specific and depends heavily on how long a user has been using an application. The MySQL database is causing challenges to maintain and enhance the schema for various users. Which storage option should you choose?
- Cloud SQL
- Cloud Storage
- Cloud Spanner
- Cloud Firestore