看来您不能在 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 中的评论相关联,因为它没有交易?
另一个问题是如果我修改帖子。我如何更新帖子并使用该标签更新帖子的标签列表
最佳答案
Riak 是一个最终一致的系统,设计为可写,没有原子性的概念;没有原子计数器或事务。
编辑:我们在 Riak 1.4 中使用 CRDT 发布了计数器。详情见Counters in Riak 1.4
Riak 使用的方法基于 Amazon Dynamo 论文,并使用矢量时钟来解决冲突;这是一个读/修改/写周期,在后续读取期间执行任何冲突解决。在任何给定时间,您都可以为给定键设置多个值,这些值将在执行提取时全部返回。
听起来您想看看我们的 secondary indexes (如果我理解您的情况;事实上,您需要一个新的 commentId
来表示“喜欢”,这在不了解更多信息的情况下有点令人困惑)。您将创建一个二级索引,指向您的评论正文,当您进行存储时,该索引与正文本身一起发送。这至少解决了一半的问题。
您如何获得您的 commentId
有点棘手。你不能使用全局原子计数器,因为我们没有它们。您的设计要么不依赖于顺序 ID(可能生成 UUID?),要么使用我们的 links ?
如果您有兴趣并想讨论可能的设计方法,请联系我们 riak-users mailing list - 我们所有的工程师都阅读了它并且总是乐于回答问题。
关于transactions - 确保 riak 的正确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12331686/