`
java--hhf
  • 浏览: 308741 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

使用SSD解决10亿条元数据读写问题

阅读更多

一、问题描述

将10亿个元数据通过SSD 存储起来,能够实现快速的存和取

 

二、解决思路

2.1 联合使用三级存储设备

DRAM:作为数据缓存区

SSD : 作为热数据存储区

HDD :作为冷数据存储区

2.2 设计文件存储格式

 

2.2.1关键字解释

头结构:包含有一个Hash表,用以维护元数据项的标识符在元数据缓冲区中偏移量,通过这个Hash表,系统可以迅速在元数据缓冲区中定位所需元数据项

元数据缓存区:是一个可追加的结构,新来的元数据保存在上一个元数据后面,缓存区满了就往SSD中的元数据存储单元写,然后清空缓存区

读缓存块用于读数据的时候,做缓存用

元数据索引单元:包括了一个Bloom  Filter文件(纪录每块元数据缓存区内的元数据)和一个无效元数据项标识符链表

元数据文件:由多个元数据存储单元组成,每个单元内有许多元数据项,其结构与DRAM中的元数据缓存区一致

元数据索引文件:保存的就是每个元数据存储单元的索引信息,由DRAM内的元数据索引单元拷贝而来

元数据日志文件:存放在HHD上面的冷元数据单元

2.2.2 机制介绍

首先元数据由外到内,最开始来到DRAM内的元数据缓冲区;

在头结构纪录下标识符和偏移量,通过Bloom Filter 在元数据索引单元内登记

如果缓冲区数据满了,将元数据缓冲区数据迁移到元数据存储单元中去,然后清空缓冲区;同时还将相应的元数据索引单元内的内容备份到元数据索引文件,且不删除索引单元的内容,起将一直在内存中

在SSD上的元数据存储单元做周期的垃圾回收,清除剩余空间

执行居于热度的数据迁移线程,将元数据存储单元内的数据迁移到缓冲区,或者元数据日志文件

2.3 元文件写机制

 
    其中的关键字和上部分介绍的数据存储格式关键字一致

机制介绍:

【1】新元数据项append到元数据缓冲区

【2】在元数据索引单元内的Bloom Filter表内做元数据内容登记

【3】如果缓冲区满了,数据写回到SSD,其中写的时候查询无效元数据项ID表,对于无效的数据,直接丢弃,并将元数据索引单元写入元数据索引项中

2.4 元文件读取机制

【1】首先查找缓冲池中是否含有所要找的元数据,如果有则直接返回,读取操作结束,否者继续执行

【2】缓冲池没有则需要到元数据单元或元数据日志文件上查找,其将通过Bloom Filter找到所属于那个数据单元,

【3】然后将数据单元读入到DRAM的写缓存中

【4】根据头结构快速的定位到元数据

重点介绍如何通过Bloom Filter来找到元数据单元位置:

创建一个64叉树,每一个数据单元的数据索引单元的Bloom  Filter表作为叶子节点,树的深度不超过2,非叶子结点的Bloom  Filter表为各叶子节点Bloom Filter表做或运算的结果。

64个Bloom Filter构成一个Bloom Filter Group、

64个Bloom Filter Group构成一个Bloom Filter Tree、

维护一张链表,记录下多个Bloom Filter Tree的根节点。

本机制可以使原来一个一个搜索的时间复杂度O(n),降低为O(logn)

搜索时,先快速的定位到哪个Tree下,再定位到哪个Group下,再遍历到目的原文件存储单元

2.5元文件修改机制

【1】先找到将要被修改的元数据

【2】在该元数据缓冲区中插入一条已经修改好的新元数据

【3】标记元数据索引单元中旧元数据为无效数据

【4】下次元数据缓冲写回时直接将旧数据丢弃 

2.6获得元文件存储单元热度机制

记录k表示该元数据存储单元在该时间段内被访问的次数

记录num表示该时间段内上层总共发出的元数据读请求个数

k/num表示在某时间段内该元数据存储单元的访问次数占总访问次数的比例,访问比例越高,表明在该时间段内该元数据存储单元的访问越频繁,该元数据存储单元的热度就越大

使用最近一段时间内的访问比例来衡量数据热度,因为该值能够准确反映数据在最近一段时间的访问频度,避免很久之前的访问对当前热度的影响.

加入对之前访问热度的考虑,防止某些元数据存储单元短期内访问频度的剧烈变化所造成热度的波动

系统会周期性迭代计算每个元数据存储单元的热度,使热度能够反映当前数据的访问情况这种热度判定算法综合数据的访问频率和最近访问时间两方面的因素判定更加准确、合理,且在实现简单,时间和空间开销较小. 

2.7 数据迁移机制


开启一个线程执行迁移指令

处理到当前的元数据单元时,判断其热度值大小,热度值有一个范围区,如果小于最小值,则移入HHD,如果大于最大最则移入DRAM缓冲区

2.8 空间周期性回收机制

回收无效元数据项占用的SSD空间对元数据的更新操作采用异地更新的策略会造成元数据存储单元中含有无效的元数据项

迁移线程会周期性回收那些无效元数据项比例超过50%的元数据存储单元,将其中有效的元数据项写入元数据缓冲区中,并对该存储单元做上标志.

当迁移到该元数据存储单元时,系统不需要判定其访问热度直接回收其占用的空

三、相关的技术点

3.1 什么是HDD,什么是SSD,它的优点是什么?

HDD是基于磁盘存储架构

SSD是Solid State Drive固态硬盘

寿命:Flash memory有擦写次数限制,大量小粒度随机写操作很影响使用寿命

优点:高带宽,低时延

3.2 使用SSD的几种类型:

① SSD作HDD缓存(速度加快,随机读写次数很多,影响SSD寿命)

② HDD作SSD写缓存(速度加快,容量受限制于SSD)

③ 数据分别存储在SSD和HDD上(速度加快,SSD寿命受影响)

④ 针对特定负载所设计的SSD存储系统(速度加快,依赖于负载特征)

3.3 Bloom filter 布隆过滤器

布隆过滤器用于检索一个元素是否在一个集合中

布隆过滤器是1970年由布隆提出的。实质上是一个很长的二进制矢量和一系列随机映射Hash函数

原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。

优点,相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数(O(K))。另外, 散列函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势;布隆过滤器可以表示全集,其它任何数据结构都不能.

缺点误算率是其中之一。随着存入的元素数量增加,误算率随之增加。但是如果元素数量太少,则使用散列表足矣。

判断结果在集合里面的不一定在集合内

判断结果不在集合里面的一定不在集合内

另外,一般情况下不能从布隆过滤器中删除元素

  • 大小: 117 KB
  • 大小: 91.3 KB
  • 大小: 91.5 KB
0
1
分享到:
评论
1 楼 ljbupc 2014-12-15  
FB的flash cache?

相关推荐

    SSD 固态硬盘测试读写性能软件AS SSD Benchmark

    固态硬盘(SSD)是现代计算机存储...无论你是普通用户还是专业人士,了解SSD的读写性能对于优化系统性能和选择存储解决方案都至关重要。通过AS SSD Benchmark,你可以直观地了解SSD的实际表现,从而做出明智的决策。

    超级U盘SSD读写可靠性测试工具 v1.8.zip

    urwtest通过持续的读写测试,可以帮助用户发现潜在的问题,如随机读写性能下降、数据完整性问题等,从而提前预防可能出现的数据丢失风险。 U盘检测工具同样重要,因为U盘作为便携式存储设备,经常面临不同的使用...

    ssd磁盘读写测试工具

    SSD磁盘读写测试工具的主要用途是评估固态硬盘(SSD)的读写速度和随机I/O性能。这些工具可以提供用户友好的界面和各种测试模式,以评估硬盘驱动器性能的不同方面。具体来说,SSD磁盘读写测试工具的主要功能包括: ...

    AS SSD Benchmark固态硬盘4k对齐 读写测试

    如果4K未对齐,SSD的读写性能会显著下降,可能导致系统响应变慢,文件传输速度降低等问题。AS SSD Benchmark提供了一个简便的方式来检测这一情况,同时它还能测试SSD的读写速度,这是衡量SSD性能的重要指标。 读写...

    卡耐基梅隆ssd7exercise10

    《卡耐基梅隆ssd7exercise10》是一个与计算机科学相关的...通过Exercise10的实践,学生将不仅深化对SSD理论知识的理解,还能锻炼实际问题解决能力,为未来在数据中心管理、存储解决方案设计等领域的工作打下坚实基础。

    SSD5 Recommended Exercise 2 数据结构

    SSD5 Recommended Exercise 2 数据结构SSD5 Recommended Exercise 2 数据结构SSD5 Recommended Exercise 2 数据结构SSD5 Recommended Exercise 2 数据结构SSD5 Recommended Exercise 2 数据结构SSD5 Recommended ...

    卡耐基 SSD7 exercise 10 答案

    固态硬盘(SSD)是现代计算机存储系统中的重要组成部分,它使用闪存芯片来存储数据,相比传统机械硬盘(HDD),具有更快的读写速度、更低的功耗和更好的抗震性能。 在"卡耐基 SSD7 exercise 10"中,我们可能探讨了...

    SSD1322数据手册

    "SSD1322数据手册" SSD1322是 Solomon Systech 公司开发的一款高性能的OLED/PLED段/公共驱动器控制器,主要用于显示器件的驱动和控制。该芯片具有480 x 128点阵图模式、Dot Matrix高功率 OLED/PLED段/公共驱动器...

    SSD-Z.rar下载使用

    使用SSD-Z,你可以定期检查SSD的健康状况,及时发现并解决问题。此外,通过性能测试,你可以对比不同SSD的性能差异,或者在升级硬盘后查看性能提升。总之,SSD-Z是一款实用的工具,无论是对普通用户还是专业技术人员...

    Ceph优化:用SSD做缓存池方案详解.docx

    3. 解决设备忙碌问题:使用`dmsetup`工具查看谁在占用设备,找到`ceph-`开头的设备信息,删除该设备信息,以释放设备。 4. 设置OSD类别:使用`ceph osd crush`命令设置OSD类别为`ssd`,以区别于其他类型的OSD。 5. ...

    ssd7全套答案

    在IT行业中,固态硬盘(SSD)是计算机存储设备的一种,以其高速度、低延迟和高耐用性著称,相较于传统的机械硬盘(HDD),SSD在数据读写速度上有显著优势。 在学习资源方面,"ssd7全套答案"可能是一个针对SSD技术、...

    38:SysTools SSD Data Recovery是一款专业易用效果理想的ssd固态硬盘数据恢复软件.rar

    综上所述,SysTools SSD Data Recovery是一款多用途的数据恢复解决方案,适用于各种存储设备,特别是固态硬盘。它能应对各种数据丢失情况,如误删除、格式化或设备损坏等,并且界面友好,操作简单,效果显著。对于...

    SSD5 exercise 3答案

    在SSD5的练习3中,可能需要理解并应用上述知识点进行分析,比如比较不同类型的SSD、评估性能、讨论如何优化SSD的使用,或者解决与SSD相关的故障问题。通过解决这些问题,学生能够深入理解SSD的工作机制,为实际的...

    SSD2825 & SSD2828 用户手册和驱动代码

    4. **故障排查**:提供了一些常见问题的解决方案和故障排除步骤。 **驱动代码分析** `ssd2828.c` 文件很可能是针对SSD2828的驱动程序源代码,包含了初始化设置、数据传输和控制命令的函数。开发者可以通过阅读这个...

    SSD1和SSD2的压缩包

    3. SSD的故障排查:介绍常见问题如性能下降、错误代码的解决方法。 4. SSD的节能技术:如SMART(Self-Monitoring, Analysis, and Reporting Technology)和低功耗模式。 5. RAID配置与SSD:如何利用RAID技术提升SSD...

    SSD4_Exercise6

    10. **SSD与HDD的比较**:HDD依赖旋转磁盘和移动磁头进行数据读写,速度相对较慢且易受物理冲击影响;SSD则以电子方式存储数据,速度更快,对震动不敏感,但成本相对较高。 【Exercise8】可能是一个练习题目或实验...

    AS_SSD_Benchmark

    在日常使用中,操作系统和应用程序经常需要访问大量小块数据,这就需要SSD有高效的4K随机读写能力。AS SSD Benchmark通过生成不同大小的4K数据块进行读写测试,可以反映出SSD在处理日常任务时的响应速度,这对于提升...

    最新版SSD Benchmark+CrystalDiskMark硬盘读写测试工具

    SSD Benchmark 和 CrystalDiskMark 是两款非常重要的硬盘性能测试工具,尤其在评估固态硬盘(SSD)的读写速度时,它们是专业用户和普通...在日常使用中,定期进行这类测试,可以监控硬盘状态,及时发现并解决潜在问题。

    AS SSD Benchmark汉化版

    AS SSD Benchmark是现在市面上最为常用的SSD评测软件,可以测试连续读写、4K对齐、4KB随机读写和响应时间的表现,并给出一个综合评分。同时AS SSD Benchmark还自带一个Compression Benchmark项目,它可以给出一个...

Global site tag (gtag.js) - Google Analytics