海量小文件存储

海量小文件存储

[转自:http://www.fuchaoqun.com/2009/04/deal-with-tons-of-small-files/]

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也遇到了同样的问题,他们的方案参见:http://www.dbanotes.net/arch/facebook_photos_arch.html,他们经历了三个阶段:

  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结构图,版权由charlee所有

转载于:https://www.cnblogs.com/mazhenyu/archive/2013/03/16/2963292.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

与0xf2值相等的是python_腾讯笔试题涵盖的基础知识

1.下列减少内存碎片的方法有哪些是正确的?增加实际申请和释放的次数频繁调用的子函数尽量使用栈内存系统申请一大块内存,自己实现内存分配和释放,定时清理内存降低虚拟内存的大小解答:答案2,3是正确的。属于操作系统中内存管理的问…

重庆大学 计算机组成原理,重庆大学计算机组成原理集(含部分)解决方案.doc

《计算机组成原理》试题集一、选择题在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。1.反映计算机基本功能的是( )A)操作系统 B)系统软件 C)指令系统 D)数据库系统2.若二进制数为1111.101,则…

diff算法_vue源码解读 diff算法

导语 最近碰到部分业务场景,代码逻辑需要了解"数组变更后,具体变更了哪一些元素,以及变更的位置.."。于是仔细研究并覆写了一遍针对数组变化的diff算法,在这里做下diff算法的逻辑分享&&源码解读一.介绍前的准备…

Linux驱动模块编译进内核中

BQ27501驱动编译进内核 一、 驱动程序编译进内核的步骤 在 linux 内核中增加程序需要完成以下三项工作: 1. 将编写的源代码复制到 Linux 内核源代码的相应目录; 2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项; 3. 在…

oracle 的进程

W000: Wnnn命名为W000,W001,W002.....,由smcO动态产生执行上述相关任务。 Pmon: Pmon后台进程负责一下的工作:进程异常终止,会话被杀掉,事务超过空闲时间,网络连接超时,将实例信息注册到监听器上,手工注册 altersystem register; Pmon进程的清…

请简述计算机硬件系统的运行过程,操作系统简述题

✔什么是操作系统?它的功能?操作系统是控制和管理计算机硬件和软件资源,合理地组织计算机工作流程以及方便用户使用计算机系统的程序的集合。功能:处理机管理,存储器管理,I/O设备管理和文件管理以及作为操作…

python闭环最短路径_最短路径算法的实现(dijskstra):Python

dijskstra最短路径算法步骤:输入:图G(V(G),E(G))有一个源顶点S和一个汇顶点t,以及对所有的边ij属于E(G)的非负边长出cij。输出:G从s到t的最短路径的长度。第0步:从对每个顶点做临时标记L开始,做法如下&…

黑群晖二合一安装不了套件_玩PT还是得安装transmission,星际蜗牛安装黑群晖制作家用NAS...

原文作者:pt老萌新To小白:黑群晖docker安装PT神器transmission——星际蜗牛安装黑群晖制作家用NAS的折腾日记写在前面:里面的技术方法不是我原创的,都是网上找的,侵删。折腾的过程记录是原创的(好像没啥原创的了)&…

Know more about Cache Buffer Handle

在之前的文章《latch free:cache buffer handles造成的SQL性能问题》中我介绍了cache buffer handle latch的一些知识,在这里我们复习一下: "当会话需要pin住buffer header时它首先要获去buffer handle,得到buffer handle的过程中首先要…

spring boot web项目_阿里技术专家带你使用Spring框架快速搭建Web工程项目

点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 We all have a past. It’s how you deal with it. 每个人都有过去,只是取决于你怎么去处理。 每日掏心话 人不都是这样吗,安慰别人的时候头头是道,自己…

MySQL执行外部sql脚本文件的命令

sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为“sql脚本文件”),然后通过相关的命令执行这个sql脚本文件。基本步骤如下:1、创建包含sql命令的sql脚本文件 文件中包含一…

全国计算机水平考试技巧,全国计算机等级考试上机考试应试技巧

掌握好上机考试的应试技巧,可以使考生的实际水平在考试时得到充分发挥,从而取得较为理想的成绩。历次考试均有考生因为忽略了这一点,加之较为紧张的考场气氛影响了水平的发挥,致使考试成绩大大低于实际水平。因此每个考生在应试前…

git 代码回滚_能提交到远程的Git回滚

很多情况下我们需要回滚代码,最容易想到的就是git reset。但是git reset有个弱点,它是一个彻底的回滚,不能再提交给远程了,因为在提交记录里回滚点之后的记录都不见了。做一下试验,一个文件我们提交了三次之后回滚#往前…

Mysql数据库的几大优势

为什么开源社区买mysql的帐, MySQL数据库的吸引开源社区的几大特质: 客户为什么会考虑购买MySQL 企业版Enterprise Edition : 转载于:https://www.cnblogs.com/macleanoracle/archive/2013/03/19/2968208.html

python机器人算法_DBscan算法及其Python实现

DBSCAN简介:1.简介DBSCAN 算法是一种基于密度的空间聚类算法。该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其它空间对象)的数目不小于某一给定阀值。DBSCAN 算法的显著优点是聚类速度快且能够有效处理噪声点和发现任意…

c语言e怎么表示_来测测!这11个C语言入门基础知识你都掌握了吗?

文章字数:8400 干货指数:⭐⭐⭐⭐⭐C语言程序的结构认识用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使小伙伴对c语言有个初步认识。例1:计算两个整数之和的c程序:#include main…

泰拉瑞亚服务器怎么让玩家注册,泰拉瑞亚服务器权限指令大全

; z1 o, G5 B N; k# W% L5 E) a7 _9 k. x% z* A/ \# j) U! Y2 8 Wtshock.ignore.sendtilesquare7 p3 x/ : T- {; y4 y" k7 U8 J描述: 允许客户端无限制修改地图. # I( K8 {# K$ n( 4 d命令: 无 9 g3 L. p5 G9 M; Y( E4 w. Y v5 M$ H, \/ K; M% n3 ktshock.ignore.dropb…

Oracle甲骨文8.7亿美元高价收购Eloqua

北京,2012年12月20日—— 甲骨文今天宣布,已与领先的云营销自动化和收入绩效管理软件供应商Eloqua公司(NASDAQ代码:ELOQ)达成收购协议,收购价为每股23.50美元,总额约为8.71亿美元。Eloqua的现…

Linux开启mysql远程连接的设置步骤

Mysql默认root用户只能本地访问,不能远程连接管理mysql数据库,Linux如何开启mysql远程连接?设置步骤如下: 1、GRANT命令创建远程连接mysql授权用户itlogger mysql -u root -p mysql>GRANT ALL PRIVILEGES ON *.* TO itloggerlo…

3dsmax展uv_TexTools|3dmax展UV插件(TexTools for 3ds Max)下载v4.10免费版 - 欧普软件下载

TexTools for 3ds Max是为3dmax推出的一款展UV插件,主要功能包括自动加入环形边结构、材质加速烘焙、光影追踪渲染预设、多种模型对象棋盘格贴图等,支持3dsmax或以上版本,在editUVW模式下可以展开UVW修改,编辑UVW编辑器和编辑按钮…