An alternative to Windows Azure tables from the cloud
I am developing a .NET application that needs to run on both Azure and regular Windows servers (2003). It has to store several GB of data, and SQL Azure is too expensive for me, so I use Azure tables in the cloud version. Can you recommend a storage solution that will run on standalone servers and have APIs and behavior similar to Azure tables? From what I've seen, AppFabric Server doesn't include tables.
a source to share
If you think of what Windows Azure Table Storage is, it is not a key-value-based relational database accessible through the REST API. Download this document on Windows Azure Database and NoSQL Details.
If I was in your situation, my approach would be to find something similar to Azure Table Storage that I can access via REST and have a similar accessibility API. So if you try to find a similar database to run on a machine, you really need to look for:
- Base key value pair
- Support for basic operations: add, delete, insert, change an object
- Key access based on sections and row based on strings
- RESTful interface for connection
If you want to try something you can check:
- DBreeze (C # NoSQL DB based keyed database) I just saw this and looked exciting.
- Googles LevelDB (Keyed base database, open source and available on Windows) I have no idea about the API
- Redis (great keyed database, but not sure about Windows and API compatibility)
Below is a list of key / value databases without additional indexing tools:
- Berkeley DB
- HBase
- MemcacheDB
- Redis
- SimpleDB
- Tokyo Cabinet / Tyrant
- Voldemort
- Riak
If none of these work, you can get any of the open source db and modify to work for your requirement, then make it available to others as your community contribution.
ADDED
You can now use Windows Azure Virtual Machine to run any Key-Value pair on Linux or Windows Machine and connect to your application.
a source to share
I'm not sure which storage solution is recommended to recommend, but almost any database solution will work as long as you write an interface to abstract away all the storage code. Then write down implementations of this interface for storing Azure tables and any other database you want to use on a non-cloud server.
You have to do this one way or another so that your code is not tightly coupled with the Azure Table Storage APIs.
If you combine coding with this interface with an IoC container, then one line of code or one configuration parameter will allow you to switch between data implementations based on the platform the code is running on.
a source to share