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
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.
Firestore guarantees high query performance by using indexes for all queries.
supports two types of indexes
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
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
Data Contention occurs when two or more operations compete to control the same document.
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 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
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?