FastDFS结合FastDHT实现文件去重存储
存储文件时,为了节省存储空间,需要实现文件去重,即同一份文件只在服务器上存储一份。一种实现是文件上传后先落到应用服务器上,计算MD5并存储到数据库中,然后决定是否上传存储服务器。这样做的缺点是应用服务器端需要做并发控制,实现相对来说比较复杂。
FastDFS本身支持文件的排重处理机制,但需要FastDHT作为文件hash的索引存储。FastDHT是FastDFS同一个作者的开源key-value数据库。其排重原理为:
FastDFS的storage server每次上传均计算文件的hash值,然后从FastDHT服务器上进行查找比对,如果没有返回,则写入hash,并将文件保存;如果有返回,则建立一个新的文件链接(软链),不保存文件。
实验环境搭建:
1、利用vmware player新建虚拟机,安装centos系统。
我用的是东北大学的一个镜像http://mirror.neu.edu.cn/centos/6.8/isos/i386/,取得文件为CentOS-6.8-i386-LiveCD.iso
2、安装fastdfs
网上安装资料挺多,推荐参考https://my.oschina.net/harlanblog/blog/466487?fromerr=cqe6bTu2,我们主要想测试FASTDHT的功能,因此完成到第5步即可。
3、安装fastdht
参考https://my.oschina.net/u/999023/blog/796238中fastdht的安装
搭建过程遇到的问题:
1、安装完fastdht后,启动fastdfs的storage报错fdfs_storaged: symbol lookup error: fdfs_storaged: undefined symbol: g_current_time
解决方法:重新安装libfastcommon(参考上面安装fastdfs的第二步)
2、测试程序在虚拟机的宿主机上,也就是需要宿主机的程序访问虚拟机的fastdfs服务,搭建环境后发现虚拟机上可以上网,能ping通宿主机。
但是宿主机的程序访问虚拟机的fastdfs服务时报错connection time out
解决方法:安装telnet服务,关闭防火墙。此时启动fastdfs服务,假设虚拟机IP为192.168.0.1,fastdfs服务端口为22122,则在宿主机(windows系统)的命令窗口
telnet 192.168.0.1 22122 连接成功则说明可以正常访问fastdfs服务了。
测试:
1、同一文件分两次先后上传(串行)
2、同一文件同时上传(并行,三个线程同一文件同时上传)
结论:
经过测试集成FastDHT后,FastDFS可以实现文件去重,这样在fastdfs的客户端就不需要做额外的并发控制,可以减少很大一部分工作量。但是当前FastDFS去重功能是跟FastDHT绑定起来的,暂时不支持其他的K-V库,而且FastDHT网上的资料较少,如果hold不住它的源码(c语言实现),用起来还是存在很大风险的。
https://my.oschina.net/u/999023/blog/796287#comment-list
FastDFS结合FastDHT实现文件去重存储的更多相关文章
- 用FastDFS一步步搭建文件管理系统
一.FastDFS介绍 FastDFS开源地址:https://github.com/happyfish100 参考:分布式文件系统FastDFS设计原理 参考:FastDFS分布式文件系统 个人封装 ...
- 昕有灵犀-xyFS私有文件云存储OSS服务
本工程为本人开发的开源项目,地址: https://gitee.com/475660/xyFS 介绍: 一站式企业私有文件服务.针对软件开发时提供的文件存储系统,对文件上传.下载.分类.分组.审计.统 ...
- 从入门到精通(分布式文件系统架构)-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端
导读 互联网环境中的文件如何存储? 不能存本地应用服务器 NFS(采用mount挂载) HDFS(适合大文件) FastDFS(强力推荐
- (十一)整合 FastDFS 中间件,实现文件分布式管理
整合 FastDFS 中间件,实现文件分布式管理 1.FastDFS简介 1.1 核心角色 1.2 运转流程 2.SpringBoot整合FastDFS 2.1 核心步骤 2.2 核心依赖 2.3 配 ...
- plist文件、NSUserDefault 对文件进行存储的类、json格式解析
========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...
- 两个文件去重的N种姿势
最近利用shell帮公司优化挖掘关键词的流程,用shell替代了多个环节的操作,极大提高了工作效率. shell在文本处理上确有极大优势,比如多文本合并.去重等,但是最近遇到了一个难搞的问题,即两个大 ...
- [IT新应用]存储入门-文件级存储及块级别存储的选择
http://www.techrepublic.com/blog/the-enterprise-cloud/block-level-storage-vs-file-level-storage-a-co ...
- Kafka文件的存储机制
Kafka文件的存储机制 同一个topic下有多个不同的partition,每个partition为一个目录,partition命名的规则是topic的名称加上一个序号,序号从0开始. 每一个part ...
- FastDFS客户端与自定义文件存储系统
<1>安装 安装提供给大家的fdfs_client-py-master.zip到虚拟环境中 pip install fdfs_client-py-master.zip pip instal ...
随机推荐
- SVM明确的解释1__
线性可分问题
笔者:liangdas 出处:简单点儿,通俗点儿,机器学习 http://blog.csdn.net/liangdas/article/details/44251469 引言: 1995年Cor ...
- window.url.createobjecturl 兼容多种浏览器(IE,google,360,Safari,firefox)
<script type="text/javascript"> function setImagePreview() { var docObj = document.g ...
- 【BZOJ 2534】Uva10829L-gap字符串
[链接]h在这里写链接 [题意] 让你找出uvu形式的字符串个数. v非空且长度为L,且u也非空 [题解] 之前做过一道相同的题. 枚举u的长度. 然后从u,2 ...
- linux tesseract识别名片
用tesseract识别名片,无任何训练 数字,字母识别的准确率比较高,没有错误,规范的汉字识别的还可以,比如名片背面,正面的就错误比较多了: 没有任何训练,识别的还算可以了:我们主要要的电话和QQ ...
- uva 11552 Fewest Flops 线性dp
// uva 11552 Fewest Flops // // 二维线性dp // // 首先,在该块必须是相同的来信.首先记录每块有很多种书 // 称为是counts[i]; // // 订购f[i ...
- 怎样将数据库MySQL 迁移到 MariaDB 上
自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了它.在社区驱动下,促使更多人移到 MySQL 的另一个叫 MariaD ...
- Expression.Blend.4 Chapter 接口设计
原文:Expression.Blend.4 Chapter 接口设计 发现网上关于silverlight,WPF美工系列的书籍一直很少,而且很多都是英文的.在公司无聊,开始进行翻译. 翻译的地方可能有 ...
- Linux性能测试 iostat命令
Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令 来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据.iostat 由 Red Hat ...
- Json格式日期转换为一般日期
Json日期转换为一般日期:json日期:/Date(1316756746000)/ 转换为2013-09-01格式的 1 //将json格式的时间转换成一般时间 2 function Chang ...
- flash导出正常清晰(无色差)GIF图片
前言: 这枚GIF算是半临摹作品.我使用的FLASH制作这个小动画,其实这类型的动画用AE做会更便捷. 进入主题前,先摆出个成品 教程结束,以上就是flash制作出来的小动画怎么导出正常清晰(无色差) ...