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”. 

Comments

Popular posts from this blog

Nudge Notes - Python Language Basics

  1. Datatypes in Python: None Numeric float -> 1.5 int -> 5 complex -> 2+5j bool -> True/false Sequence List -> [3,5,6,7,1] Tuple -> (3,5,6,7,1) Set -> {3,5,6,7,1} String -> "Akshay" Range  range(5) -> range(0, 5)  list(range(5)) -> [0,1,2,3,4] list(range(2,10,2)) -> [2,4,6,8] Dictonary product_price = {'book': 50, 'pen': 300, 'eraser': 10}  product_price.get('book') -> 50 2. Number Conversion in Python bin( 28 ) -> 0b 11100 oct( 28 ) -> 0o 34  hex( 28 ) ->  0x 1c 3. Swap two numbers in Python           a = 5       b = 6 Method #1:             a, b = b, a Method #2            a = a + b         b = a - b         a = a - b 4. "math" module in python     import math math.sqrt(25) -> 5.0 math.floor(2.5) -> 2.0 math.ceil(2.5) -> 3.0 math.pow(2, 3) -> 8.0 math.pi -> 3.141592653589793 math.e -> 2.718281828459045 5. How to import a module in python import math import math as

Python Language Basics - 2

Slice string in python: details= "Akshay Kumar Gupta--akshaygupta.me" # details[:6] and details[0:6] will give same result print(details[: 6 ]) # OUTPUT: Akshay # details[20:] and details[20:34] will give same result print(details[ 20 :]) # OUTPUT: akshaygupta.me # -1 denotes the reverse order print(details[ 11 ::- 1 ]) #OUTPUT: ramuK yahskA # Here -9 denotes the count from the end of the string print(details[:- 9 :- 1 ]) #OUTPUT: em.atpug #Both syntax gives the same result for reversing the string print(details[- 1 ::- 1 ]) #OUTPUT: em.atpugyahska--atpuG ramuK yahskA print(details[::- 1 ]) #OUTPUT: em.atpugyahska--atpuG ramuK yahskA Format print in python: print( "hi, My name is {} and I am a {}. I like {}." .format( "Akshay" , "Software Engineer" , "python" )) In the above print statement, "{}" refers to the placement of the values given in "format()" function. First value in the order "format()"

Simple way to import and export collections in MongoDB

  A simple command will help to import and export collections in mongoDB. Export/Dump Collections in MongoDB: mongodump -d <database_name> -o <directory_backup> The above command will dump all the collections in the defined directory. eg: if your database name is awesome_db and you selected the my_db_backup as backup directory then you need run below command: mongodump -d awesome_db  -o my_db_backup If your db has authentication enabled then pass -u <username> -p <press enter> with the above command. Import/Restore Collection in MongoDB: mongorestore -d <database_name> <directory_backup> Similarly this command will restore the collections in the mongodb database.  for eg: mongodump -d awesome_db -o my_db_backup pass the authentication -u <username> -p <press enter> if your mongodb has authentiction.