Heads up... You're reading this book for free, with parts of this chapter shown beyond this point astext.
You can unlock the rest of this book, and our entire catalogue of books and videos, with a raywenderlich.com Professional subscription.
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 store data in the cloud and sync data across devices, but it’s designed to overcome all of the drawbacks of the Realtime database — and it also stores data within a single JSON document. This chapter introduces you to the Cloud Firestore and discusses the differences between Realtime Database and Cloud Firestore. More importantly, it also helps you determine when it’s appropriate to use one over the other.
What is Cloud Firestore?
Cloud Firestore is a NoSQL database similar to the 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 the Cloud Firestore. It’s helpful to think of documents as files, and that 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:
First Rule: Collections can only contain documents. For example, you cannot add a
Stringto the collection.
- Second Rule: Documents cannot 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.
- Third Rule: 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 the 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 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 the Realtime Database and the 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 the 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 the Firestore, to get data from two different parts of the database, you must make two different requests. If you run into that scenario, it’s likely that you 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 the 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. The Firestore is a collection of objects that are stored in a hierarchical structure that resembles a tree. Every object in a collection is represented as a document. The document consists of key-value pairs known as fields in the 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.
Where to go from here?
In this chapter, you learned the basics of Cloud Firestore. You learned what the Firestore is, the differences between the Firestore and the Realtime Database, and how the Firestore structures the data. You still have a lot to cover, so be sure to visit the official documentation here: https://firebase.google.com/docs/firestore to understand the specifics of the Cloud Firestore better. You can find it here: https://firebase.google.com/docs/firestore.