把項目中那些噁心的無處存儲的大塊數據都丟到FastDFS之快速搭建

来源:http://www.cnblogs.com/huangxincheng/archive/2017/11/30/7928345.html
-Advertisement-
Play Games

在我們開發項目的時候,經常會遇到大塊數據的問題(2M-100M),比如說保存報表中1w個人的ID號,他就像一個腫瘤一樣,存儲在伺服器哪裡都 覺得噁心,放在redis,mongodb中吧,一下子你就會收到報警,因為記憶體滿了。。。放在mysql吧???你還得建立一個text欄位,和一些小欄位混在一起, ...


       在我們開發項目的時候,經常會遇到大塊數據的問題(2M-100M),比如說保存報表中1w個人的ID號,他就像一個腫瘤一樣,存儲在伺服器哪裡都

覺得噁心,放在redis,mongodb中吧,一下子你就會收到報警,因為記憶體滿了。。。放在mysql吧???你還得建立一個text欄位,和一些小欄位混在一起,

還是有點噁心,還得單獨拆出來,還得怕有些sql不規範的人挺喜歡select * 的,這速度挺噁心的呀。。。直接放到硬碟吧,沒擴展性,你1T大小的硬碟又能

怎樣,照樣撐爆你,放在hadoop裡面吧,對.net程式員來說,沒有這個緣分,好不容易微軟有一個.net hadoop sdk,說放棄就放棄了,兼具以上各種特性,

最後目光只能落到FastDFS上了。

 

一: FastDFS

      fastDFS的本意是一個分散式的文件系統,所以大家可以上傳各種小文件,包括這篇和大家說到的那些一坨一坨的數據,同樣你也可以認為是一些小文件,

下麵我畫一下它的大概架構圖:

 

我來解釋一下:

1.  fastDFS是按照Group的形式對file進行分組存儲的,這裡的group1你可以理解成C盤,group2理解成D盤,所有的數據都是在Group來劃分的。

2.  為了提高讀取性能和熱備份,我們把group1放到了兩台機器上,大概可能覺得有點浪費,對吧,事實就是這樣。

3.  為了提高擴展性,因為單機是有存儲上限的,這時候你可以再新建一個group2,也就是D盤,放到另外機器上,這樣你就擴容了,對吧。

4.  trackerServer主要用來保存group和storage的一些狀態信息,主要和client端進行交互,返回正確的storeage server地址,這個和hadoop的

     namenode其實是同一個角色的。

5. 這裡要註意的一個地方就是,client端在存儲file的時候,需要告訴trackerserver,你需要存儲到哪一個group中,比如group1還是group2?

 

二:下載安裝【CentOS】

     為了方便測試,這裡我部署到一臺CentOS了。

 

1. 下載fastDFS基礎包: https://github.com/happyfish100/libfastcommon/releases

2. 然後下載fast源碼包:https://github.com/happyfish100/fastdfs/releases

   

3. wget之後,先把libfastcommon給安裝一下

tar -xzvf V1.0.36
cd libfastcommon-1.0.36
./make.sh && ./make.sh install

  再把fastdfs安裝一下。

tar -xzvf V5.11
cd fastdfs-5.11
./make.sh &&./make.sh install

 

這樣的話,我們的fast就算安裝好了,因為是預設安裝,所以配置文件是在 /etc/fdfs目錄下,啟動服務在/etc/init.d下。

[root@localhost ~]# cd /etc/fdfs
[root@localhost fdfs]# ls
 client.conf client.conf.sample storage.conf.sample storage_ids.conf.sample tracker.conf.sample

[root@localhost fdfs]# cd /etc/init.d
[root@localhost init.d]# ls
fdfs_storaged  fdfs_trackerd  functions  netconsole  network  README
[root@localhost init.d]# 

 

  然後再把兩個storage.conf.sample 和 tracker.conf.sample中copy出我們需要配置的文件。

[root@localhost fdfs]# cp storage.conf.sample storage.conf
[root@localhost fdfs]# cp tracker.conf.sample tracker.conf
[root@localhost fdfs]# ls
client.conf  client.conf.sample  storage.conf  storage.conf.sample  storage_ids.conf.sample  tracker.conf  tracker.conf.sample
[root@localhost fdfs]# 

 

  4.  tracker.conf 配置

    這個配置文件,主要是配置裡面的base_path。

# the base path to store data and log files
base_path=/usr/fast/fastdfs-5.11/data/tracker

   指定完路徑之後,我們創建一個data文件夾和tracker文件夾。

 

5. storage.conf 配置

    這個配置文件,我們主要配置三樣東西。

1.  本storage伺服器的groupname,大家看過架構圖應該也明白了,對吧。

2.  為了提高磁碟讀寫,可以指定本groupname的file存儲在哪些磁碟上。

3. 指定和哪一臺trackerserver進行交互。

# the name of the group this storage server belongs to
#
# comment or remove this item for fetching from tracker server,
# in this case, use_storage_id must set to true in tracker.conf,
# and storage_ids.conf must be configed correctly.
group_name=group1


# the base path to store data and log files
base_path=/usr/fast/fastdfs-5.11/data/storage

# path(disk or mount point) count, default value is 1
store_path_count=1

# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/usr/fast/fastdfs-5.11/data/storage/0
#store_path1=/home/yuqing/fastdfs2

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.23.152:22122

 

然後在data目錄下創建storage和0文件夾

 

6.啟動 FastDFS,可以看到22122的埠已經啟動了,說明搭建成功

[root@localhost ~]# /etc/init.d/fdfs_trackerd start
Starting fdfs_trackerd (via systemctl):                    [  OK  ]
[root@localhost ~]# /etc/init.d/fdfs_storaged start
Starting fdfs_storaged (via systemctl):                    [  OK  ]
[root@localhost 0]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      4346/fdfs_trackerd  
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1786/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1129/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1128/cupsd          
tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      4171/fdfs_storaged  
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1556/master         
tcp6       0      0 :::22                   :::*                    LISTEN      1129/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1128/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1556/master         
[root@localhost 0]# 

 

三:使用C#客戶端

     在github上有一個C#的客戶端,大概可以使用一下:https://github.com/smartbooks/FastDFS.Client   或者通過nuget上搜一下:

 

class Program
    {
        static void Main(string[] args)
        {
            ConnectionManager.InitializeForConfigSection(new FastDfsConfig()
            {
                FastDfsServer = new List<FastDfsServer>()
                {
                    new FastDfsServer()
                    {
                         IpAddress="192.168.2.25",
                          Port=22122
                    }
                }
            });

            var storageNode = FastDFSClient.GetStorageNode("group1");

            var path = FastDFSClient.UploadFile(storageNode, new byte[10000], ".txt");

            var rsp = FastDFSClient.DownloadFile(storageNode, path);

            Debug.WriteLine("上傳的文件返迴路徑:{0}, 下載獲取文件大小:{1}", path, rsp.Length);
        }
    }

 

 

好了,本篇就說這麼多了,希望對你有幫助。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • OLAP也稱決策支持系統(Decision Support System,DSS),是數據倉庫系統的主要應用形式,使分析人員、管理人員或執行人員能夠從多種角度對從原始數據中轉化出來的、能夠真正為用戶所理解的、並真實反映企業維特性的信息進行快速、一致、交互地存取,從而獲得對數據的更深入瞭解的一類軟體技... ...
  • 北京賽車的玩法豐富多樣,但其實都是很簡單,只要用心理解。根本不成問題多看走勢圖,不是看一兩次。而是每天抽空閑的時間去留意。方便藉助參考。懂得看走勢會操作的讓人才能在彩界如水的魚。如果你不行,並不代表我不行。給你自己一個機會。只要你敢跟我,我絕對會讓你今天所做出的決定而感到欣慰,我沒有華麗的語言一切靠 ...
  • 原公司用的資料庫是Oracle和MySQL居多,寫的SQL語句也比較少,有些生疏了。現在的公司使用的DB2資料庫,完全沒接觸過,導致一些函數的使用要在網上搜索案例,現在總結一點DB2的函數使用方法。 正確需求:查詢出指定日期的工作日,頁面傳一個天數,並返回一個新的日期。 下麵是時間表欄位: 剛開始項 ...
  • 表名:products 欄位:product_id、product_name、product_price、vend_id(供應商) 12.1聚集函數: 我們常常需要彙總數據,而不是把數據檢索出來,MySQL提供了專門的函數。 檢索例子: 確定表中行數 獲得表中行組的和 找出表列 MySQL提供了5個 ...
  • 一、kafka安裝(集群模式) 1、安裝前準備 機器:10.199.240.232,10.199.206.20 kafka版本:2.12-0.10.1.1 下載地址; https://mirrors.tuna.tsinghua.edu.cn/apache/ 相關目錄: /apps/svr/kafka ...
  • 經過一段時間的學習,對於Hadoop有了一些瞭解,於是決定用MapReduce實現PageRank演算法,以下簡稱PR 先簡單介紹一下PR演算法(摘自百度百科:https://baike.baidu.com/item/google%20pagerank/2465380?fr=aladdin&fromid ...
  • 跟蹤標記:610 功能: 用批量導入操作(Bulk Import Operations)載入數據時,對於索引組織表(即有聚集索引的表) 最小化日誌; 上圖為simple/bulk-logged恢復模式下,最小化日誌的幾種操作,其中包含了批量導入操作,而批量導入操作的最小化日誌有一些前提條件,概括如下 ...
  • 系統環境:Ubuntu 16.04 LTS. 安裝robomongo Robo 3T,運行時報以下錯誤: 可以嘗試按照以下方法解決: 即將robo3t解壓目錄下的/lib/libstdc++*所匹配的文件移到備份一個備份目錄中,然後再嘗試啟動robo3t,可以解決該問題。 如何將robo3t添加到U ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...