"+++++++++++++++ LOSF 海量小文件存储和优化方案 +++++++++++++++++++++++++++++++++++++++++++++"
一.问题产生原因以及解决思路:
对于LOSF而言,IOPS/OPS是关键性能衡量指标,造成性能和存储效率低下的主要原因包括元数据管理、数据布局和I/O管理、Cache管理、网络开销等方面。

从理论分析以及上面LOSF优化实践来看,优化应该从元数据管理、缓存机制、合并小文件等方面展开,而且优化是一个系统工程,结合硬件、软件,从多

个层面同时着手,优化效果会更显著。http://files.cnblogs.com/files/yyx1-1/%E6%B7%98%E5%AE%9D%E5%BC%80%E6%BA%90%E5%BA%93%E6%9C%80%E6%96%B0%E7%89%88TFS.rar

二.成熟方案:
1.Facebook 推出了专门针对海量小文件的文件系统Haystack. (通过多个逻辑文件共享同一个物理文件、增加缓存层、部分元数据加载到内存等方式有效的解决了
Facebook海量图片存储问题)

2.Reiserfs在小文件存储的性能和效率上表现非常出色.(对于小于1KB的小文件,Rerserfs可以将数据直接存储在inode中。)

3.淘宝推出了类似的文件系统TFS(Tao File System),通过将小文件合并成大文件、文件名隐含部分元数据等方式实现了海量小文件的高效存储。

三.LOSF问题根源
1.传统磁盘本质上一种机械装置,如FC,SAS, SATA磁盘,转速通常为5400/7200/10K/15K rpm不等。影响磁盘的关键因素是磁盘I/O服务时间,即磁盘完成一个
I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。因此可以计算磁盘的IOPS= 1000 ms/ (Tseek + Troatation + Ttransfer),如
果忽略数据传输时间,理论上可以计算出磁盘的最大IOPS。当I/O访问模式为随机读写时,寻道时间和旋转延迟相对于顺序读写要明显增加,磁盘IOPS远小于
理论上最大值。定义有效工作时间Pt=磁盘传输时间/磁盘I/O服务时间,"由此可知随机读写单个文件效率要低于连续读写多个文件"。

2."对于磁盘文件系统来说,无论读写都存在元数据操作"。以EXTx文件系统写数据为例,向磁盘写入数据进行大量的元数据操作,包括更新inode目录、目录、
inode和数据块位图等。定义有效数据读写率Pd=所需数据/实际磁盘读写数据,其中实际磁盘读写数据为磁盘元数据与所需数据之和。当操作连续大文件时,
对元数据的操作开销可被庞大的数据操作开销分摊,但小文件的有效读写率小于大文件的,当小文件数量急剧增加时,对大量元数据的操作会严重影响系统的性能。

3.从上面对磁盘介质的分析可以看出,磁盘最适合顺序的大文件I/O读写模式,但非常不适合随机的小文件I/O读写模式,这是磁盘文件系统在海量小文件应用
下性能表现不佳的根本原因。前面已经提到,磁盘文件系统的设计大多都侧重于大文件,包括元数据管理、数据布局和I/O访问流程,另外VFS系统调用机制也
非常不利于LOSF,这些软件层面的机制和实现加剧了LOSF的性能问题。

四.Facebook开源库Haystack解决中心思路
1.每个图片存储为一个文件将会导致元数据太多,难以被全部缓存。Haystack的对策是:将多个图片存储在单个文件中,控制文件个数,维护大型文件,我们将
论述此方案是非常有效的。

2.在对Haystack的介绍中,需要区分两种元数据,不要混淆。一种是应用元数据,它是用来为浏览器构造检索图片所需的URL;另一种是文件系统元数据,用于
在磁盘上检索文件。

3.当用户访问一个页面,web服务器使用Directory为每个图片来构建一个URL(Directory中有足够的应用元数据来构造URL)。URL包含几块信息,每一块内容可
以对应到从浏览器访问CDN(或者Cache)直至最终在一台Store机器上检索到图片的各个步骤。一个典型的URL如下:

http://<cdn>/<cache>/<machine id="">/<logical volume,="" photo="">

第一个部分<cdn>指明了从哪个CDN查询此图片。到CDN后它使用最后部分的URL(逻辑卷和图片ID)即可查找缓存的图片。如果CDN未命中缓存,它从URL中删除<cdn>
相关信息,然后访问Cache。Cache的查找过程与之类似,如果还没命中,则去掉<cache>相关信息,请求被发至指定的Store机器(<machine id="">)。如果请求不经
过CDN直接发至Cache,其过程与上述类似,只是少了CDN这个环节。

4."文件系统在只有读或者只有写的情况下执行的更好,不太喜欢同时并发读写."

5.Haystack Store
Store机器的接口设计的很简约。读操作只需提供一些很明确的元数据信息,包括图片ID、哪个逻辑卷、哪台物理Store机器等。机器如果找到图片则返回其真实数据,
否则返回错误信息。
每个Store机器管理多个物理卷。每个物理卷存有百万张图片。读者可以将一个物理卷想象为一个非常大的文件(100GB),保存为'/hay/haystack<logical volume=""
id="">'。Store机器仅需要逻辑卷ID和文件offset就能非常快的访问一个图片。这是Haystack设计的主旨:不需要磁盘操作就可以检索文件名、偏移量、文件大小等元
数据。Store机器会将其下所有物理卷的文件描述符(open的文件"句柄",卷的数量不多,数据量不大)缓存在内存中。同时,图片ID到文件系统元数据(文件、偏移量、
大小等)的映射(后文简称为"内存中映射")是检索图片的重要条件,也会全部缓存在内存中。
现在我们描述一下物理卷和内存中映射的结构。一个物理卷可以理解为一个大型文件,其中包含一系列的needle。每个needle就是一张图片。图5说明了卷文件和每个
needle的格式。Table1描述了needle中的字段。

"为了快速的检索needle,Store机器需要为每个卷维护一个内存中的key-value映射。映射的Key就是(needle.key+needle.alternate_key)的组合,映射的Value就是
needle的flag、size、卷offset(都以byte为单位)。如果Store机器崩溃、重启,它可以直接分析卷文件来重新构建这个映射(构建完成之前不处理请求)"

"++++++++++++++++++++ LOSF 海量小文件存储和优化方案 ++++++++++++++++++++++++++++++++++++++++++++++++"

LOSF海量小文件问题解决思路及开源库的更多相关文章

  1. 海量小文件存储与Ceph实践

    海量小文件存储(简称LOSF,lots of small files)出现后,就一直是业界的难题,众多博文(如[1])对此问题进行了阐述与分析,许多互联网公司也针对自己的具体场景研发了自己的存储方案( ...

  2. 百亿级小文件存储,JuiceFS 在自动驾驶行业的最佳实践

    自动驾驶是最近几年的热门领域,专注于自动驾驶技术的创业公司.新造车企业.传统车厂都在这个领域投入了大量的资源,推动着 L4.L5 级别自动驾驶体验能尽早进入我们的日常生活. 自动驾驶技术实现的核心环节 ...

  3. 如何利用Hadoop存储小文件

    **************************************************************************************************** ...

  4. Hadoop对小文件的解决方式

    小文件指的是那些size比HDFS的block size(默认64M)小的多的文件.不论什么一个文件,文件夹和block,在HDFS中都会被表示为一个object存储在namenode的内存中, 每一 ...

  5. 合并hive/hdfs小文件

    磁盘: heads/sectors/cylinders,分别就是磁头/扇区/柱面,每个扇区512byte(现在新的硬盘每个扇区有4K) 文件系统: 文件系统不是一个扇区一个扇区的来读数据,太慢了,所以 ...

  6. Android Studio 简介及导入 jar 包和第三方开源库方[转]

    原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...

  7. CocoaPods:管理Objective-c 程序中各种第三方开源库关联

    在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...

  8. (转)CocoaPods:管理Objective-c 程序中各种第三方开源库关联

    在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...

  9. iOS 静态库生成(引用第三方SDK、开源库、资源包)

    一.静态库创建 打开Xcode, 选择File ----> New ---> Project  选择iOS ----> Framework & Library ---> ...

随机推荐

  1. 安卓之service简单介绍

    一 什么是Service 二 如何使用Service 三 Service的生命周期   一 什么是Service Service,看名字就知道跟正常理解的“服务”差不多,后台运行,可交互这样的一个东西 ...

  2. HDU 4678 Mine (2013多校8 1003题 博弈)

    Mine Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submis ...

  3. 使用STL中的list容器实现单链表的操作

    #include<iostream> #include<list> #include<algorithm> using namespace std; void Pr ...

  4. Spring构造方法注入类型歧义

    在Spring框架中,当一个类包含多个构造函数带的参数相同,它总是会造成构造函数注入参数类型歧义的问题. 问题 让我们来看看这个客户 bean 实例.它包含两个构造方法,均接受3个不同的数据类型参数. ...

  5. Google Chrome 39.0.2171.71 正式发布

    Google Chrome,又称Google浏览器,是一个由Google(谷歌)公司开发的网页浏览器.该浏览器是基于其他开源软件所撰写,包括WebKit,目标是提升稳定性.速度和安全性,并创造出简单且 ...

  6. 调用 jdbcTemplate.queryForList 时出现错误 spring-org.springframework.jdbc.IncorrectResultSetColumnCountException

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. pm2 相关命令

    pm2 相关命令 转载 2017年02月18日 22:59:48   二.安装 Linux Binaries下载地址:https://nodejs.org/dist cd oneinstack/src ...

  8. java通过jacob来读取word转换为htm格式

    转自:http://blog.csdn.net/chinapi_hzh/article/details/5798689 因为微软没有公开word源代码,所以直接用java流来读取word的后果是读出来 ...

  9. Java垃圾回收精粹 — Part1

    Java垃圾回收精粹分4个部分,本篇是第1部分.在第1部分里介绍了权衡点.对象生命周期以及全局暂停事件. 串行.并行.并发.CMS.G1.年轻代(Young Gen).新生代(New Gen).旧生代 ...

  10. [翻译] TLMotionEffect 重力感应

    TLMotionEffect  重力感应 https://github.com/jvenegas/TLMotionEffect This category adds a motion effect t ...