1. 程式人生 > >FastDHT配合FastDFS進行檔案上傳去重

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值來決定使用哪臺機器。

安裝

先安裝libfastcommon

將原始碼解壓到/usr/local/src/目錄下,

[[email protected] src]# unzip libfastcommon-master.zip 
[[email protected] src]# cd libfastcommon-master
[[email protected] libfastcommon-master]# ls
HISTORY  INSTALL  libfastcommon.spec  make.sh  README  src
[[email protected]
libfastcommon-master]# ./make.sh [[email protected] libfastcommon-master]# ./make.sh install mkdir -p /usr/lib64 install -m 755 libfastcommon.so /usr/lib64 mkdir -p /usr/include/fastcommon install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_bits.h
sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h /usr/include/fastcommon

安裝Berkeley DB

其實libfastcommon在安裝FastDFS的時候就會安裝了,接下來安裝db。這裡我下載的是db-6.1.19版本。

①將db-6.1.19原始碼拷貝到 /usr/local/src下
②進入db-6.1.19\build_unix,
③執行../dist/configure --prefix=/usr/local/db-6.1.19
④make
⑤make install
安裝完db,會在/usr/local目錄下生成db-6.1.19/

安裝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下生成檔案

[email protected]:/usr/local/bin# cd /etc/fdht/
[email protected]:/etc/fdht# ll
total 24
drwxr-xr-x   2 root root 4096 Apr 22 12:45 ./
drwxr-xr-x 102 root root 4096 Apr 22 12:45 ../
-rwxr-xr-x   1 root root  910 Apr 22 12:45 fdht_client.conf*
-rwxr-xr-x   1 root root 5374 Apr 22 12:45 fdhtd.conf*
-rwxr-xr-x   1 root root   76 Apr 22 12:45 fdht_servers.conf*

配置FastDHT

配置fdht_client.conf檔案

base_path=/data/fastdht
keep_alive=1
#include /etc/fdhtd/fdht_servers.conf

配置fdht_servers.conf檔案

vim /etc/fdhtd/fdht_servers.conf
group_count = 1
group0 = 10.10.10.81:11411
group0 = 10.10.10.82:11411

配置fdhtd.conf檔案

vim /etc/fdht/fdhtd.conf/
port=11411
bash_path=/data/fastdht (該目錄必須是已經存在的)
cache_size = 32MB
#include /etc/fdhtd/fdht_servers.conf  -> (本行前有#表示開啟,如果想關閉此選項,則應該為##開頭)

配置storaged.conf檔案

vim /etc/fdfs/storaged.conf
#是否檢測上傳檔案已經存在。如果已經存在,則建立一個索引連結以節省磁碟空間 
check_file_duplicate=1 
#當上個引數設定為1時 , 在FastDHT中的名稱空間
key_namespace=FastDFS 
#長連線配置選項,如果為0則為短連線 1為長連線 
keep_alive=1 
#此處特別需要注意配置
#include /etc/fdht/fdht_servers.conf

啟動

或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

解決辦法:

# cp /usr/local/db-6.1.19/lib/libdb-6.1.so /usr/lib/

然後再重新啟動就可以了。
測試一下:
這裡寫圖片描述
可以看到,第一次上傳的檔案為:

-rw-r--r--   1 root root 3706 Apr 22 15:24 CgoKUlcZ0cWAUpQ4AAAOepbSnR0875.png

第一次上傳返回的結果為一個軟連結:CgoKUlcZ0cWAYmiNAAAOejexS3k075.png,之後每次重複上傳的話都是返回一個指向第一次上傳的檔案的軟連結。也就保證了檔案只儲存了一份。需要說明的是,FastDFS不會返回原始檔案的索引,比如這裡的CgoKUlcZ0cWAUpQ4AAAOepbSnR0875.png,即返回的全部是軟連結,當所有的軟連結都被刪除的時候,原始檔案也會從FastDFS中被刪除。

整個過程就是這樣了,就寫這麼多吧。。。

相關推薦

FastDHT配合FastDFS進行檔案

為什麼寫這個 最近因為工作需要,使用了FastDFS,這是一款國產的開源DFS軟體,但是這個軟體本身不能對重複上傳的檔案進行去重,需要我們自己去處理,一種可行的方案是,在檔案上傳之前進行md5校驗,把每個檔案儲存在資料庫中,然後進行對比,這個md5值如果在資料

FastDFSFastDFS+FastDHT完成檔案

一、前言      最近公司讓我搞FastDFS分散式檔案系統。整個叢集環境已經搭建成功啦。但是有一個問題一直困擾著我,那就是重複檔案的上傳。即使是同一個檔案,多次上傳,返回的id也是不一樣的。這樣就造成了磁碟資源的極大浪費。但是呢FastDFS本身是不支援重複檔案去重的。好

springMVC檔案,MultipartHttpServletRequest、MultipartFile進行檔案

這裡使用apache的開源jar包完成上傳功能,使用jar包分別是:common-fileupload.jar和common-io.jar  先編寫上傳檔案幫助類,如果需要區分檔案型別,可以將檔案字尾擷取進行判斷; springmvc-mvc.xml配置,這裡主要配置spri

Java Springboot結合FastDFS實現檔案以及根據圖片url將圖片至圖片伺服器

上一篇文章我們已經講解了如何搭建FastDFS圖片伺服器,環境我們準備好了現在就讓我們開始與Java結合將他應用到實際的專案中吧。本篇文章我們將會展示上傳圖片到FastDFS圖片伺服器以及通過外網的圖片url將圖片上傳至我們自己的圖片伺服器中。 1.建立springbo

FastDFS的配置、部署與API使用解讀(8)FastDFS多種檔案介面詳解

《Poechant的FastDFS的配置、部署與API使用教程》 FastDFS的配置、部署與API使用解讀——(1)入門使用教程 FastDFS的配置、部署與API使用解讀——(2)Java API:根據InputStream、檔名、檔案長度上傳檔案 FastDFS的配置、部署與API

Yii框架使用Curl進行檔案(微信公眾號)

public function actionUpload(){ $type = Yii::$app->request->post('type'); //獲取token $token = Yii::$app->cache->get($this->t

**#使用springboot進行檔案和下載**

使用springboot進行檔案上傳和下載 ##檔案下載功能的實現思路: 1.獲取要下載的檔案的絕對路徑 2.獲取要下載的檔名 3.設定content-disposition響應頭控制瀏覽器以下載的形式開啟檔案 4.獲取要下載的檔案輸入流 5.建立資料緩衝區//緩衝區解釋

SpringMVC+Postman進行檔案測試

                              SpringMVC+Postman進行檔案上傳測試   一、軟體下載

使用SecureCRT如何進行檔案

使用SecureCRT如何進行檔案上傳 聽語音   | 瀏覽:3221 | 更新:2017-09-14 12:06 1 2 3 4 5 6 7 分步閱讀 在部署專

Struts2配合layui多檔案--下載

先說上傳: 前臺上傳檔案的js程式碼: var demoListView = $('#demoList') ,uploadListIns = upload.render({ elem: '#testList' ,url: 'emailAction_upload'

Vue 實現 拖拽檔案到網頁進行檔案【JS/JQ 原理也是一樣的】

效果: 拖入檔案前: 拖入檔案後: html: <div id="select_frame"> <div ref="select_frame" class=

使用byte[]進行檔案

1.背景    需要以byte[]資料流的方式傳輸檔案到伺服器,並在伺服器還原檔案。 2.程式碼 (1)轉換為byte[]         # region function1      &n

java使用Jsch實現遠端操作linux伺服器進行檔案、下載,刪除和顯示目錄資訊

1 package com.fline.aic.utils; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import jav

JQueryAjax使用SpringMVC中MultipartFile進行檔案的整合

對於一個帶有檔案上傳的表單,後臺使用springMVC封裝的MultipartFile file接收檔案,並且需要使用非同步提交,並返回相應的提示資訊 在這種情況下,我最開始使用了好幾種方法 第一種:普通的JQUERY的AJAX,但是後臺一旦使用MultipartFile

QT進行檔案 (類似於百度雲網盤)

分為伺服器和客戶端 下面來具體貼出程式碼。  每一句的具體註釋都在,幫助理解: 先貼    客戶端 首先在專案檔案  .pro中新增 network widget.h #ifndef WIDGET_H #define WIDGET_H #include &l

FastDFS分散式檔案系統之二】:FastDFS檔案效能測試及Python客戶端操作

  由於要對比swift上傳小檔案以及fdfs上傳小檔案的效能,故做效能測試。 1.1 測試環境: FastDFS叢集的搭建方法:【FastDFS分散式檔案系統之一】:搭建、部署、配置 tracker server1:node2 tracker server2:node3

React 使用fromidable 模組進行檔案出現First argument must be a string 的解析錯誤的原因

前幾日在用react + express做網站檔案上傳模組時採用了常用的幾個後臺處理檔案上傳的模組,幾乎每個都會出現上述錯誤,究其原因,以如下程式碼進行除錯測試  //錯誤提示除錯 //new一個formidable.IncomingForm();   var form

關於通過http post進行檔案的問題

為了弄明白資料是怎麼傳過去的,我開始笨拙的使用wireshark來抓包分析,然後發現了一個很奇怪的現象。小檔案可以抓到post報文,但大點的檔案就抓不到了,只能看到伺服器的響應報文,卻看不到提交資料的post報文,百思不得其解,然後百度谷歌一通搜,也沒得到找到相關的解釋。實在沒辦法了,在網上發了幾個帖子,得

jsp/servlet如何進行檔案

檔案上傳 環境搭建 a) 導包: commons-fileupload-xxx.jar commons-io-xxx.jar b) 在jsp頁面配置

FastDFS實現檔案下載實戰

       正好,淘淘商城講這一塊的時候,我又想起來當時老徐讓我寫過一個關於實現FastDFS實現檔案上傳下載的使用文件,當時結合我們的ITOO的視訊系統和畢業論文系統,整理了一下,有根據網上查到的知識,總結了一點東西,下面分享一下 一、FastDFS簡介: