2016-08-17 83 views
1

我们有一个用例,我们需要用事务支持来编写/更新两个表。这是必需的,因为两个表都是相关的,所以它们不能不同步。 我们还讨论了合并两个表格,但这看起来不太可行。在Cassandra提供交易支持

AFAIK,Cassandra不提供交易支持。有没有任何技术/库可以做到这一点?

我们也在为此评估Couchbase。你认为couchbase会比Cassandra更好吗?

回答

1

在Couchbase中,您可能可以将RDMBS中三个不同表中的内容合并为一个JSON文档,因此不需要事务处理。不知道你的应用程序,我不知道这是一个好的JSON文档模型。将关系模式与NoSQL模式进行比较对于桔子来说是苹果。

在相关说明中,当您编写单个对象时,Couchbase非常一致。您的读/写总是会进入相同的活动vBucket(即碎片)。

2

Cassandra支持按键线性化和比较并设置(CAS)。这足以在客户端实现交易。

Percolator's transactions提供了可串行化的隔离级别。它们在业内颇为知名,并在亚马逊的DynamoDB transaction libraryCockroachDB database和Google的Pecolator系统本身中使用。 Percolator交易的step-by-step visualization可能会帮助您了解它们。

如果您期望争用并且可以处理Read Committed隔离级别,那么Peter Bailis的RAMP transactions可能适合您。我还创建了一个step-by-step RAMP visualization,这可能对理解有帮助。

第三种方法是使用补偿交易也称为saga模式。它在80年代后期在Sagas论文中有所描述,但与分布式系统的兴起更相关。请参阅Applying the Saga Pattern探讨灵感。