Question

I currently develop an application hosted at google app engine. However, gae has many disadvantages: it's expensive and is very hard to debug since we can't attach to real instances.

I am considering changing the gae to an open source alternative. Unfortunately, none of the existing NOSQL solutions which satisfy me support transactions similar to gae's transactions (gae support transactions inside of entity groups).

What do you think about solving this problem? I am currently considering a store like Apache Cassandra + some locking service (hazelcast) for transactions. Did anyone has any experience in this area? What can you recommend

Was it helpful?

Solution

There are plans to support entity groups in cassandra in the future, see CASSANDRA-1684.

If your data can't be easily modelled without transactions, is it worth using a non transcational database? Do you need the scalability?

The standard way to do transaction like things in cassandra is described in this presentation, starting at slide 24. Basically you write something similar to a WAL log entry to 1 row, then perform the actual writes on multiple rows, then delete the WAL log row. On failure, simply read and perform actions in the WAL log. Since all cassandra writes have a user supplied time stamp, all writes can be made idempotent, just store the time stamp of your write with the WAL log entry.

This strategy gives you the Atomic and Durable in ACID, but you do not get Consistency and Isolation. If you are working at scale that requires something like cassandra, you probably need to give up full ACID transactions anyway.

OTHER TIPS

You may want to try AppScale or TyphoonAE for hosting applications built for App Engine on your own hardware.

If you are developing under Python, you have very interesting debugging options with the Werkzeug debugger.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top