文件上传去重"/>
FastDHT配合FastDFS进行文件上传去重
为什么写这个
最近因为工作需要,使用了FastDFS,这是一款国产的开源DFS软件,但是这个软件本身不能对重复上传的文件进行去重,需要我们自己去处理,一种可行的方案是,在文件上传之前进行md5校验,把每个文件保存在数据库中,然后进行对比,这个md5值如果在数据库中已经存在的话,就不上传。不过这个效率可能不怎么高。FastDFS作者余庆也开源了一个解决的资源,就是FastDHT了,使用这个也可以做到去重。
关于FastDHT
FastDHT is a high-performance distributed hash system (DHT) which based key value pairs. It can store mass key value pairs such as filename mapping, session data and user related data.
FastDHT implements data replication by it’s binlog file, so it only uses the basic storage function of the Berkeley DB.
从这段话中可以看出,FastDHT是一个高性能的分布式哈希系统,它是基于键值对存储的,而且它需要依赖于Berkeley DB作为数据存储的媒介,同时需要依赖于libfastcommon。
FastDHT集群由一个或者多个组 group组成,同组服务器上存储的数据是相同的,数据同步只在组的服务器之间进行;组内各个服务是对等的,对数据进行存取时,可以根据 key的hash值来决定使用哪台机器。
安装
下载FastDHT,建议在GitHub上下载:,
libfastcommon下载地址:,
Berkeley DB的下载地址:
.html
下载完毕后,就可以开始安装了。
先安装libfastcommon
将源码解压到/usr/local/src/目录下,
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
安装Berkeley DB
其实libfastcommon在安装FastDFS的时候就会安装了,接下来安装db。这里我下载的是db-6.1.19版本。
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
安装FastDHT
①将fastdht-master源码解压到 /usr/local/src下,编译之前需要先修改make.sh文件。
在CFLAGS=’-Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/db-6.1.19/include/ -L/usr/local/db-6.1.19/lib/’
这行里面加上斜体字部分。
②然后,进入/usr/local/src/fastdht-master源码目录下,执行./make.mk
然后执行./make.sh install。
③最后会在/usr/local/bin生成安装后的文件,在/etc/fdht下生成文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
配置FastDHT
配置fdht_client.conf文件
- 1
- 2
- 3
- 1
- 2
- 3
配置fdht_servers.conf文件
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
配置fdhtd.conf文件
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
配置storaged.conf文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
启动
或fdhtd /etc/fdht/fdhtd.conf
fdhtd /etc/fdht/fdhtd.conf restart
可能遇到问题:
fdhtd /etc/fdht/fdhtd.conf
error while loading shared libraries: libdb-6.1.so: cannot open shared object file: No such file or directory
解决办法:
- 1
- 1
然后再重新启动就可以了。
测试一下:
可以看到,第一次上传的文件为:
- 1
- 1
第一次上传返回的结果为一个软链接:CgoKUlcZ0cWAYmiNAAAOejexS3k075.png,之后每次重复上传的话都是返回一个指向第一次上传的文件的软链接。也就保证了文件只保存了一份。需要说明的是,FastDFS不会返回原始文件的索引,比如这里的CgoKUlcZ0cWAUpQ4AAAOepbSnR0875.png,即返回的全部是软链接,当所有的软链接都被删除的时候,原始文件也会从FastDFS中被删除
更多推荐
FastDHT配合FastDFS进行文件上传去重
发布评论