NoSQL Zone is brought to you in partnership with:

' ! Moshe Kaplan constantly helps successful firms getting to the next level and he is thrilled to uncover some of his secrets. Mr. Kaplan is a seasoned project management and cloud technologies lecturer. He is also known to be a cloud and SCRUM evangelist Moshe is a Co-Founder. He was a R&D Director at Essence Security, led RockeTier and served as a board member in the IGT and as a department head at a top IDF IT unit. Moshe holds M.Sc and B.Sc from TAU. Moshe is a DZone MVB and is not an employee of DZone and has posted 58 posts at DZone. You can read more from them at their website. View Full User Profile

When to Use MongoDB Rather than MySQL (or Other RDBMS): The Billing Example

  • submit to reddit

NoSQL is a hot buzz in the air for a pretty long time (well, it's not only a buzz anymore).

However, when should we really use it?

Best Practices for MongoDB

NoSQL products (and among them MongoDB) should be used to meet challenges. If you have one of the following challenges, you should consider MongoDB:

You Expect a High Write Load

MongoDB by default prefers high insert rate over transaction safety. If you need to load tons of data lines with a low business value for each one, MongoDB should fit. Don't do that with $1M transactions recording or at least in these cases do it with an extra safety.

You need High Availability in an Unreliable Environment (Cloud and Real Life)

Setting replicaSet (set of servers that act as Master-Slaves) is easy and fast. Moreover, recovery from a node (or a data center) failure is instant, safe and automatic

You need to Grow Big (and Shard Your Data)

Databases scaling is hard (a single MySQL table performance will degrade when crossing the 5-10GB per table). If you need to partition and shard your database, MongoDB has a built in easy solution for that.

Your Data is Location Based

MongoDB has built in spacial functions, so finding relevant data from specific locations is fast and accurate.

Your Data Set is Going to be Big (starting from 1GB) and Schema is Not Stable

Adding new columns to RDBMS can lock the entire database in some database, or create a major load and performance degradation in other. Usually it happens when table size is larger than 1GB (and can be major pain for a system like BillRun that is described bellow and has several TB in a single table). As MongoDB is schema-less, adding a new field, does not effect old rows (or documents) and will be instant. Other plus is that you do not need a DBA to modify your schema when application changes.

You Don't have a DBA

If you don't have a DBA, and you don't want to normalize your data and do joins, you should consider MongoDB. MongoDB is great for class persistence, as classes can be serialized to JSON and stored AS IS in MongoDB. Note: If you are expecting to go big, please notice that you will need to follow some best practices to avoid pitfalls.

Real World Case Study: Billing

In the last ILMUG, Ofer Cohen presented BillRun, a next generation Open Source billing solution that utilizes MongoDB as its data store. This billing system runs in production in the fastest growing cellular operator in Israel, where it processes over 500M CDRs (call data records) each month. In his presentation Ofer presented how this system utilizes MongoDB advantages:

  1. Schema-less design enables rapid introduction of new CDR types to the system. It let BillRun keep the data store generic.
  2. Scale BillRun production site already manages several TB in a single table, w/o being limited by adding new fields or being limited by growth
  3. Rapid replicaSet enables meeting regulation with easy to setup multi data center DRP and HA solution.
  4. Sharding enables linear and scale out growth w/o running out of budget.
  5. With over 2,000/s CDR inserts, MongoDB architecture is great for a system that must support high insert load. Yet you can guarantee transactions with findAndModify (which is slower) and two-phase commit (application wise).
  6. Developer oriented queries, enable developers write a elegant queries.
  7. Location based is being utilized to analyze users usage and determining where to invest in cellular infrastructure.

Bottom Line

MongoDB is great tool, that should be used in the right scenarios to gain unfair advantage in your market. BillRun is a fine example for that.
Keep Performing,
Moshe Kaplan

Published at DZone with permission of Moshe Kaplan, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)


First Last replied on Mon, 2014/03/03 - 8:26am

 > You Don't have a DBA


Alex Staveley replied on Wed, 2014/03/05 - 10:12am

Nice article.  I have heard Web developers makes the point that since Mongo is more JSON friendly that is another argument to use it.  So when AJAX requests are sending and receiving if you use MongoDB, you get the option to persist and retrieve JSON very easily almost negating the need for a traditional server.  What do you think of that?

Sumendra Maharjan replied on Mon, 2014/06/09 - 11:48am

true, mysql and mongodb has their own territory, mongodb is new in the world of database and is rapidly adopted by complex web application in conjunction with nodejs. But in performancewise, mongodb wins as it is BSON based and no need of JOIN operator to query multiple tables. Mongodb is popular and easy to used because of it's simplicity and javascript friendly. Read Comparison Between MySQL and MongoDB 

Moshe Kaplan replied on Tue, 2014/06/10 - 5:08pm in response to: Alex Staveley

Hi Alex,

You are absolutly right!

The End to End JSON support is one of the best features of the MEAN platform (that includes MongoDB as its initial),

Keep Performing,

Moshe Kaplan

Moshe Kaplan replied on Tue, 2014/06/10 - 5:09pm in response to: Sumendra Maharjan

Hi Sumendra,

This is a good analysis. Please notice that you need to be careful in MongoDB data design to gain best performance,

Keep Performing,

Moshe Kaplan

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.