Published by A&A Agency Updated at:

A&a

  Front-endAngularReactUIJavascriptWebsiteAppUXFirebaseHTML 5SASS developers  

Back

Firestore vs Real-time Database in Firebase

First published:

firebase
firestore
real-time database
javascript
front-end developers
build a website
build an app
coding tutorial

Which One Should Front-End Developers Use to Build a Website?

Firestore and Real-time Database are the two main database options when working with Firebase. But which one should you use for your next project and why?

Firebase is a popular backend as a service (BaaS) platform for building web and mobile applications. It provides a suite of tools and services that simplify common backend tasks such as data storage, authentication, and real-time synchronization. Firebase offers two main database options: Firestore and Real-time Database. While both databases are built on top of the same infrastructure, they have different use cases, data models, and querying capabilities.

In this article, we will compare Firestore and Real-time Database in terms of their features and performance to help front-end and JavaScript developers decide which one to use when building a website or app.

Firestore Overview

Firestore is a NoSQL document-oriented database that stores data in collections and documents. Each document can have multiple fields, and each field can contain different types of data such as strings, numbers, booleans, arrays, maps, and even nested objects. Firestore supports automatic indexing, querying, and ordering of documents based on their fields. It also provides real-time updates and offline persistence, which means that data changes are automatically synced to clients and can be accessed even when the device is offline.

Firestore is ideal for complex, hierarchical data structures and queries, and for applications that require real-time updates and offline support.

Real-time Database Overview

Real-time Database, on the other hand, is a NoSQL JSON database that stores data in a tree-like structure of nodes and leaves. Each node can have multiple child nodes, and each leaf node contains a JSON object with key-value pairs. Real-time Database provides real-time synchronization of data between clients and the server, which means that data changes are immediately pushed to all connected clients. It also provides basic querying and filtering capabilities based on the value of a single key. Real-time Database is ideal for simple, flat data structures and applications that require real-time updates.

Features Comparison

Firestore and Real-time Database have different sets of features that cater to different use cases. Here are some of the key features of each database.

Firestore Features

  • Documents and collections Firestore stores data in documents, which are stored in collections. Each document can have multiple fields and can contain subcollections. Collections and documents are hierarchical, and Firestore provides a flexible data model that allows for complex queries and relationships.

  • Automatic indexing Firestore automatically indexes documents based on their fields, which means that queries are fast and scalable. Indexes are created automatically when a new field is added to a document, or when a new query is executed.

  • Querying and filtering Firestore provides a powerful querying and filtering API that allows developers to retrieve documents based on multiple criteria such as equality, inequality, ranges, arrays, maps, and nested objects. Firestore also supports pagination, sorting, and limiting of results.

  • Real-time updates Firestore provides real-time updates that allow clients to receive changes to data in real-time. Clients can listen to changes to entire collections, documents, or individual fields. Real-time updates work seamlessly with offline persistence, which means that changes are synced to clients even when they are offline.

  • Offline persistence Firestore provides offline persistence that allows clients to access data even when they are offline. When a device is offline, Firestore stores changes in a local cache, and when the device goes back online, changes are automatically synced to the server and other clients.

  • Security rules Firestore provides powerful security rules that allow developers to control access to data based on the user's identity and role. Security rules are enforced on the server, which means that clients cannot bypass them. Firestore also provides integration with Firebase Authentication, which simplifies the authentication and authorization process.

Real-time Database Features

  • JSON data model Real-time Database stores data in a tree-like structure of nodes and leaves. Each leaf node contains a JSON object with key-value pairs. The data model is simple and easy to understand, but it can be limiting for complex data structures and queries.

  • Real-time updates Real-time Database provides real-time updates that allow clients to receive changes to data in real-time. Clients can listen to changes to individual nodes, or to entire subtrees of the database. Real-time updates work seamlessly with offline persistence, which means that changes are synced to clients even when they are offline.

  • Basic querying Real-time Database provides basic querying and filtering capabilities based on the value of a single key. Clients can retrieve data based on equality or range conditions, and can also order data by key or value. However, Real-time Database does not support complex queries or joins.

  • Offline persistence Real-time Database provides offline persistence that allows clients to access data even when they are offline. When a device is offline, Real-time Database stores changes in a local cache, and when the device goes back online, changes are automatically synced to the server and other clients.

  • Security rules Real-time Database provides security rules that allow developers to control access to data based on the user's identity and role. Security rules are enforced on the server, which means that clients cannot bypass them. Real-time Database also provides integration with Firebase Authentication, which simplifies the authentication and authorization process.

Code Examples

Let's take a look at some code examples that demonstrate the differences between Firestore and Real-time Database

Firestore Example

// Initialize Firestoreconst db = firebase.firestore(); // Add a document to a collection db.collection("users").add({ name: "John Doe", age: 30, email: "john.doe@example.com" }); // Query documents db.collection("users") .where("age", ">=", 30) .get() .then((querySnapshot) => { querySnapshot.forEach((doc) => { console.log(doc.id, " => ", doc.data()); }); });

This code initializes Firestore and adds a document to a collection named "users". It also queries documents in the "users" collection where the age is greater than or equal to 30. The result is logged to the console.

Real-time Database Example

// Initialize Real-time Databaseconst db = firebase.database(); // Add data to a node db.ref("users/1").set({ name: "John Doe", age: 30, email: "john.doe@example.com" }); // Listen for changes to a node db.ref("users/1").on("value", (snapshot) => { console.log(snapshot.val()); });

This code initializes Real-time Database and adds data to a node named "users/1". It also listens for changes to the "users/1" node and logs the result to the console.

As we can see from these examples, Firestore and Real-time Database have different APIs and data models. Firestore uses collections and documents, while Real-time Database uses a JSON tree structure. Firestore provides more advanced querying and filtering capabilities, while Real-time Database provides real-time updates and a simpler, more flexible data model.

Conclusion

When it comes to choosing between Firestore and Real-time Database, there is no one-size-fits-all answer. The choice depends on the use case, data structure, and performance requirements.

Firestore is a good choice for applications that require complex queries, scalability, low latency, and advanced security features. It is ideal for applications that need to handle large amounts of data and traffic, and for front-end developers who are building websites with JavaScript.

Real-time Database is a good choice for applications that require real-time synchronization, simplicity, and low latency for reads. It is ideal for applications that have a small data model and a large number of simultaneous connections, and for JavaScript developers who are building real-time applications.

In the end, both Firestore and Real-time Database are powerful and flexible tools that can help developers build fast and responsive applications with real-time updates. By understanding the differences between the two databases, developers can make an informed decision that meets the needs of their application and their users.