All, I have been looking at a number of options for data storage for video game meta data (high score lists (daily, weekly, monthly, all time, etc...), other stats) and from what I can see I think the best option would be a NoSQL Database. The three major contenders so far are RavenDB, CouchDB, and MongoDB. I really like RavenDB however having to maintain one to multiple windows server can be a bit expensive and I don't feel that RavenDB/Windows would be much more stable than CouchDB/Linux or MongoDB/Linux to warrent the cost. I also don't quite know if I am going to developing the web infrastructure in ASP.NET <http://asp.net/> (if i did, it would make RavenDB the easy choice for me). That said there are a number of features of RavenDB that I really like and was wondering if it was CouchDB has some of these features in one way or another:
*Transactions *This is kind of important for me. An example would be sending scores to the database. When someone sends a score to the database, first I am going to store that score as its own entity. Then I am going to want to update the record that stores the total for the day, week, month, etc... If any one of these updates fail, I don't want to any of the updates to save (saving the insert is fine). Is there a way to do this for CouchDB? *Writing To Disk *I really like that RavenDB by default writes to disk as it makes sure that when data is sent to the server, the data will be there even if there is a power outage or some other event that happens that is out or your control. I would rather sacrifice a little write performance to maintain a much better chance that data is not lost. While that data I am storage is not super mission critical (like payment information), it is still pretty important to the players of the game and important if we want the meta game to be successful. Can CouchDB configured to write to disk instead of memory (or does it do that be default)? *Sharding *From my understanding, CouchDB supports replication but not sharding out of the box. Are there any good sharding solutions for CouchDB? *Auto Indexing *One thing that is really nice with RavenDB is that is has auto index where if you use an index that is not manually create a lot, RavenDB will automatically turn the temporary index into an real index for you. Can CouchDB do this? Any information about these features would be great.
