transactions - 确保 riak 的正确性?

标签 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 中的评论相关联,因为它没有交易?

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

最佳答案

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/

相关文章:

javascript - firebase 事务和 if-then-else 行为

asp.net-mvc - 使用 Asp.Net MVC 进行自动交易的最佳方式是什么?

mysql - 从 mysql 事务中获取结果集

grails - 用于 Grails 插件的 Riak

python - 在 python-riak 客户端 l 中将 erlang 模块和 erlang 函数发送到 mapreduce 面的确切方法是什么

http - 通过 cURL 创建 Riak 桶

mysql - 关于带有 order by 和 limit 的 select * 的可重复读取

mysql 事务隔离级别示例

python - 带有 Protocol Buffer 的 Riak Python 客户端的超时问题

database - 在 Riak 中存储二进制数据的缺点?