System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种海量小文件存储方法技术_技高网

一种海量小文件存储方法技术

技术编号:40277012 阅读:6 留言:0更新日期:2024-02-02 23:04
本发明专利技术特别涉及一种海量小文件存储方法。该海量小文件存储方法,为RADOS Gateway实例添加WAL设备并添加文件系统;将待进行合并的小文件分为head合并对象和tail合并对象,并将tail合并对象依次追加到head合并对象后形成合并对象;将合并对象加入到内存缓存中,更新合并对象在缓存中的修改时间,并将本次缓存的写入日志记录在WAL设备的文件系统中;同时更新head合并对象的元数据,将上传结果返回给请求客户端。该海量小文件存储方法,不仅极大的减少了元数据量,降低了元数据的存储成本,并且降低了底层池中元数据的访问频率,提高了元数据的索引效率,缩短了对象上传的IO路径,提升了对象读写的性能;同时还能防止掉电造成的数据和元数据的丢失,保障了数据安全。

【技术实现步骤摘要】

本专利技术涉及云计算,特别涉及一种海量小文件存储方法


技术介绍

1、海量小文件场景是指数量级在百万及以上、大小在1mb以内的小文件的存储场景。例如人工智能中的人脸识别数据,智慧金融中的电子合同、签名数据以及科学实验中的实验数据都可以轻松突破千万级、亿级甚至百亿级的小文件。

2、在基于ceph的分布式存储中,现有的技术架构对于海量小文件的存储场景亲和性不佳,其中对象元数据的设计和底层数据布局的实现都侧重于大文件,导致在海量小文件场景下,数据的读写性能差并且元数据存储成本高。

3、在rados gateway中,对象的元数据包含对象大小、对象权限、存储类型等细小的属性数据,在访问对象数据前需要先访问该对象的元数据。在海量小文件的场景下,元数据比重显著提高,甚至超过底层存储的对象数据量。而在osd(object storage daemons,对象存储守护进程)上元数据都存储在db设备(一般为nvme存储系统或者ssd固态硬盘等闪存设备)上,大量的元数据会增加存储成本,并且元数据的频繁检索会对db设备造成压力,缩短db设备的寿命。

4、基于ceph的分布式存储中以机械盘为主,而机械磁盘对于随机小io读写性能差。由于ceph底层数据布局的实现策略,在海量小文件的场景下,会产生大量随机小i/o读写,这造成了在海量小文件的场景下数据的读写性能差。

5、为了解决上述问题,保障网络安全,本专利技术提出了一种海量小文件存储方法。


技术实现思路

1、本专利技术为了弥补现有技术的缺陷,提供了一种简单高效的海量小文件存储方法。

2、本专利技术是通过如下技术方案实现的:

3、一种海量小文件存储方法,其特征在于:包括以下步骤:

4、步骤s1:为rados gateway实例添加wal(write ahead log,预写日志)设备并添加文件系统;同时,在rados gateway内存缓存中添加map数据结构,存储每个桶的小文件合并情况,称为合并检索map;

5、步骤s2:rados gateway在接收到客户端发送的上传对象请求后,将待进行合并的小文件分为head(头部)合并对象和tail(尾部)合并对象,并将tail合并对象依次追加到head合并对象后形成合并对象;

6、步骤s3:将合并对象加入到内存缓存中,更新合并对象在缓存中的修改时间,并将本次缓存的写入日志记录在wal设备的文件系统中;

7、同时更新head合并对象的元数据,以标识每个tail合并对象的起始偏移位置和对象长度;为桶添加两级索引条目到索引池,其中第一级索引为tail合并对象名,第二级索引为head合并对象名,将上传结果返回给请求客户端;

8、步骤s4:开启异步任务,检查合并对象的大小是否达到自定义设定的阈值(默认为128m),若达到则将缓存中的合并对象上传到osd,并清除缓存中的合并对象和wal设备上的日志;

9、步骤s5:增加缓存清理线程,轮询更新时间早于当前时间0.5秒以上的合并对象,将上述对象的缓存清除,并擦除wal设备上该对象的日志。

10、所述步骤s1在,合并检索map的键是桶id,值是内层map数据结构;内层map的键是head合并对象名,值为head合并对象对应的合并对象当前的长度;

11、合并检索map形为<bucket id,<head object,length>>,其中bucket id为桶id,head object为head合并对象名,length为合并对象的长度;

12、内外两层map都有读写锁来保证线程安全和map修改的原子性。

13、所述步骤s2中,将小于等于1m的对象定义为小文件;若上传请求中的对象不是小文件,则将该对象直接上传至osd;若上传对象为小文件,则根据对象所在的桶的桶id在合并检索map中查找对应的条目,在合并检索map中查找失败的对象为head合并对象,否则为tail合并对象。

14、所述步骤s2中,若对象所在的桶的桶id在合并检索map中查找失败,则以上传对象所在桶的桶id为键,以上传对象为head合并对象,以上传对象的长度为合并对象的长度,组成map条目插入到合并检索map,这时head合并对象和合并对象均为上传请求中的对象;

15、若对象所在的桶的桶id在合并检索map中查找成功,则在得到的条目的内层map中从头到尾查找合并对象长度小于合并阈值(默认为128m)的条目;若查找成功,则该上传小文件作为tail合并对象,追加到该条目对应的head合并对象对应的合并对象尾部;若查找失败,则以上传对象为head合并对象,以上传对象的长度为合并对象的长度,组成map条目,插入到合并检索map的内层map中,这时head合并对象和合并对象均为上传请求中的对象。

16、所述步骤s3中,将缓存写入日志记录在wal设备上的文件系统中;在wal设备写入完成后,在缓存中更新head合并对象元数据,以合并前的合并对象长度为起始偏移位置,以上传对象的长度为对象长度,记录在head合并对象的元数据中;

17、同时,将上传对象的长度累加到合并对象长度,并更新合并检索map。

18、所述步骤s3中,在进行桶中对象的列举时,将桶的第一级索引全部返回给客户端;进行tail合并对象的下载时,按照第二级索引找到head合并对象名,并从head合并对象的元数据中获取tail合并对象的起始偏移位置和对象长度,向osd发送rados请求获取tail合并对象内容。

19、当rados gateway实例意外掉电重启时,所述wal设备利用日志的重播机制恢复内存缓存中的合并对象和元数据,以防止掉电造成的数据和元数据丢失。

20、所述步骤s4中,wal设备写入完成后,rados gateway向客户端返回上传请求的结果;

21、若合并对象的大小达到合并阈值(默认为128m),在将合并对象上传至osd的同时,下刷head合并对象的元数据至元数据池。

22、为了防止内存被rados gateway实例大量占用,所述步骤s5中,将更新时间早于当前时间0.5秒以上的合并对象上传至osd的同时,下刷head合并对象的元数据至元数据池;然后清除合并对象的缓存,并擦除wal设备上该合并对象的日志,内存缓存只保存更新时间在当前时间0.5秒以内的合并对象和元数据。

23、一种海量小文件存储设备,其特征在于:包括存储器和处理器;所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序时实现如上所述的方法步骤。

24、一种可读存储介质,其特征在于:所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的方法步骤。

25、本专利技术的有益效果是:该海量小文件存储方法,不仅极大的减少了元数据量,降低了元数据的存储成本,并且降低了本文档来自技高网...

【技术保护点】

1.一种海量小文件存储方法,其特征在于:包括以下步骤:

2.根据权利要求1所述的海量小文件存储方法,其特征在于:所述步骤S1在,合并检索map的键是桶id,值是内层map数据结构;内层map的键是head合并对象名,值为head合并对象对应的合并对象当前的长度;

3.根据权利要求2所述的海量小文件存储方法,其特征在于:所述步骤S2中,将小于等于1M的对象定义为小文件;若上传请求中的对象不是小文件,则将该对象直接上传至OSD;若上传对象为小文件,则根据对象所在的桶的桶id在合并检索map中查找对应的条目,在合并检索map中查找失败的对象为head合并对象,否则为tail合并对象。

4.根据权利要求3所述的海量小文件存储方法,其特征在于:所述步骤S2中,若对象所在的桶的桶id在合并检索map中查找失败,则以上传对象所在桶的桶id为键,以上传对象为head合并对象,以上传对象的长度为合并对象的长度,组成map条目插入到合并检索map,这时head合并对象和合并对象均为上传请求中的对象;

5.根据权利要求4所述的海量小文件存储方法,其特征在于:所述步骤S3中,将缓存写入日志记录在wal设备上的文件系统中;在WAL设备写入完成后,在缓存中更新head合并对象元数据,以合并前的合并对象长度为起始偏移位置,以上传对象的长度为对象长度,记录在head合并对象的元数据中;

6.根据权利要求5所述的海量小文件存储方法,其特征在于:当RADOS Gateway实例意外掉电重启时,所述WAL设备利用日志的重播机制恢复内存缓存中的合并对象和元数据,以防止掉电造成的数据和元数据丢失。

7.根据权利要求1所述的海量小文件存储方法,其特征在于:所述步骤S4中,WAL设备写入完成后,RADOS Gateway向客户端返回上传请求的结果;

8.根据权利要求1所述的海量小文件存储方法,其特征在于:为了防止内存被RADOSGateway实例大量占用,所述步骤S5中,将更新时间早于当前时间0.5秒以上的合并对象上传至OSD的同时,下刷head合并对象的元数据至元数据池;然后清除合并对象的缓存,并擦除WAL设备上该合并对象的日志,内存缓存只保存更新时间在当前时间0.5秒以内的合并对象和元数据。

9.一种海量小文件存储设备,其特征在于:包括存储器和处理器;所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序时实现如权利要求1至6任意一项所述的方法步骤。

10.一种可读存储介质,其特征在于:所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任意一项所述的方法步骤。

...

【技术特征摘要】

1.一种海量小文件存储方法,其特征在于:包括以下步骤:

2.根据权利要求1所述的海量小文件存储方法,其特征在于:所述步骤s1在,合并检索map的键是桶id,值是内层map数据结构;内层map的键是head合并对象名,值为head合并对象对应的合并对象当前的长度;

3.根据权利要求2所述的海量小文件存储方法,其特征在于:所述步骤s2中,将小于等于1m的对象定义为小文件;若上传请求中的对象不是小文件,则将该对象直接上传至osd;若上传对象为小文件,则根据对象所在的桶的桶id在合并检索map中查找对应的条目,在合并检索map中查找失败的对象为head合并对象,否则为tail合并对象。

4.根据权利要求3所述的海量小文件存储方法,其特征在于:所述步骤s2中,若对象所在的桶的桶id在合并检索map中查找失败,则以上传对象所在桶的桶id为键,以上传对象为head合并对象,以上传对象的长度为合并对象的长度,组成map条目插入到合并检索map,这时head合并对象和合并对象均为上传请求中的对象;

5.根据权利要求4所述的海量小文件存储方法,其特征在于:所述步骤s3中,将缓存写入日志记录在wal设备上的文件系统中;在wal设备写入完成后,在缓存中更新head合并对象元数据,以合并前的合并对象长度为起始偏移位...

【专利技术属性】
技术研发人员:曹磊王腾飞李超王韵清蒋方文
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1