在我们开发项目的时候,经常会遇到大块数据的问题(2M-100M),比如说保存报表中1w个人的ID号,说实话,这些数据存储在服务器哪里都被嫌弃,放在redis,mongodb中吧,一下子你就会收到报警信息,因为内存满了。。。放在mysql吧???你还得建立一个text字段,也没人这么玩,而且还担心受怕别人来一个 select * ,这速度你懂的。。。直接放到硬盘吧,没扩展性,你1T大小的硬盘又能怎样,照样撑爆你,放在hadoop里面吧,对.net程序员来说,没有这个缘分,好不容易微软有一个.net hadoop sdk,说放弃就放弃了,兼具以上各种特性,最后目光只能落到FastDFS上了。

一:FastDFS

fastDFS的本意是一个分布式的文件系统,所以大家可以上传各种小文件,包括这篇聊到的那些一个点一个点的数据,同样你也可以认为是一些小文件,接下来我画一下它的大概架构图:

我来解释一下:

  • fastDFS是按照Group的形式对file进行分组存储的,这里的group1你可以理解成C盘,group2理解成D盘,所有的数据都是在Group来划分的。

  • 为了提高读取性能和热备份,我们把group1放到了两台机器上,大概可能觉得有点浪费,对吧,事实就是这样。

  • 为了提高扩展性,因为单机是有存储上限的,这时候你可以再新建一个group2,也就是D盘,放到另外机器上,这样你就扩容了,对吧。

  • trackerServer主要用来保存group和storage的一些状态信息,主要和client端进行交互,返回正确的storeage server地址,这个和hadoop的namenode其实是同一个角色的。

  • 这里要注意的一个地方就是,client端在存储file的时候,需要告诉trackerserver,你需要存储到哪一个group中,比如group1还是group2?

二:下载安装【CentOS】

为了方便测试,这里我部署到一台CentOS上

1. 安装步骤

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]# lsclient.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 配置

这个配置文件,我们主要配置三样东西。

  • 本storage服务器的groupname,大家看过架构图应该也明白了,对吧。

  • 为了提高磁盘读写,可以指定本groupname的file存储在哪些磁盘上。

  • 指定和哪一台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);}}

好了,本篇就说这么多,希望对你有帮助。

项目开发中经常有一些被嫌弃的小数据,现在全丢给 FastDFS相关推荐

  1. React项目开发中的数据管理

    原文链接:https://blog.csdn.net/hl582567508/article/details/76982756 redux中文文档:http://cn.redux.js.org/ Re ...

  2. 项目开发中常用JS表单取值方法

    项目开发中常用JS表单取值方法 一.常用表单基本取值方法(form1为表单名称,TextBox1为控件ID,以文本框为例,html控件与web服务器控件是一样的)         1.form1.Te ...

  3. aspnet是前端还是后端_项目开发中无法回避的问题:前端和后端如何合作和并行工作?...

    项目开发中无法回避的问题:前端和后端如何合作和并行工作? 前端,后端要想非常愉快的合作开发和集成,那最开始第1步就是要定义一套共用的数据模型接口.这一步是所有工作可以顺利进行的前提. 数据模型接口之后 ...

  4. ssh项目同时使用mysql跟sqlserver数据库_MSSQL_如何把sqlserver数据迁移到mysql数据库及需要注意事项,在项目开发中,有时由于项目 - phpStudy...

    如何把sqlserver数据迁移到mysql数据库及需要注意事项 在项目开发中,有时由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Serve ...

  5. IntelliJ IDEA 项目开发中各个目录的关系

    项目根目录(Project Root):本地硬盘中存放项目内容的根目录 项目名称(Project Name):IDEA 保存的项目名称,默认和项目根目录的名称相同,可以修改.有啥作用?通过 IDEA ...

  6. 项目开发中发布更新文档备注

    项目开发中 经常会遇到 某一个团队成员更新了,配置文件但是没有及时沟通导致项目发布后出现异常的情况. 这时就需要一个项目更新发布的规范说明文件,比如每次更新更改了哪些,进行文档备注. 更新的脚本文件也 ...

  7. Vue项目开发中的点滴积累系列文章

    题记 -- 严于律己,精于行动,点滴积累,着眼未来,你也许不负青春 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架 本文章 记录从基础入门到实际项目开发中的点点 ...

  8. 项目开发中对使用的第三方库统一进行管理__添加属性表/页

    最近接手的一个项目开发中用到了很多第三方库,比如boost.gdal.xerces等等这些.从接手项目到现在从中学习到了很多之前从未见识过的东西.项目绝大部分都是前辈们写的,对于里面的对第三方库的管理 ...

  9. 17.项目开发中遇到的问题(this.$parent.$parent子组件调父组件的父组件的方法不可用问题)

    前言: 在今天的项目开发中,遇到了一个问题,就是通过this.$parent.$parent.getHostInf()无法去调用其父组件的父组件的方法(因为此时获取的不是其父组件,而是包含父组件的一个 ...

最新文章

  1. 画面逐渐放大_日本80后画“人体妖女”,画面诡异,放大10倍越看越可怕
  2. 提取地图中道路_非机器学习方法·从遥感影像中提取道路
  3. GPT语言模型:通过生成式预训练改善语言理解 OpenAI 2018
  4. sql net message from client
  5. python求5_Python 5 运算符
  6. 交换机端口配置与管理
  7. 20.合并两个有序链表
  8. netty权威指南-第三章——netty入门应用
  9. 5.23低版本到高版本问题
  10. Android动画之Interpolator插入器
  11. html设计渐变背景,HTML网页设计之div渐变背景色
  12. python期权BS定价模型delta,gamma,vega,theta分析及画3D图
  13. 一个创业失败案例的复盘
  14. 《考研-数据结构-哈弗曼树-已知某段通信报文内容,对该报文进行哈弗曼编码,并计算平均码长》
  15. 《2022中国各地区科创之星势力图3.0版》重磅发布
  16. 计算机PPT中项目编号怎么弄,电脑技巧收藏家电脑基础设置幻灯片格式:项目符号和编号...
  17. 「高级java工程师」常见面试题及其答案(持续更新)
  18. 爬取百大弹幕,大家还是喜欢上罗老师的课!
  19. SAP ABAP开发个别概念理论区分理解
  20. 史上最简单的spark系列教程 | 完结

热门文章

  1. jQuery遍历not的用法
  2. hdu_1728_逃离迷宫(bfs)
  3. JQuery 判断滚动条是否到底部
  4. DbVisualizer 8 解决中文乱码问题
  5. jq html 多一个引号,为什么jQuery模板会为某些字符串添加双引号
  6. 在c语言中load,一道题理清Objective-C中的load和initialize
  7. CentOS7.2 忘记root密码解决
  8. linux 安装apache http server
  9. react学习系列之states与props
  10. 转:java的各个拓展类库的推荐方案