Search code examples
databaseinterfaceamazon-s3couchdbcloud

Common Interface for CouchDB and Amazon S3


I just read tons of material on Amazon's S3 and CouchDB. Maybe not enough yet though, so here is my question:

Both systems sound very appealing to me. CouchDB is distributed using the Apache License V2 and with Amazon's S3, you pay per stored megabyte and the traffic you generate. So there is a bit of a difference monetarily.

But from a technical point of view, from what I understood, both systems help you at storing unstructured data of arbitrary sizes (depending on the underlying OS as I understand from CouchDB).

I don't know how easy it would be to come up with a unified interface for both of them, so that you could just change your "datastore provider" as the need arises? Not having to change any of your code.

I also don't know if this is technically easily feasible, haven't looked at their protocols yet in great detail. But it would be great to postpone the provider decision to as late as possible.

Also this could be interesting for integration testing purposes: You could for example test against a local CouchDB instance and run your code against S3 for production use.

To formulate my question from a different angle: Is Amazon's S3 and CouchDB essentially solving the exact same thing or is this insane and I missed the whole point?

Updated Question

After Jim's brilliant answer, let me then rephrase the question to:

"Common Interface for CouchDB and Amazon SimpleDB"

And following the same lines of thinking, do you see a problem with a common interface between CouchDB and SimpleDB then?


Solution

  • Technically a common layer is possible. However I question that this would make sense. Couchdb has integrated map/reduce functions for your documents which are exposed as "views". I don't think SimpleDB has anything like that. On the other hand SimpleDB has query expressions which Couchdb has not. Of coure you can model those expressions as a view in Couchdb if you know your query at development time.

    Beside that the common function is not more than create/update/delete a key-document pair.