Are there any in-memory NoSQL databases

nosqlreplicationscalability

Given that NoSQL databases are designed to support horizontal scalability by throwing in more servers, are there any that are designed to do entirely without persistent disk storage?

I'm looking at an application that requires horizontal scalability but that also needs to encrypt any data at rest. That could end up meaning pulling a lot of the data from the NoSQL database into an in-memory cache like memcached. That got me wondering: Is there any single product that had the scale and fault-tolerance characteristics of a NoSQL database but operated solely in memory?

Best Answer

The issue with storing your database in memory is if you have any sort of memoery issue or server has to be restarted or anything of that issue all your memory will get flushed.

That is the reason people don't store their database in memory.

Now, there are caching tools which are in-memory and can work as a very simple database like memcached. That may meet your needs. If you look in to tmpfs and ramfs you can create a folder that exists in memory and move your files in there normally.

So, if you are working with MongoDB, mysql or whatever you work with, you can have the data folder live in the RAM folder. This will give the database super fast read and writes. Everything will be really fast. You will be limited to how much RAM you have minus the size of your OS and other things running.

Also, just be careful: MongoDB likes to store writes in memory until the disk has a chance to write, it so you may want to turn that feature off because it will be the same speed.

My recommendation is to work with memcached and then mix it with a normal database that lives on disk. The concept is done with PHP sessions on some systems.

http://mickeyben.com/2009/12/30/using-nginx-as-a-load-balancer.html

The basic way it works is, if your record is found in memcached, then it will not check the database. If it is not found, then do three(3) things:

  1. check the db
  2. send the data to memcached
  3. send the data to calling function

:)