`
zhaohaolin
  • 浏览: 1012001 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

海量小文件存储

阅读更多

Web2.0网站,数据内容以几何级数增长,尤其是那些小文件,几K~几百K不等,数量巨多,传统的文件系统处理起来很是吃力,很多网站在scaling的过程中都遇到了这样的问题:磁盘IO过高;备份困难;单点问题,容量和读写无法水平扩展,还存在故障的可能。

YouTube也碰到这样的问题,每一个视频有4个缩微图,这样的话缩微图数量是视频数量的四倍,想象一下YouTube有多少视频,看一下他们遇到的问题:

  • 大量的磁盘寻址,在操作系统层面出现inodes cache和page cache的问题
  • 单个目录文件数限制,尤其是Ext3文件系统,采用目录分级的做法,最新的Linux Kernel 2.6优化了Ext3文件系统,单目录能存储的文件数提高了100倍,但是把所有的文件存一个目录不是一个好的方法
  • 高RPS(requests per second每秒请求数),因为一个页面可能要显示60个缩微图
  • 高负载下Apache性能差
  • Apache前面加一层Squid,能抗一会,但负载上来之后,性能下降厉害,由300RPS降到20RPS
  • 尝试lighttpd,但是lighttpd是单线程,多线程的话也有问题,线程之间缓存不能共享
  • 加一台服务器的话需要24小时,因为文件数太多了
  • 存在“冷却”的问题,重启服务器后需要6~10个小时才能缓存好

YouTube的解决方案是Google的BigTable,一般人没戏。(原文参见:http://www.hfadeel.com/Blog/?p=127

Facebook也遇到了同样的问题,他们的方案参见:《Facebook 海量数据处理》,他们经历了三个阶段:

  1. NFS共享,挂一个盘阵,APP服务器通过NFS读写
  2. 加一个中间层Cachr:eventHttp + memcached(lighttpd + mod_memcache实现同样的功能),后端还是通过NFS连盘阵
  3. Haystacks,详细的去读这里(E文)。

对于一般的网站来说,实用的方案有哪些呢?

一、NFS共享

是的,这个有很多问题,但实施成本低,很多公司都在用(我们也在用),在不是那么多文件,不是那么高并发的情况下还是很不错的,设置Hash目录,不要让一个目录下文件数过多,对于一般的网站来说足够用了。

备份确实是一个问题,如果不是海量的话,根据文件更新时间每天增量备份+周期性的全量备份应该可以。

二、文件存数据库

真有人这么做,手机之家用MySQL建了256个表来存储超过1T的文件,前端加一个多级缓存(具体未知,也许就是memcached也许还是文件),数据库做数据备份用,他们用起来觉得还不错。

或者觉得MySQL太重,试试key->value的数据库,比如BDB,Tokyo Cabinet等。

三、分布式文件系统

开源的很多,好看簿用的是MogileFS,与memcached师出同门。傲游MFS来存储用户的收藏夹文件,详细文章参见:《分布式文件系统MFS(moosefs)实现存储共享》,据说数百万轻松处理。

分布式文件系统好处是可以均衡读写压力,数据可靠性大大增加,某个数据节点挂了也没事。

还不行?自己DIY一个去吧,豆瓣就这么做的,TokyoCabinet做为底层存储,封装了一个memcached协议接口(与Tokyo Tyrant何异?),一致性哈希,应用程序根据哈希规则在node中读写数据:

DoubanFS
DoubanFS结构图,版权由豆瓣所有

分享到:
评论

相关推荐

    Java开发的一个分布式海量小文件存储系统源码.zip

    本项目是使用Java开发的一个分布式海量小文件存储系统,功能包括文件上传、文件下载、文件存储等,解决了海量小文件在存储和访问过程中遇到的各种性能问题。 本项目是使用Java开发的一个分布式海量小文件存储系统,...

    基于分布式索引和目录聚合的海量小文件存储研究.pdf

    ### 海量小文件存储问题分析 传统分布式文件系统和并行文件系统通常会将目录项、索引节点和数据分离存储。这种设计导致每次访问小文件时需要多次访问底层设备,大大提高了访问代价。另外,常用的B+树索引在面对海量...

    SQL-DFS:一种基于HDFS 的海量小文件存储系统

    针对Hadoop 分布式文件系统(Hadoop distributed file system,HDFS)进行小文件存储时NameNode 内存占用率高的问题,通过分析HDFS 基础架构,提出了基于元数据存储集群的SQL-DFS 文件系统. 通过在NameNode 中加入小文件...

    基于Hadoop集群下海量小文件存储的研究与优化.docx

    【基于Hadoop集群下海量小文件存储的研究与优化】 在当今大数据时代,如何高效地存储和处理海量数据已经成为一个至关重要的课题。Hadoop作为一种开源的分布式计算框架,因其优秀的并行处理能力,广泛应用于大数据...

    SQL-DFS:一种基于HDFS的海量小文件存储系统.pdf

    针对 Hadoop 分布式文件系统(Hadoop distributed file system,HDFS)进行小文件存储时 NameNode 内存占用率高的问题,通过分析 HDFS 基础架构,提出了基于元数据存储集群的 SQL-DFS 文件系统. 通过在 NameNode 中加 入...

    针对海量小文件的可伸缩分布式文件系统研究.pdf

    1. 互联网海量小文件存储问题:随着互联网应用的普及,数据资源中有很大一部分以小文件形式存在。互联网中常见的小文件包括图片资源等,其大小多不超过100KB。这种小文件的存储、备份方式对于存储系统提出了更高要求...

    文件系统技术内幕:大数据时代海量数据存储之道.docx

    文件系统技术内幕:大数据时代海量数据存储之道 大数据时代的到来带来了海量数据的挑战,如何高效、可靠地存储和管理这些数据成为企业和组织面临的重要问题。文件系统技术作为信息管理的重要组成部分,在海量数据...

    基于NoSQL的海量航空物流小文件分布式多级存储方法.pdf

    【基于NoSQL的海量航空物流小文件分布式多级存储方法】是针对航空物流领域中大量小文件存储效率低下和访问效率不高问题而提出的一种解决方案。该方法充分利用了NoSQL数据库的优势,结合分布式存储策略,旨在优化存储...

    基于Hadoop的小文件分布式存储技术研究.pdf

    根据提供的文件内容,本文主要研究了基于Hadoop的分布式存储技术,特别是针对海量小文件存储问题的解决方案。文章分别从Hadoop框架的介绍、小文件存储问题的分析以及具体的优化策略等方面展开。下面将详细介绍这些...

    博睿数据海量小文件分布式存储系统1

    BRFS的这种设计使得它能够适应大规模小文件存储的需求,同时通过优化的副本管理和资源调度,提高了读写效率和整个系统的可用性。由于其开源特性,用户可以根据自身需求对其进行定制,进一步提升系统的适应性和性能。

    一种Hadoop小文件存储和读取的方法.

    这种方法特别适用于那些具有明确目录结构的海量小文件存储应用场景,例如日志分析、互联网爬虫数据处理等。 综上所述,HIFM为Hadoop在处理小文件时面临的挑战提供了一种有效的解决方案,通过优化文件组织和访问策略...

    海量小文件元数据的分布式存储与检索.pdf

    本文提出了一种新的分布式存储与检索方法,通过分布式文件存储元数据,并采用元数据缓冲和Hash映射实现元数据的分布;同时,借助MapReduce并行程序实现元数据检索,并针对并行检索中存在的问题提出了局部位图索引的...

    基于Hadoop的海量MP3文件存储架构

    【基于Hadoop的海量MP3文件存储架构】是针对如何高效管理和存储大量MP3音乐文件的问题,利用Hadoop分布式计算框架提出的一种解决方案。Hadoop是一个开源的Java框架,专为处理和存储大规模数据集而设计,它允许在廉价...

    基于海量数据优化管理的分布式文件存储系统应用研究.pdf

    基于海量数据优化管理的分布式文件存储系统应用研究 分布式文件存储系统是当前大数据时代企业数据管理的不二之选。传统的集中式存储由于其功能丰富、稳定可靠性高优势曾经可以很好的实现数据存储,但随着数字化时代...

    HDFS海量小文件存取优化1

    【标题】:“HDFS海量小文件存取优化1” 【描述】:本项目探讨了在分布式文件系统(如Hadoop的HDFS)中处理大量小文件的优化策略。HDFS通常设计为处理大文件,其元数据管理对于大量小文件来说可能会成为性能瓶颈。...

    HDFS海量小文件存取优化3

    3. **条带化存储**:通过设置较小的数据块大小,将小文件存储在同一数据块内,减少网络传输的开销。但需要注意的是,过度的条带化可能会增加元数据管理的复杂性。 4. **使用缓存**:利用内存或本地磁盘缓存频繁访问...

    分布式文件系统中海量小文件异步创建技术.pdf

    这些海量的小文件主要存储在分布式文件系统中,由于小文件数量巨大且访问频繁,对系统的性能提出了严峻挑战。尤其在高并发的环境下,小文件的创建、读取和更新操作会引发大量的元数据同步,这不仅增加了网络交互的...

Global site tag (gtag.js) - Google Analytics