So I have been looking into the myriad of options for persistence with Node. There are a few options, all of which have various advantages and disadvantages.
The easiest solution would probably be some persistent storage like Amazon’s S3 or even my local file system ( and move the application from Heroku to my servers that are running on Windows Server ). There is nothing wrong with either solution, but I don’t really want to add more load to my servers with a technology I am still learn learning, least of all to minimize security issues. Also, I started thinking I wanted a bit more database functionality as I may be adding more functionality.
Once I start thinking Database + Node, that changes the landscape quite a bit. I am already running SQL Server, and amazingly enough Microsoft has been embracing and contributing to Node, including a driver for MS SQL Database with Node. However a) it is extremely early in development b) the syntax looks… wordy and crude, hopefully this improves massively, because accessing data values by offsets seems so very… retro.
In the world of Node, there seems to be 3 front runners:
All of them have strengths and weaknesses. All three are part of the NoSQL movement, but each approaches things quite differently.
MongoDB is another NoSQL option and to be honest, I forget why I didn’t go with it, at least not initially. I know I didn’t particularly want to install the underlying DB server, but it was at least supported on Windows.
CouchDB is what I ultimately went with. It is another NoSQL database, but it could probably be best considered a document store, that stores JSON documents ( and other files ). Given the nature of my application ( serving lots of files that don’t often change ), this is actually a very good thing. That said, my SQL trained brain is having a whole lot of difficulty dealing with the change in mindset. Storing “data” in documents that aren’t in fact documents seems horrifically unnatural to me. Worse, I am really having trouble coming to grips with the idea of not being able to delete versions! The idea that every time I change data it creates a new document, there is no update, only inserts. These seems horrifically inefficient, but I have to assume I am thinking about things wrong.
What ultimately sold me on CouchDB was the low barrier of entry in the form of Iris Couch, which is a cloud hosted Couch DB, with a very generous free option. Like Heroku, having someone else handle the heavy lifting is always enjoyable.
Being new to NoSQL, I am still going through the learning curve, so there is nothing to say I will stay with CouchDB, but I will say, I have gotten some impressive results very quickly. I really wish Redis was available on Windows, as I would probably use redis for “data” and Couch for documents. Anyone have alternative suggestions?
Totally Off Topic