1

看着 Basho Vimeo 谈论 Voxer,Matt 说“读取操作真的很昂贵”。

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

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

谢谢

4

1 回答 1

4

你有点不明白他在说什么;他说的是旋转磁盘和读取磁盘的费用。这不是 Riak 特定的问题。

他们有大量无法放入内存的数据。它甚至太大而无法轻松使用 SSD,因为它们无法在当前大小限制下将足够多的 SSD 塞入服务器(这就是为什么他们SSD 转移到旋转磁盘上,正如他在演讲中所说的那样)。

如果你没有使用内存数据库(Riak 不是,除非你使用的是内存后端),正如 Matt 在他演讲的那部分所述,你只是受限于你的 iops 数量如果您必须从磁盘读取,磁盘可以给您。没有办法解决这个问题。你正在从磁盘读取。他接着说,你想缓存所有你能提供帮助的东西。

无论您在访问磁盘时使用的是什么数据库平台,它几乎都是这样工作的;没有免费午餐:)

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

至于您关于节点数据的问题...... Riak 是无主的,最初基于 Amazon Dynamo 论文。我们使用一致的散列在环周围分布数据,然后将副本写入相邻节点,由您配置的“N 值”控制(这可以基于每个存储桶甚至每个请求进行配置)。当您阅读时,使用相同的散列方法来查找数据“存在”在哪个节点上。

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

我们的网站上有大量关于这些东西的信息,并且非常努力地整理这些信息,以便于查找。特别是,您可能希望查看Riak - 集群以了解数据的分布方式。

于 2012-07-21T20:40:08.600 回答