Skip to main content

Firebase: Introduction to Cloud Firestore

I am learning about the cloud firestore. I learnt from Firebase docs and videos. mostly videos and you can also watch the video and come back here to take these notes as reminder about the video.

What is NoSQL Database?

  • NoSql databases are usually schema-less, it means there are not any kind of restriction to store the data in the database.
  • So, NoSql database is not going to store the all of data in table like structure.
  • There are different ways to store the data. It can be:-
    • Plain key value pair
    • Nested tree structure 
    • JSON object
  • This type of approach of storing the data may look messy but lots of developer like working with a schema-less database.
  • In NoSQL database, we can easily add or change the fields without breaking anything in design.
  • For the every record in NoSQL database, fields can be different, for eg: one record has {firstName, lastName, age} and for the next record we stored as {firstName, middleName, lastName, age, city}.
  • The drawback here is that we need to code a little defensively to prevent the storing invalid data in our database.
  • Here we are probably going to want to do some  checking on the client side to make sure the data we're getting is really what we are expecting and fail nicely when it isn’t. But coding defensively is probably a good idea anyway.
  • In NoSQL database, there is no SQL means we can not do join query to get the data from different sources.
  • So, we need to find a way to link the data in NoSQL database.
  • If we take an example of restaurant app, then we can store the restaurant and its reviews as below structure.

  • Here we can fetch the restaurant reviews by restaurant id.
  • NoSQL database has drawback of duplicate data at multiple places but other hand it is fast and easy to fetch the data. No need to run joins across multiple tables.
  • Biggest advantage with a NoSQL database over traditional databases is that it is able to distribute its data across multiple machines pretty easily, and this is big deal.
  • With most relational databases, if my app gets popular and I need my database to scale up to a  larger data set, I generally need to put it on bigger  machines. And this is known as scaling vertically.
  • On the other hand, with many NoSQL databases like Cloud Firestore, if I need to scale up to a larger  data set, my database can, behind the scenes and pretty much invisibly to me, distribute that data across several servers, and everything just kind of works. And this is known as scaling horizontally. 
  • Enviroments Like AWS or Google Cloud Platform are pretty easily add and remove the servers to the database with no downtime.
Starting with Cloud Firestore collection model:
  • In the realtime database world, we typically describe the data that stored in Firebase as a big JOSN tree.

  • It has keys and values, and those values can sometimes be objects that contain other keys and values.
  • Now, Cloud Firestore, like the Realtime Database, is a collection of objects. And all these objects are stored in a tree-like hierarchical structure.
  • Databases like the Firebase Realtime Database store everything as a big old JSON object, Cloud Firestore is a little more organized, in that it's made up of documents and collections. 

  • Documents are similar to JSON objects or dictionaries. They consist of key value pairs, which are referred to as fields in Cloud Firestore.
  • And the values of these fields can be any number of things, from strings, to numbers, to binary data, to smaller JSON looking objects that refer as maps.
  • Collections are basically collections of documents. You can think of them like a hash or a dictionary where the values are always going to be some kind of document.

Rules of Firestore:
  • Collections can only contain documents, no other types of data.
  • Documents can only be 1 MB in size.
  • A document cannot contain another document.
  • Documents can point to subcollections, but not other documents directly.
  • So it's very common to see a collection containing a bunch of documents, which then point to subcollections that contain other documents.
  • The very root of a Cloud Firestore tree can only contain collections means it cannot be document or any other type of data.
  • To access the data in Cloud Firestore, we need to specify the path that contains the documents and collections names.

  • In Cloud Firestore, queries are shallow by default, which means when you grab documents within a collection, you only grab those documents. You don't grab documents in any subcollections.
  • In a single line, it is a “Horizontally scalling NoSql database in the cloud”. 


Popular posts from this blog

LinkList implementation with Insert, InsertAt, Delete Methods in Java

Linklist Representation   public class Node { int data ; Node next ; Node( int data , Node next ){ this . data = data ; this . next = next ; } } public class LinkList { Node head ; public void insert( int data ) { Node node = new Node( data , null ); if ( head == null ) { head = node ; } else { Node currentNode = head ; while ( currentNode . next != null ) { currentNode = currentNode . next ; } currentNode . next = node ; } } public void inserAtStart( int data ) { Node node = new Node( data , null ); node . next = head ; head = node ; } public void insertAt( int index , int data ) { Node node = new Node( data , null ); // if index is 0 or head is null then insert at start if ( index == 0 || head == null ) { inserAtStart( data ); } els

How to kill a process running on particular port in Linux

  If port 8080 needs to be kill use below single command: kill -9 $(lsof -t -i:8080) Note: remove -9 from the command, if you don't want to kill the process violently. To list any process listening to the port 8080: lsof -i:8080 Use any port number that you want to kill.

Basics of Java Programming - Part 1

Datatypes in Java int 4 bytes short int 2 bytes long int 8 bytes byte 1 byte float  4 bytes double 8 bytes char 2 bytes Character to ASCII conversion in JAVA          class CharToASCII { public static void main(String a []) { char c1 = 'A' ; char c2 = 'a' ; System. out .print(( int ) c1 ); // OUTPUT: 65 System. out .print(( int ) c2 ); // OUTPUT: 97 System. out .print(( char )66); // OUTPUT: B  --> ASCII to i nt conversion           }        } "printf" is also available in JAVA            class  PrintfInJava {              public   static   void  main(String  a []) { int   i  =  4 ; int   j  =  7 ;                   int   k  =  i+j ; System. out .printf("Addition of %d and %d is %d", i, j, k);  // OUTPUT: 65            }        } Binary  Literals