《解读NoSQL》——2.3 策略地使用RAM、SSD和磁盘提升性能

释放双眼,带上耳机,听听看~!

本节书摘来自异步社区出版社《解读NoSQL》一书中的第2章,第2.3节,作者: 【美】Dan McCreary(丹•麦克雷) , Ann Kelly(安•凯利),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 策略地使用RAM、SSD和磁盘提升性能

NoSQL系统如何通过不同类型的存储介质来提升系统性能?通常,传统的数据库管理系统不会关注存储管理方面的选项。与之不同,NoSQL系统被设计成使用最少的昂贵的资源提供快速的用户响应。

如果你对数据库架构不熟悉,那么分清查询从RAM(易失的随机读取记忆体)取得的数据和从磁盘驱动器取得的数据之间存在的性能差异,无疑是一个良好的开始。大多数人都知道,当他们关闭了工作了漫长一天的电脑,在RAM中的数据都会消失并且在下次使用时需要重新加载。而保存在固态硬盘(SSD)和机械硬盘(HDD)中的数据将会一直存在。我们还知道RAM的读取速度大大超过硬盘的读取速度。假设1纳秒近似等于0.3米,这是由于光通过0.3米所消耗的时间实际上近似等于1纳秒。那意味着,RAM距离你是3米,而磁盘驱动器与你的距离达到3000米,即3千米。如果采用固态硬盘,访问速度还是会低于RAM,但是已经明显超过了机械硬盘(如图2-5所示)。

《解读NoSQL》——2.3 策略地使用RAM、SSD和磁盘提升性能

图2-5 为了得到访问硬盘获取数据和访问RAM缓存获取数据之间的存在显著差异的感性认识,先想想从你家后院取一样东西(RAM)的时间。再想想驱车去你的邻居处拿取(SSD)的时间,最后再想想如果你在芝加哥要去洛杉矶拿取(HDD)的时间。该图显示了从本地缓存返回查询结果的效率大大优于需要读取HDD的开销高的查询

让我们来到伊利诺伊州的芝加哥。如果你想要从RAM获取某些东西,通常就好像你在你家后院找东西;如果你正好把东西存储在固态硬盘中,就好像顺路去某个地方拜访一下你的邻居;但是如果你想从硬盘驱动器中获取某些东西,就好像需要去离这3000米的加州洛杉矶市。如果可以避免,你一定不想经常来一次这样的往返旅行。

与其想尽各种办法往返洛杉矶,不如在邻居家先看看他们是否已经有你需要的数据了。如今在芯片中完成一次计算所耗费的时间就好像光穿过芯片那样短暂。当等待你所需要的数据从洛杉矶返回时,你完全可以完成上万亿次的计算。这就是为什么计算散列值比访问磁盘快得多,你拥有越多的RAM,那么你需要进行长途往返旅行的可能性也就越低。

搭建响应更加快速的系统的关键在于将所需要的信息尽可能多地保存在RAM中,并且检查本地服务器是否保存有副本。这种本地的快速数据存储经常被称作RAM缓存或者是内存缓存。但是,搭建一个这样的系统并决定某些数据是否需要存储在缓存中是一个难题。

许多内存缓存对缓存中的每一块内存都采用简单的时间戳进行标记,以此作为保存最近使用的对象的依据。当内存被占满,时间戳经常被用于判断内存中最老的对象并将其覆盖。一个更精确的视图能够计算出重新生成数据集并将其保存至内存所耗费的时间或者资源。这个“成本模型”使得代价更高的查询结果保存在RAM中的时间长于那些能够快速生成出来的简单条目。

有效利用RAM缓存的关键在于对下面的问题作出有效的判断,“我们以前运行过这个查询作业吗?”或者类似地,“我们以前见过这个文档吗?”一致性散列算法(consistent hashing)可以解答这个问题散列,它能让你知道一个对象是已经被保存至缓存,还是需要从SSD、HDD中重新获取。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索