Skip to main content

Mongo DB Overview


Latest Version - 4.4
MongoDB ATLAS - Atlas takes care of time-consuming costly administration tasks and get the database resources you need quickly
MongoDB Cloud Providers - AWS, Google Cloud, Azure

Why MongoDB No SQL database?

  • Performance - A single object document retrieved from a single place in a disk compared to SQL database where data is spread across multiple tables which in turn needs to access multiple places in the disk to retrieve data. 
  • Scalability - No SQL databases are compared to be more scalable than SQL databases. For eg. Mongo DB has built-in support for replication and sharding (horizontal partitioning of data) for scalability. Hugh amount of hardware and human resources are needed for SQL databases to support scalability.
  • Replication - Has Inbuilt functionality to replicate data to multiple servers for better availability (24*7), No downtime needed for maintenance, Disaster Recovery
  • No need to ORM layer which reduces overhead compares to SQL where ORM should be maintained
  • Easy document data model (one model for the entire document)
  • Easy to use and efficient drivers and frameworks for different languages (c#, java, PHP, Go, JS)
  • ACID compliance on a single document
  • Flexible - Adapt to change in business needs
  • Versatile - JSON Documents, Key-Value, Text, GeoSpatial, Graph, Tabular
When to use SQL database?
  • Need ACID compliancy (Atomicity, Consistency, Isolation, Durability). It reduces anomalies and protects the integrity of the database.
  • Your data is structured and unchanging - when there is no need to support a variety of data types and when not handling high traffic volume
When to use a No SQL database? (Mongo DB, Cassandra, Hbase ..)
  • Storing a huge volume of data without structure - No SQL does not have a limit of storing multiple data types and can add new types based on business needs
  • Maximum size of a document - 16MB. But can store bigger docs using an API which splits the docs into multiple chunks (ex. image > 200MB)
Replication
Replication is the process of synchronizing data across multiple servers thereby providing redundancy to protect from data loss and better availability. 
A Mongo DB can have 2-50 replica sets. The most common is 3 nodes (1 primary and 2 secondaries). Availability increases when more secondary nodes are added to the cluster. You can also separate secondary nodes for DATA ANALYTICS(only READ and no writes) to increase the performance

How Replication works in Mongo DB:

All write operations go only to the primary node and data replicates from primary to the secondary node. During failure or maintenance, the secondary nodes vote and elect a node as a primary node. After the failed node is recovered, it again joins the replica set and works as a secondary node. (Failed node is automatically restarted by the Mongo driver). Replica sets can be in the same data center location or geographically distributed


Sharding
Storing data records across multiple machines to meet the demands of data growth.  As the size of the data increases, a single machine may not be sufficient to store the data and provide R/W throughput. Sharding uses horizontal scaling for solving this problem.

Comments

Popular posts from this blog

How to clear Visual Studio Cache

How to clear visual studio cache Many times, during development you would face situations where project references are not loaded properly or you get missing/error DLL's. This is because the Component cache gets corrupted randomly and without any warnings. The first option that needs to be done is to clear component cache and restart Visual Studio since the Cache might be holding onto previous DLL versions. Here are the steps on how to clear Visual Studio Cache, Clearing Component Cache: Close all Visual Studio Instances running in your machine. Also, make sure devenv.exe is not running in the Task Manager Delete the Component cache directory - %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\1x.0\ComponentModelCache Restart Visual Studio The above steps should fix the cache issue most of the times, but some times that is not enough and you need to perform the below steps as well. Clearing User's Temp Folder: Open the temp folder in this locatio n -  %USERPROFILE%\AppData\Loc

PCF Health Check Delay - Invocation timeout

In PCF we can set up the health check invocation timeout to execute X seconds after the instance has been created.  But before that, let's understand the PCF Health Check Lifecycle. Stage 1: The application is deployed to PCF Stage 2: When deploying the app, a health check type is specified and optionally a timeout. If a health check type is not specified, then the monitoring process defaults to a port health check Stage 3: Cloud Controller stages, starts, and runs the application Stage 4: Based on the type specified for the app, Cloud Controller configures a health check    that runs periodically for each app instance Stage 5: When Diego starts an app instance, the app health check runs every two seconds until a response indicates that the app instance is healthy or until the health check timeout elapses. The 2-seconds health check interval is not configurable Stage 6: When an app instance becomes healthy, its route is advertised, if applicable.                  Subsequent hea

How to dependency inject to static class

.Net core supports dependency injection. There are many ways that you can inject services like constructor injection, action method injection, property injection. But there will be scenarios where you need to inject dependency services to static classes. For example, injecting services to extension methods. First, create a static class with a one property IServiceProvider type public void ConfigureServices(IServiceCollection services) { services.AddScoped<ILoggerEntry, LoggerEntry>(); services.AddTransient<IMongoRepository, MongoRepository>(); } Second, configure your services in ConfigureServices() method in Startup.cs and define the lifetime of the service instance using either Transient, Scoped or Singleton types. public void ConfigureServices(IServiceCollection services) { services.AddScoped<ILoggerEntry, LoggerEntry>(); services.AddTransient<IMongoRepository, MongoRepository>(); } For the next step to configure the Static class provider proper