Transactions 确保riak的正确性?

Transactions 确保riak的正确性?,transactions,riak,Transactions,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 commentI

看起来你不能在里亚克做交易。如何确保数据正确

假设我们想插入一条注释。在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中,我将在注释表中插入一个新行,其中包含文本和post id。 两者都使用多个语句。如何插入评论正文并将帖子与riak中的评论关联,因为它没有事务


另一个问题是,如果我修改帖子。如何使用标签更新帖子和帖子标签列表Riak是一个最终一致的系统,设计为写可用,没有原子性概念;没有原子计数器或事务

编辑:我们在Riak 1.4中发布了使用CRDT的计数器。详情请参阅

Riak使用的方法基于Amazon Dynamo纸张,使用矢量时钟解决冲突;这是一个读取/修改/写入循环,在后续读取期间执行任何冲突解决。在任何给定的时间,对于给定的键,您可以有多个值,这些值在执行提取时都将返回

听起来你想看看我们的(如果我理解你的场景;你需要一个新的
commentId
作为“like”的事实有点让人困惑,不知道更多)。您将创建一个二级索引,该索引指向您的注释正文,当您进行存储时,它将与正文一起发送。这至少解决了问题的一半

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


如果您感兴趣并想讨论可能的设计方法,请在上与我们联系-我们所有的工程师都阅读了它,并且总是乐于回答问题

我对里亚克了解不多,只是简单地看了一下。当我知道基本知识或更多的时候,我会在那里发布,但不是现在。我想大致了解一下它适用于什么,因为我发现redis不适合作为db,因为它必须能够适应内存中的所有内容。我对向量时钟一无所知,但你刚才说一个键可以有多个值,这听起来很奇怪,但我会假装riak非常有效。那么riak的设计目的是让应用程序完成所有的一致性逻辑?有趣的是我读了一些书。我有点困惑,因为示例显示将allow_mult设置为true。那么,如果我有一个写冲突并且是错误的东西会发生什么呢。。。听起来好像什么东西都有vclock?似乎您正在使写入高可用性。我可以看到在那里的使用和权衡。我可以想象如何根据我的需要解决和纠正问题,但我无法想象/思考如果我没有设置multis,并且它是错误的,会发生什么?一个会覆盖另一个吗?它会失败吗?如果它失败了,我可以看到如何处理(但我必须撤消其他写入),但是如果它没有失败,并且一个作业完成了,而另一个作业在它之后启动并完成了一段时间,并且重写了数据,我看不到会发生什么。