做App后端,特别是像IM这类,会有很多语音和图片之类的大大小小一堆文件在服务端进进出出.
这时,怎么存文件,就要好好想想了。
        其实文件存储这回事,我并不陌生,不过以前做存储备份开发时,更多关注的是文件同步,文件消重.
备份介质管理之类的东西。现在场景换了,不同了。

存文件大致有下面几种选择:
  1.直接保存在本地文件系统或网络文件存储上.
       本地磁盘太小,通常可以直接外挂存储,或用NFS之类网络文件存储。

在产品验证或用户量小,OK的。备份管理也方便。

如果用这种方案,有个小东西要注意,因为它是以一个个文件独立保存的,所以没法
     基于文件块消重,那么,就要尽量防止文件重复上传或存储。所以文件上传时记得做个Hash,
     然后以后上传时,可以先去查找文件HASH是否已存在,如存在,则说明文件已有,就不用在传了。

2.自已找机器和存储,上分布式文件系统
     如果不自己开发(难度很大),则开源的分布式文件系统太多了,我稍稍列一下我关注过的.
           2.1 FastDFS(C/C++开发)作者余庆(记得在易到用车当架构师)

FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。

它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。

2008年7月发布,很成熟了。在CU上还有专门的论坛,资料很多很全。
                  它的问题是,如果文件数量太多,它的文件元数据会很大,因为它是通过文件夹散列的方式将文件直接存储在硬盘上面的.

2.2 MongoDB的GridFs:
   如果上了MongoDB做记录(如JSON消息)存储,相关的文件存储在GridFs上,也顺道。
   GridFs的好处是能利用MongoDB现有的东西。但要是专门为了存文件而上GridFs,我觉得真没必要。

2.3 Seaweedfs(以前叫Weedfs)/bfs   
     Seaweedfs(Go语言开发,作者Chris Lu) :   https://github.com/chrislusf/seaweedfs
     Seaweedfs 的设计原理是基于 Facebook 的一篇图片存储系统的论文 Facebook-Haystack
     说到这个,毛剑也在依这个论文写bfs, 正在开发中,可以跟看从小到大一步步完善的过程。
      https://github.com/Terry-Mao/bfs

FastDFS与Seaweedfs这类文件系统,就是为了存海量小文件而专门设计的。非常适用做APP的后台文件存储系统。
          用哪个看个人选择,要我,我会偏向Seaweedfs一些,
          1.它用Go,且出现的时间更晚。 
          2. 这有篇文件 <<分布式小文件系统fastdfs与weedfs的对比>> 可以看下
          
   4. 上第三方云存储,如七牛,又拍之类
       说到七牛,它的文件hash值算法是公开的,可以一看. https://github.com/qiniu/qetag
选方案时,看个人考量了。

附一下Go语言处理文件上传的例子:
    astaxie: https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/04.5.md

其实纯从文件存储角度来说,上面方案都是小打小闹。就我知道的,目前业界最流行的PB级的开源的解决方案,

主要有两种: Swift与Ceph。

Swift(Python)作为OpenStack组件之一,非常多的应用,记得有人说百度网盘底层也是用的这个.
         Ceph(主要用C/C++)则这一二年突然火了,很多公司(像雅虎)用Ceph替换了之前的方案。
这两者具体细节差异在哪就没去关注了,有兴趣的可以查查。

文件存储这种东西,随着现在数据越来越大,越来越复杂了。牵进来的东西也越来越多,我也没跟进了(本来也没深入过)。
记得一直对有些数据同步开发中的疑问没解决耿耿于怀,知道UbuntuOne云存储开源部份代码(竞然是Python写的)后,很高兴,
终于可以看看别人是怎么弄的,结果,最后也就...., 洗洗睡了。

BLOG: http://blog.csdn.net/xcl168

文件存储相关的一些东西整理相关推荐

  1. Andorid 11 数据和文件存储相关API

    访问方法 所需权限 其他应用是否可以访问? 卸载应用时是否移除文件? 仅供您的应用使用的文件 从内部存储空间访问,可以使用 getFilesDir() 或 getCacheDir() 方法 从外部存储 ...

  2. 服务器怎么存储文件节省空间,超大空间云服务器文件存储

    超大空间云服务器文件存储 内容精选 换一换 本节操作指导您完成Windows操作系统云服务器磁盘空间清理.弹性云服务器匀出一部分磁盘空间来充当内存使用,当内存耗尽时,云服务器可以使用虚拟内存来缓解内存 ...

  3. FastDFS小文件存储原理

    小文件存储 需要小文件存储的原因 小文件应用场景 小文件存储带来的问题 FastDFS小文件机制配置 FastDFS合并存储文件命名与文件 启动小文件存储时服务返回给客户端的fileid有变化 Tru ...

  4. 存储相关概要–BigTable设计原理

    BigTable核心设计原理 引言 1 数据模型 1.1 存储方式 1.2 数据拆分 1.3 与SQL的对比 2 体系架构 2.1 整体架构 2.2 元数据管理 3 读写流程 引言 BigTable是 ...

  5. mysql二进制大文件_Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)...

    <Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)>要点: 本文介绍了Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可 ...

  6. 分布式文件存储FastDFS介绍安装部署及相关Java代码编写

    分布式文件存储FastDFS 一.FastDFS简介 1.1 FastDFS体系结构 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传 ...

  7. Android——数据存储(课堂代码整理:SharedPreferences存储和手机内部文件存储)...

    layout文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmln ...

  8. 存储相关知识-DAS/SAN/NAS

    存储相关知识-DAS/SAN/NAS 余二五 2017-11-15 22:16:00 浏览1826 服务器 主机 IP CPU 磁盘 存储 最近在看一些存储相关的东西,就顺手作了一些总结.我发现国内在 ...

  9. 什么是块存储、文件存储、对象存储

    块存储,文件系统存储,对象存储区别 概念层级的区别 1.块级概念: 块级是指以扇区为基础,一个或我连续的扇区组成一个块,也叫物理块.它是在文件系统与块设备(例如:磁盘驱动器)之间. 2.文件级概念: ...

最新文章

  1. pythondataframe如何替换值_如何将pandas dataframe中的字符串值替换为整数?
  2. MYSQL:HAVING
  3. SpringBoot集成MybatisPlus 涵盖了目前流行的知识点!!!即用即cv即可!!!学过的同学,也可以存储作为工具!!
  4. 大型网站运维工程师的职责和前景
  5. 真香!你的 2019 年终总结已经出 - 请查收
  6. leetcode 367. Valid Perfect Square
  7. c++设置不适用预编译头
  8. 父与子一起学python3,父与子的编程之旅 与小卡特一起学Python 第3版(全彩印刷)...
  9. LeetCode——866.回文素数
  10. 如何用SQL语句查询Excel数据
  11. 没有android:padding属性,android pading的四个值,为负值时,什么情况下,有效啊
  12. leetcode437. 路径总和 III
  13. Ubuntu install mysql
  14. MIPI接口和DVP接口摄像头学习笔记
  15. Aria2+yaaw+Chrome插件BaiduExporter实现百度网盘下载
  16. 解决XP系统桌面图标蓝底
  17. lisp 左手钢筋_左手键配置程序
  18. 详解JQuery动画
  19. Kafka教程(一)Kafka入门教程
  20. 使用 Jquery AjaxUpload 上传图片

热门文章

  1. 网站渗透测试工作三年总结报告
  2. 什么是人工智能、机器学习和深度学习,三者之间又有什么差异?
  3. WAS8.5.5集群部署全程图解
  4. Elasticsearch跨集群复制(CCR)介绍
  5. 关于输入银行卡号自动识别所属银行的一个API
  6. JavaScript(三十九)
  7. 软件库@www.softku.net
  8. EasyExcel轻松读取Excel文件!
  9. 警查审问四名嫌疑人,其中三人说真话,一人说谎。
  10. MySQL执行过程及执行顺序