Heads up... You're reading this book for free, with parts of this chapter shown beyond this point astext.
In the previous chapters, you learned how to use Realtime Database for storing data in the cloud. Firebase offers another product that you can use for storing data in the cloud: Cloud Firestore.
Cloud Firestore has a similar feature set as Realtime Database. It allows you to store data in the cloud and sync data across devices. It is designed to overcome all the drawbacks of Realtime Database — and it also stores data within a single JSON document.
In this chapter, you’ll learn how to use Cloud Firestore and get familiar with the differences between Realtime Database and Cloud Firestore. More importantly, you’ll learn how to determine when it’s appropriate to use one over the other.
What is Cloud Firestore?
Cloud Firestore is a NoSQL database similar to Realtime Database. It stores data in a structure that looks like a tree, but where data is stored as documents.
Documents and collections are the primary building blocks of Cloud Firestore. It’s helpful to think of documents as files. These files consist of key-value pairs known as fields — this is similar to how models work. The values can be anything - strings, numbers, binary data, or even nested objects in a map format that resembles a JSON object. Collections, on the other hand, are simply groups of documents.
When working with Cloud Firestore, there are a few rules to keep in mind:
- Collections can only contain documents. For example, you can’t add a
Stringobject to the collection.
- Documents can’t contain other documents; however, they can point to subcollections. For example, your collections can contain many documents, and those documents can point to other collections. This is how things are formatted in a tree-like structure.
- The root of the Cloud Firestore database can only contain collections.
For example, in the WhatsUp app you created earlier, you could have a Posts collection that contains a document for each post. Each document would point to a Comments collection that contains comments for that post, and the document that contains the comments would point to another collection, and so on.
When you worked with Realtime Database, you learned that you should avoid these deeply nested hierarchy structures. In Cloud Firestore, however, these deeply nested structures are typical because the queries are shallow, meaning that querying data from a document will get you only that document; you don’t have to query the entire collection or the subcollections within the document. This also means that queries are more efficient and flexible than in a Realtime Database, especially when it comes to filtering and sorting the data.
With the WhatsUp app running with Cloud Firestore, you could have a collection of posts and any other collections you need to represent the data.
Cloud Firestore vs. Realtime database
Due to the similarity between Realtime Database and Firestore, you may be wondering how they’re different. Both of these products offer a cloud-based database solution with real-time data syncing for mobile clients, so what gives?
Cloud Firestore Data Structure
In this chapter, you learned that Firestore is a NoSQL database, meaning there is no SQL. But if there’s no SQL, you can’t build queries that will take one piece of data from one part of the database, and another piece of data from another part of the database, and merge them. In Firestore, to get data from two different parts of the database, you must make two different requests. If you run into that scenario, you likely need to re-structure your data in a way that you’ll always be able to get what you need in one request.
Collections and Documents
You learned that Realtime Database stores data as one large JSON tree that contains keys and values. You also learned that these values can be objects containing other key-value pairs. Firestore is a collection of objects that are stored in a hierarchical structure that resemble a tree. Every object in a collection is represented as a document. The document consists of key-value pairs known as fields in Firestore. These values can be strings, numbers, binary data, or nested objects in a map format. The limitation, however, is that the document size must be less than 1MB.
Firestore identifies each document by its location in the database. A reference is a lightweight object pointing to a location in your database. A reference doesn’t perform any network operation. You can create a reference to a location even if it doesn’t have any data. You can create references for your collections and documents. Collection reference and document reference are different types of references. This means the operations on each reference also differ.
Where to go from here?
In this chapter, you learned the basics of Cloud Firestore. You learned what Firestore is, the differences between Firestore and Realtime Database, and how Firestore structures the data. You still have a lot to cover, so be sure to visit the official documentation (https://firebase.google.com/docs/firestore) to understand the specifics of Cloud Firestore better.