看着Basho Vimeo谈论Voxer,Matt告诉他说“阅读操作非常昂贵”。
当发生读取时,Riak使用某种仲裁来选择哪个节点将提供数据?
Riak是无主的,所以每个节点都应该包含相同的数据,不是吗? (显然是在最终一致性产生的不一致窗口之后)
由于
答案 0 :(得分:4)
你有点不理解他在说什么;他在谈论旋转磁盘以及从中读取磁盘的费用。这不是Riak特定的问题。
他们拥有大量无法容纳在内存中的数据。它甚至太大而不能轻易使用SSD,因为它们无法将它们塞进到服务器中,而是处于当前的大小限制(这就是为什么他们将远离SSD 从SSD转移到旋转磁盘上,因为他声明他的谈话)。
如果您没有使用内存数据库(Riak不是,除非您使用的是内存后端),正如Matt在其演讲的那一部分所述,您只是受到数字的限制如果你必须从磁盘读取,你的磁盘可以给你的iops。没有办法解决这个问题;你是从磁盘上读的。他继续说明你要缓存所有可以帮助的东西。
无论您在击中磁盘时使用的数据库平台如何,它都是如此有效;没有免费午餐:)
如果您正在使用Riak,并且您的数据集超出了可用内存量,那么当出现“缓存未命中”时,您将不得不从磁盘读取数据。如果您使用默认的Bitcask后端,Riak依赖于底层操作系统的磁盘缓存 - 其他后端可能会也可能不会执行此操作,而是执行自己的内存缓存。
至于你关于节点数据的问题...... Riak是无主的,最初基于Amazon Dynamo论文。我们使用一致的散列来围绕环分发数据,然后将副本写入相邻节点,由您配置的“N值”控制(这可以基于每个桶进行配置,甚至可以基于每个请求进行配置)。当您阅读时,使用相同的散列方法来查找数据“存在”的节点。
默认情况下,读取将从(n_val / 2)+ 1个节点读取,但您可以根据需要对此进行调整以满足您的需求。由于最终的一致性,无法保证这些节点上的数据在您执行读取的时间点是相同的,您可能需要根据业务逻辑执行冲突解决。据说可以理解,在正常操作下(例如,您没有网络分区或节点从关闭状态恢复),以毫秒为单位测量某些内容不一致的时间。
我们在网站上提供了关于这些内容的 ton 信息,并且非常努力地组织它以便轻松找到它们。特别是,您可能希望查看Riak - clustering数据的分发方式。