确保riak的正确性?

时间:2012-09-08 14:39:27

标签: transactions riak

看来你不能在riak做交易。如何确保数据正确?

假设我们想插入评论。在redis我会做

commentId=incr commentCount
multi
SET comment_post:commentId postId //for later use when we flag comments. We'll need to know where in the db it is
RPUSH post_comment:postId binaryValue //contains commentId in it + comment body
exec

在sql中,我会在注释表中插入一个带有文本和帖子ID的新行。 两者都使用了多个语句。我如何插入评论正文并将帖子与riak中的评论相关联,因为它没有交易?

另一个问题是如果我修改帖子。如何更新帖子并使用该标签更新帖子的标签列表

1 个答案:

答案 0 :(得分:6)

Riak是一个最终一致的系统,旨在提供可写性,并且没有原子性概念;没有原子计数器或事务。

编辑:我们在Riak 1.4中使用CRDT发布了计数器。有关详细信息,请参阅Counters in Riak 1.4

Riak使用的方法基于Amazon Dynamo论文,并使用矢量时钟来解决冲突;它是一个读/修改/写周期,在后续读操作期间执行任何冲突解决。在任何给定时间,您可以为给定的键提供多个值,这些值在执行提取时都将返回。

听起来就像你想看看我们的secondary indexes一样(如果我理解你的情景;你需要一个新的commentId来表示'喜欢'如果不了解更多,有点混乱)。您将创建一个指向您的注释主体的辅助索引,该索引在您执行存储时与主体本身一起发送。这解决了问题的至少一半。

你如何得到你的commentId有点棘手。你不能使用全局原子计数器,因为我们没有它们。您的设计需要不依赖于顺序ID(可能生成UUID?)并且可能使用我们的links

如果您有兴趣并希望讨论可能的设计方法,请在riak-users mailing list上联系我们 - 我们所有的工程师都会阅读它,并且很乐意回答问题。