0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于LRU-K模型如何实现高效的元数据缓存?

冬至配饺子 来源:焱融科技 作者:焱融科技 2023-06-29 15:05 次阅读

对于存储来说,性能是绕不开的话题。当提到性能,可靠、高效的缓存策略是极其重要的。在计算机领域,缓存技术一般是指,用一个更快的存储设备存储一些经常用到的数据,供用户快速访问。用户不需要每次都与慢设备去做交互,因此可以提高访问效率。凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为缓存。缓存是提升访问性能的一个重要技术。缓存通过减少系统对数据库的访问量来提高系统性能。

存储层使用缓存的优势

目前缓存分为两种模式,一种是文件缓存,一种是内存缓存,文件缓存即缓存数据存放在服务器的硬盘空间中,内存缓存即缓存数据存放在服务器的内存空间中。在分布式文件存储中,客户端就能提供文件缓存,那为什么存储层还需要缓存呢?以下是存储层使用缓存的优势因素:

  1. 客户端资源有限,无法缓存海量的文件,而后端存储则可以线性扩展,可以缓存更多的数据。
  2. 后端存储可以根据整个存储情况提供更全面的缓存,比如说多个客户端同时访问热点。
  3. 分布式文件存储中,客户端散布各个终端节点,存储层的缓存可以保证一致性,更加安全可靠。
  4. 存储层可以根据我们数据在物理机上的分布特点,灵活调配缓存大小和策略。

存储层的缓存能力是提升分布式存储性能非常重要的部分,今天我们主要讨论利用 LRU-K 模型如何实现高效的元数据缓存?

LRU-K 模型的优势及运作模式

内存中的读写速度很快,基于此很多缓存技术都喜欢将数据存在内存中,但是内存空间是有限的,当到达一定量后需要将一些不常用的缓存数据删除或者落盘。缓存淘汰算法顺应而生,其中 LRU、LRU-K 就是比较常见的,目的都是为了高效地维护缓存数据。

LRU 的基本思想是如果数据最近被访问过,那么将来被访问的几率更高。我们实现 LRU 时,要维护一个队列,第一次访问的数据直接入队,重复访问的缓存,将该数据移至队尾,需要删除时删除队头的数据,这样就能保持队列越往后,数据再次被访问的可能性就越大。LRU 缓存变换之快这是它的优点也是它的缺点,因为只需要一次访问就能成为最新鲜的数据,当出现很多偶发数据时,这些偶发的数据也会被当作最新鲜的,从而成为缓存。但其实这些偶发数据以后并不会被经常访问到。在文件系统里,这个现象会更加明显,绝大部分文件/目录只在业务过程中单次去查询,而热点往往集中在少量文件。

LRU-K 的主要目的是为了解决 LRU 算法"缓存污染"的问题,其核心思想是将"最近使用过 1 次"的判断标准扩展为"最近使用过 K 次"。LRU-K 提供两个 LRU 队列,一个是访问计数队列,一个是标准的 LRU 队列,两个队列都按照 LRU 规则淘汰数据。当访问一个数据时,数据先进入访问计数队列,当数据访问次数超过 K 次后,才会进入标准 LRU 队列。标准的 LRU 算法相当于 LRU-1;LRU-K 具有 LRU 的优点,同时能够避免 LRU 的缺点,实际应用中 LRU-2 是综合各种因素后最优的选择,LRU-3 或者更大的 K 值命中率会高,但适应性差,需要大量的数据访问才能将历史访问记录清除掉。

目录的结构是树形的,这就决定了我们不能平等地去看待每一个目录,越接近树顶的目录,它的访问概率越高,访问频次越高,这些是最值得保存的数据。所以 LRU-K 更适合海量目录场景下的缓存淘汰。

采用 LRU-K 模型实现目录的缓存:

  1. 数据第一次被访问,加入到访问历史列表;
  2. 如果数据在访问历史列表里后没有达到 K 次访问,则按照一定规则(LRU)淘汰;
  3. 当访问历史队列中的数据访问次数达到 K 次后,将数据索引从历史队列删除,将数据移到缓存队列中,并缓存此数据,缓存队列重新按照时间排序;
  4. 缓存数据队列中被再次访问后,重新排序;
  5. 需要淘汰数据时,淘汰缓存队列中排在末尾的数据,即:淘汰“倒数第 K 次访问离现在最久”的数据。

1.PNG

存储层使用缓存加速元数据性能是一种有效的方法,它可以提高分布式文件存储的访问效率和一致性,同时减少对数据库的压力。LRU-K 模型是一种适合海量目录场景下的缓存淘汰算法,它可以避免缓存污染的问题,保证缓存数据的热度和新鲜度。焱融分布式文件存储 YRCloudFile 提供元数据服务的组件是 MDS,在海量目录百亿级文件规模场景下实现了高效的存储层的元数据缓存,能够提供卓越的性能和可靠性,满足用户对文件存储的各种需求,实测性能成倍提升,为用户提供了高性能、高可靠、高扩展的存储服务。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7151

    浏览量

    162000
  • 缓存器
    +关注

    关注

    0

    文章

    63

    浏览量

    11579
  • MDS
    MDS
    +关注

    关注

    0

    文章

    5

    浏览量

    8001
收藏 人收藏

    评论

    相关推荐

    LRU缓存模块最佳实践

    LRU(Least Recently Used)是一种缓存替换算法,它的核心思想是当缓存满时,替换最近最少使用的数据。在实际应用中,LRU
    的头像 发表于 09-30 16:47 551次阅读

    Redis的LRU实现和应用

    在编程中,计数器是一种基本但强大的工具,用于跟踪和管理数据和资源。本文将深入探讨不同类型的计数器的应用,从Redis的LRU(最近最少使用)缓存淘汰算法的实现,到如何在内存受限的环境中
    的头像 发表于 12-15 09:24 298次阅读

    【原创】Android开发—Lru核心数据结构实现突破缓存框架

    【原创】Android开发—Lru核心数据结构实现突破缓存框架回复即可获取下载链接[hide=d15]链接:http://pan.baidu.com/s/1c2BfjsW 密码:bta
    发表于 06-21 16:58

    《CDN 之我见》系列二:原理篇(缓存、安全)

    ://www.jianshu.com/p/036f82975f81《详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)》https://www.cnblogs.com/s-b-b/p/6047954.html
    发表于 06-12 16:59

    STM32向串口发送大量数据如何定义缓存区?

    用STM32向串口发送大量数据,我的想法是定义一个大的缓存区,等缓存区满了后一次性将缓存区的数据发送出去。
    发表于 06-09 10:49

    高速缓存/海量缓存的设计实现

    。  3、海量缓存的设计实现  本系统使用了两片25616bit容量的SRAM作为高速缓存,系统中的4个通道可同时存储每通道128点采样
    发表于 12-04 15:59

    架构设计应用级缓存回收策略

      缓存,笔者的理解是让数据更接近于使用者,目的是让访问速度更快。工作机制是先从缓存中读取数据,如果没有,再从慢速设备上读取实际数据并同步到
    发表于 01-14 17:08

    是否可以禁用SRAM2的数据缓存并保留SRAM 0和SRAM1的数据缓存

    我正在使用 S32k358 uC,我想禁用内存区域的数据缓存。在框图中,我看到树形 SRAM 块 SRAM0、SRAM1、SRAM2。是否可以禁用 SRAM2 的数据
    发表于 04-23 08:01

    新型数据缓存器的研制

    介绍一种以单片机为控制模型数据缓存器的硬件构成和软件设计方法,并给出部分程序段。其使用简便, 可靠性高, 功能齐全, 是在通信行业中被广泛使用的设备。
    发表于 04-14 17:57 31次下载

    高速数据采集系统中高速缓存与海量缓存实现

    探讨了高速数据采集系统中高速采样缓存的重要性和实现途径,阐述了基于ADSP-21065L的并行多通道数据采集板上高速采样缓存的设计与电路结构
    发表于 04-23 17:08 23次下载

    基于OpenFlow分组缓存管理模型

    基于OpenFlow的软件定义网络(SDN)技术通过在OpenFlow交换机中建立有效的缓存模型,能够大幅减少控制平面和数据平面的通信负载,但整条数据流的
    发表于 02-26 15:35 1次下载
    基于OpenFlow分组<b class='flag-5'>缓存</b>管理<b class='flag-5'>模型</b>

    适用于命名数据网络的缓存内容分类模型

    中的 Diffserv模型,提出一个适用于NDN的缓存内容分类模型,并给出同时考虑内容分类、路由器本地流行度和内容下载时延的概率缓存算法 Diffcache。实验结果表明,该算法可
    发表于 05-12 11:33 4次下载

    设计并实现一个满足LRU约束的数据结构

    LRUCache(int capacity)` 以 **「正整数」** 作为容量 `capacity` 初始化 `LRU` 缓存
    的头像 发表于 06-07 17:05 730次阅读
    设计并<b class='flag-5'>实现</b>一个满足<b class='flag-5'>LRU</b>约束的<b class='flag-5'>数据</b>结构

    Redis的LRU与LFU算法实现

    Redis是一款基于内存的高性能NoSQL数据库,数据缓存在内存里, 这使得Redis可以每秒轻松地处理数万的读写请求。
    的头像 发表于 07-11 09:48 476次阅读
    Redis的<b class='flag-5'>LRU</b>与LFU算法<b class='flag-5'>实现</b>

    redis的lru原理

    Redis是一种基于内存的键值数据库,它使用了LRU(Least Recently Used)算法来进行缓存数据淘汰。LRU算法的核心思想
    的头像 发表于 12-05 09:56 314次阅读