2012-07-21 100 views
1

看着Basho Vimeo谈论Voxer时,Matt告诉“阅读操作真的很贵”。是读取操作昂贵吗?

当读取发生时,Riak使用某种Quorum来选择哪个节点将提供数据?

Riak是无主的,所以每个节点都应该包含相同的数据,不是吗? (不一致窗口之后,显然,这是来自最终一致性)

感谢

回答

4

你稍不明白他在说什么;他正在谈论旋转磁盘和读取它们的费用。这不是一个Riak特定的问题。

他们有大量的数据无法放入内存。它容易使用SSD太大了,因为它们无法将它们足够地塞进服务器中,因为它们当前的大小限制(这就是为什么他们将从SSD中移出,并在他的讲话中声明时回到旋转磁盘上)。

如果你没有使用内存数据库(Riak不是,除非你使用内存后端),正如马特在他的讲话部分所说的那样,你只是受限于如果您必须从磁盘读取数据,您的磁盘可以为您提供的iops数量。这是没有办法的;你正在读取磁盘。他继续说,你想缓存一切你可以帮助的。

这几乎是如何工作的,无论您使用何种数据库平台来打击磁盘;没有免费午餐:)

如果您使用的是Riak,并且您的数据集超出了可用内存量,那么当出现“缓存未命中”时,您将不得不从磁盘读取数据。如果您使用默认Bitcask后端,则Riak依赖底层操作系统的磁盘缓存 - 其他后端可能会或可能不会这样做,而是执行其自己的内存缓存。

至于你在节点上的数据问题...... Riak是无主的,最初基于亚马逊Dynamo纸张。我们使用一致性哈希来将副本周围的数据与副本一起分发,然后写入相邻节点,由您配置的“N值”控制(并且可以基于每个存储桶配置,甚至基于每个请求)。当你读到这个相同的散列方法被用来找到数据“生活”的节点。

默认情况下,读取将从(n_val/2)+ 1个节点读取,但您可以根据每个请求调整此值以满足您的需求。通过最终的一致性,不能保证这些节点上的数据在您读取的时间点上是相同的,并且您可能需要根据业务逻辑执行冲突解决方案。据说这样理解,在正常操作下(例如,您没有网络分区或节点正在恢复),以毫秒为单位的时间量是不一致的。

我们有一个有关这些信息在我们的网站上可用,并非常努力地组织它,所以很容易找到。特别是你可能想看看Riak - clustering数据分布的方式。

+0

Brian,非常感谢! Iam考虑在我的项目中使用Riak,我真的不明白Matt所说的。 – CHAPa 2012-07-22 00:18:52

+0

R =通过读操作访问数据对象时所联系的节点数量,对不对?当R = 2并且这个节点有不同的数据时会发生什么!读取操作将失败? – CHAPa 2012-07-28 10:43:16

+0

@CHAPa - 不,你会在客户端进行冲突解决,并希望将解析的对象写回Riak。如果无法读取“R”节点(例如,它们已关闭或无法访问),则只会发生故障 – 2012-07-28 15:36:14

相关问题