5

看来您不能在 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 中的评论相关联,因为它没有交易?

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

4

1 回答 1

6

Riak 是一个最终一致的系统,设计为可写,没有原子性的概念;没有原子计数器或事务。

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

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

听起来您想查看我们的二级索引(如果我理解您的情况;您需要一个新commentId的“喜欢”这一事实在不了解更多信息的情况下有点令人困惑)。您将创建一个二级索引,指向您的评论正文,当您进行存储时,该索引与正文本身一起发送。这至少解决了一半的问题。

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

如果您有兴趣并想讨论可能的设计方法,请在riak-users 邮件列表上联系我们 - 我们所有的工程师都阅读了它并且总是很乐意回答问题。

于 2012-09-08T17:56:09.243 回答