我目前正在开发托管在 google app engine 上的应用程序。然而,gae 有很多缺点:它很昂贵并且很难调试,因为我们无法附加到真实实例。
我正在考虑将 gae 更改为开源替代品。不幸的是,现有的令我满意的 NOSQL 解决方案都不支持类似于 gae 的事务(gae 支持实体组内部的事务)。
您如何看待解决这个问题?我目前正在考虑像 Apache Cassandra 这样的商店 + 一些用于交易的锁定服务 (hazelcast)。有没有人在这方面有经验?你能推荐什么
最佳答案
future 有计划支持cassandra中的实体组,见CASSANDRA-1684 .
如果您的数据在没有事务的情况下无法轻松建模,是否值得使用非事务数据库?您需要可扩展性吗?
在这个 presentation 中描述了在 cassandra 中进行类似事务的标准方法,从幻灯片 24 开始。基本上,您编写的内容类似于 WAL log。进入 1 行,然后对多行执行实际写入,然后删除 WAL 日志行。失败时,只需读取 WAL 日志并执行操作即可。由于所有 cassandra 写入都有用户提供的时间戳,因此所有写入都可以是幂等的,只需将写入的时间戳与 WAL 日志条目一起存储即可。
此策略为您提供了 ACID 中的 Atomic 和 Durable,但您没有获得 Consistency 和 Isolation。如果您正在大规模工作,需要像 cassandra 这样的东西,您可能无论如何都需要放弃完整的 ACID 事务。
关于google-app-engine - 具有事务的分布式存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9306987/