童话说说技术创业美文职业
投稿投诉
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

中等规模网站的UGC图片存放规划

3月11日 凉夕夏投稿
  好像现在是个网站就允许用户上传头像,其中一部分还允许上传相册、个性背景图之类的东西。对图片的规划各村都有各村的高招,这里只是抛砖引玉、提个醒:当文件膨胀到一定规模的时候再去改就来不及了,在一个项目的草创时期,让一个人多花两个星期的时间来琢磨这个“小”问题也绝对称不上是过度设计。
  我对中等的定义:图片所占空间在1T数十T之间。
  功能需求
  基本的就两点:排除重复,和可扩展性。
  排重并不为很多人所重视,因为对很多人来说短期可以承受,实际经验重复的占了50(一些流行的图片会被重复上传很多次),但问题是这里还关系到另外一件事:审核。例如一些很流行的黄图会被频繁的被不同人重复上传,这也是不小的审核工作量。
  具体设计
  简单的说就是MySQL单点来保证唯一,将文件MD5转换为递增ID,再将固定数量的文件分成组,例如最简单的MySQL表可以这样。
  CREATETABLEIFNOTEXISTSuploadpic(
  idbigint(20)unsignedNOTNULLAUTOINCREMENT,
  hashbinary(16)NOTNULL,
  PRIMARYKEY(id),
  UNIQUEKEYhash(hash)
  )ENGINEMyISAMDEFAULTCHARSETucs2AUTOINCREMENT1;
  每次有上传,先MD5、INSERT,成功就返回ID,失败就重新SELECT找以前的ID
  文件就是整个ID的补零切三段,如12345保存为实际的文件upload000012345,不保留扩展名,统一发送HeaderContentTypeapplicationoctetstream
  首要原则是只新增,不改写(除了审核后删除的)
  调优
  上面所述只为了方便理解的最精简的方案,还有很多事情可以做。
  用于发号的MySQL仅仅是写入单点,对于已经生成的hash,可以定期生成Archive引擎的只读表。然后新上传时以SELECTINSERTSELECT的顺序获取ID(这时候,第三步的SELECT是极其罕见的)。
  如果是nfs挂载,初期可以挂整个upload,后期可以以一级子目录为单位,分散在不同机器上。如upload001和upload002挂在机器A上,诸如此类。这样我们可以每M个图片为一个挂载单位(下面简称MUMountedUnit)。如果图片的平均大小是200K左右,则每个MU的平均大小应该在1M200K200G左右。由于内容不再改写,老的MU可以到处搬动、甚至分散到不同机房,其实是类似flickr的farm。static子域名。
  实际磁盘问题是个大问题,这方面网友DruggoYang给了我很多经验,他最早面临的问题是大量随机读写、几乎没热点,大概是文件实在太碎,硬盘反倒在网卡之前成为瓶颈,银弹是有:SSD,不过太tmd贵了。最后他们是用的LVS,那已经是我知识体系以外的东西了。
  我想到的解决方法被DruggoYang评价为自己做软RAID:不同MU挂到不同盘,用nginx访问,或者系统本身瓶颈,那就若干个Server有相同的MU,做轮询。但总之我不推荐做磁盘RAID,这可能是我还没搞明白,也可能真的如此,就拿最简单的两块硬盘做RAID0来说,按我的理解,每读一个文件的时候,两块磁盘都需要定位,而两块独立的磁盘却可以分别各定位一个文件,据说也会受磁盘控制器的限制,但大体上不影响我的我的结论:RAID的优势应该在连续读写上,而随机读写反而会因为短板效应而略微降低IOPS。总之这问题我只能纸上谈兵,有条件应该拿几块硬盘测一下的。
  此外,诸如目录分级是1000还是100个文件一组,还是用其他进制,都可以细测。记得以前看过一个单目录文件数的Benchmark,可惜后来再也找不到了(有谁能提示一下?),隐约记得500比较合适,因为这里需要频繁手工搬动,索性就弄个人脑容易识别的数了
  另外为了防止遍历需要加个扰码,这也很容易了。
  至于缩略图接口,另算
  应用特例:头像
  其实每个网站都有的图片机制是头像,现在普遍的规则是用户ID补码,补码可以是更新次数(如douban)、时间戳(如t。sina)、文件名(如twitter)之类的。补码的主要目的是为了靠改变URL而绕开HeaderExpires
  但直到上家公司的产品部门在全面模仿Facebook运动中,想要实现Facebook里的一个功能:所有图片的大一统,如新上传的图片进相册、可以将任意一张图片设为头像,而收藏功能的流程跟自己上传几乎是一样的,等等,虽然这个改动过于底层以至于辞职一年多后公司彻底黄掉也没能看到它实现,但我还是很喜欢这个大一统的:不去考虑一张图片被哪些地方引用,只管存就是了,而所有涉及到图片的地方,都保存的是图片ID,因此只看某一张图片的URL,你不知道头像的主人是谁:有可能其他人也用相同的图片做头像,或者在某人的相册里。
  问题
投诉 评论 转载

魔兽争霸3和产品设计今天特地放一篇分析游戏的文章给各位弯曲同仁,希望能让大家了解其实游戏也有很多门道!前言去年年末,我花了相当多的时间在《魔兽争霸3》上面,用“叫兽”的话来说,就是“沉……设计思想形成的四个阶段设计师的才华携手什么样根深蒂固的习性才能将最初的想法变成新兴的创造呢?从研究设计师成功解决问题、创造革新的方法中,商业人士能学到什么呢?最根本面上来讲,他们能学会提问、关……《牛壹周》设计过程揭秘2010年7月30号,《牛壹周》在AppStore上架,截止到我写这篇blog,下载量破千,排名位列中国地区免费程序TOP榜第11位,新闻类第2位。几天前,Shawn写了……了解用户需求,做有用户价值的产品手机QQ浏览器forAndroid:即是一款基于Android移动平台的手机浏览器,由腾讯自主研发研发,可以通过GPRS进行上网浏览互联网内容。它以强大的上网功能、完美的横屏浏……交互设计的方法长期以来我就有对几年来交互设计的心得进行总结整理的想法。回到中国来亲身体会到不少同行,主要是交互设计师和视觉设计师对于交互设计的困惑,以及其他行业对于交互设计的误解和滥用。后来……follow人,还是follow内容天下大势,合久必分,分久必合。自从有了网站,数字信息就开始多了起来,直到我们拥有搜索引擎之前,这些信息都没有被很好地组织。自从有了feed流这个概念,信息突然又瞬间地膨胀了起来……别让妈妈生气浅谈长者用户前段时间放假回家难得清闲,奇怪还不到一周就坐不住了,左顾右盼百无聊赖,心里痒滋滋的原来是网瘾犯了为了说服父母同意牵网,我承诺他们,保证他们学会上网!我的计划是:一周之内,……网站用户体验的五大分类每个人对网站的使用习惯不一样,功能要求也不一样,要做到最好的用户体验只能是照顾最主要目标受众的需求,因此要实现用户体验的优化,前提之一是必须对自己的目标受众了如指掌。因此,要有……良好网络广告体验的“FACT”法则广告,已经成为在线生活的一部分,当我们关注网站和产品的用户体验时,广告不应该被忽视。说起广告,不少设计师会眉头一皱:多少次,自己在设计时一个作品时,对每一个细节都力求完美……浏览路线设计我第一次去上海宜家是2006年的时候娜姐带我去的,她特意告诉我让我细心去观察宜家的每一个细节。刚一进入宜家的大门就看到一张在大厅墙上的路线图。一张极为简单的路线图,就是一个大圈……中等规模网站的UGC图片存放规划好像现在是个网站就允许用户上传头像,其中一部分还允许上传相册、个性背景图之类的东西。对图片的规划各村都有各村的高招,这里只是抛砖引玉、提个醒:当文件膨胀到一定规模的时候再去改就……为什么不要“以任务为中心”来进行设计?1993年由克莱顿。刘易斯和约翰。黎曼提出了“以任务为中心”的设计模型(TaskCenteredSystemDesign,TCSD)中,设计过程分为了四个阶段第一阶段,识……
七条守则让你为用户设计出更好的移动通讯体验!浅析韩国团购网站我所了解的产品推荐SNS关注机制讨论:网络图谱论“知乎”交互设计师如何做交互?让一个从未接触过电脑的人测试浏览器你的网站使用Flash了吗?用户体验设计的五项原则信息架构中信息类粒化简谈交互设计需要考虑的一些事。苹果有而Google没有的:设计中的导演中心论软件安装过程的交互设计
死刑犯生命的最后时刻,目睹300例死刑执行后,工作人员崩溃辞女方争取抚养权有利条件是什么大脸男生适合的发型瘦脸耍帅两不误在我国域名备案都需要什么?帝王的驭人之道:仅靠尊重人才还不行好文:行而不辍未来可期的解释(行而不辍未来可期是什么意思)热 西安潜力巨大魅力十足,将是国内仅次于北京上海的综合实力第三城 抓住暑假的小尾巴,享受一夏!别克昂科旗六座,SUV界的MPV郭碧婷产后录制综艺,和丈夫挽手臂穿情侣装,下班后给孩子买童装梦回宋朝女性产后腰疼要如何调理?HBO高分迷你剧,凯特温斯莱特太适合演30以上的女性了

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界