在我们开发项目的时候,经常会遇到大块数据的问题(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给安装一下

  1. tar -xzvf V1.0.36
  2. cd libfastcommon-1.0.
  3. ./make.sh && ./make.sh install

再把fastdfs安装一下。

  1. tar -xzvf V5.
  2. cd fastdfs-5.11
  3. ./make.sh &&./make.sh install

这样的话,我们的fast就算安装好了,因为是默认安装,所以配置文件是在 /etc/fdfs目录下,启动服务在/etc/init.d下。

  1. [root@localhost ~]# cd /etc/fdfs
  2. [root@localhost fdfs]# ls
  3. client.conf client.conf.sample storage.conf.sample storage_ids.conf.sample tracker.conf.sample
  4.  
  5. [root@localhost fdfs]# cd /etc/init.d
  6. [root@localhost init.d]# ls
  7. fdfs_storaged fdfs_trackerd functions netconsole network README
  8. [root@localhost init.d]#

然后再把两个storage.conf.sample 和 tracker.conf.sample中copy出我们需要配置的文件。

  1. [root@localhost fdfs]# cp storage.conf.sample storage.conf
  2. [root@localhost fdfs]# cp tracker.conf.sample tracker.conf
  3. [root@localhost fdfs]# ls
  4. client.conf client.conf.sample storage.conf storage.conf.sample storage_ids.conf.sample tracker.conf tracker.conf.sample
  5. [root@localhost fdfs]#

4.  tracker.conf 配置

这个配置文件,主要是配置里面的base_path。

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

指定完路径之后,我们创建一个data文件夹和tracker文件夹。

5. storage.conf 配置

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

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

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

3. 指定和哪一台trackerserver进行交互。

  1. # the name of the group this storage server belongs to
  2. #
  3. # comment or remove this item for fetching from tracker server,
  4. # in this case, use_storage_id must set to true in tracker.conf,
  5. # and storage_ids.conf must be configed correctly.
  6. group_name=group1
  7.  
  8. # the base path to store data and log files
  9. base_path=/usr/fast/fastdfs-5.11/data/storage
  10.  
  11. # path(disk or mount point) count, default value is
  12. store_path_count=
  13.  
  14. # store_path#, based , if store_path0 not exists, it's value is base_path
  15. # the paths must be exist
  16. store_path0=/usr/fast/fastdfs-5.11/data/storage/0
  17. #store_path1=/home/yuqing/fastdfs2
  18.  
  19. # tracker_server can ocur more than once, and tracker_server format is
  20. # "host:port", host can be hostname or ip address
  21. tracker_server=192.168.23.152:

然后在data目录下创建storage和0文件夹

6.启动 FastDFS,可以看到22122的端口已经启动了,说明搭建成功

  1. [root@localhost ~]# /etc/init.d/fdfs_trackerd start
  2. Starting fdfs_trackerd (via systemctl): [ OK ]
  3. [root@localhost ~]# /etc/init.d/fdfs_storaged start
  4. Starting fdfs_storaged (via systemctl): [ OK ]
  5. [root@localhost ]# netstat -tlnp
  6. Active Internet connections (only servers)
  7. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  8. tcp 0.0.0.0:22122 0.0.0.0:* LISTEN /fdfs_trackerd
  9. tcp 192.168.122.1: 0.0.0.0:* LISTEN /dnsmasq
  10. tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
  11. tcp 127.0.0.1: 0.0.0.0:* LISTEN /cupsd
  12. tcp 0.0.0.0:23000 0.0.0.0:* LISTEN /fdfs_storaged
  13. tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
  14. tcp6 ::: :::* LISTEN /sshd
  15. tcp6 ::: :::* LISTEN /cupsd
  16. tcp6 ::: :::* LISTEN /master
  17. [root@localhost ]#

三:使用C#客户端

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

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. ConnectionManager.InitializeForConfigSection(new FastDfsConfig()
  6. {
  7. FastDfsServer = new List<FastDfsServer>()
  8. {
  9. new FastDfsServer()
  10. {
  11. IpAddress="192.168.2.25",
  12. Port=
  13. }
  14. }
  15. });
  16.  
  17. var storageNode = FastDFSClient.GetStorageNode("group1");
  18.  
  19. var path = FastDFSClient.UploadFile(storageNode, new byte[], ".txt");
  20.  
  21. var rsp = FastDFSClient.DownloadFile(storageNode, path);
  22.  
  23. Debug.WriteLine("上传的文件返回路径:{0}, 下载获取文件大小:{1}", path, rsp.Length);
  24. }
  25. }

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

把项目中那些恶心的无处存储的大块数据都丢到FastDFS之快速搭建的更多相关文章

  1. 把项目中的那些恶心的无处存储的大块数据都丢到FastDFS之快速搭建

        在我们开发项目的时候,经常会遇到大块数据的问题(2M-100M),比如说保存报表中1w个人的ID号,他就像一个肿瘤一样,存储在服务器哪里都 觉得恶心,放在redis,mongodb中吧,一下子 ...

  2. 一个Web项目中实现多个数据库存储数据并相互切换用过吗?

    最近公司一个项目需要连接多个数据库(A和B)操作,根据不同的业务模块查询不同的数据库,因此需要改造下之前的spring-mybatis.xml配置文件以及jdbc.properties配置文件,项目后 ...

  3. vue项目中设置全局引入scss,使每个组件都可以使用变量

    在Vue项目中使用scss,如果写了一套完整的有变量的scss文件.那么就需要全局引入,这样在每个组件中使用. 可以在mian.js全局引入,下面是使用方法. 1: 安装node-sass.sass- ...

  4. 在java项目中怎样利用Dom4j解析XML文件获取数据

    在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进 ...

  5. WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...

  6. H5中使用Web Storage来存储结构化数据

    在上一篇对Web Storage的介绍中,可以看到,使用Storage保存key—value对时,key.value只能是字符串,这对于简单的数据来说已经够了,但是如果需要保存更复杂的数据,比如保存类 ...

  7. 【spring boot】spring boot 2.0 项目中使用mysql驱动启动创建的mysql数据表,引擎是MyISAM,如何修改启动时创建数据表引擎为【spring boot 2.0】

    默认创建数据表使用的引擎是MyISAM 2018-05-14 14:16:37.283 INFO 7328 --- [ restartedMain] org.hibernate.dialect.Dia ...

  8. Vue项目中实现tab栏和步骤条的数据联动

    也就是tab栏切换步骤条随之变化 <template>   <div>     <!-- 面包屑导航  -->     <el-breadcrumb sepa ...

  9. Linux 运维工作中的经典应用ansible(批量管理)Docker容器技术(环境的快速搭建)

    一 Ansible自动化运维工具 Python 在运维工作中的经典应用 ansible(批量管理操作) .安装ansible(需要bese epel 2种源) wget -O /etc/yum.rep ...

随机推荐

  1. bzoj3199 [Sdoi2013]escape

    这题真tm是醉了. 就是对于每个亲戚,利用其它的亲戚对他半平面交求出其控制的范围,然后随便跑个最短路就行了 n=0卡了我一下午////// #include <cstdio> #inclu ...

  2. BZOJ_2738_矩阵乘法_整体二分

    BZOJ_2738_矩阵乘法_整体二分 Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input 第一行两个数N,Q,表示矩阵大小和询问组数: 接下 ...

  3. Java关于static的作用

    概述 只要是有学过Java的都一定知道static,也一定能多多少少说出一些作用和注意事项.如果已经对static了如指掌的请点击关闭按钮,看下去也只是浪费您宝贵时间而已.这篇随笔只是个人的习惯总结. ...

  4. webpack Code Splitting浅析

    Code Splitting是webpack的一个重要特性,他允许你将代码打包生成多个bundle.对多页应用来说,它是必须的,因为必须要配置多个入口生成多个bundle:对于单页应用来说,如果只打包 ...

  5. Linux 文件/文件夹无法删除问题解决方案

    最近我们的服务器被黑客攻击,然后有些文件的属性被修改,导致我们无法删除病毒文件,同时采用 root 用户也无法删除,现在把解决方案记录下来. 普通删除 如果文件是当前用户的,那么使用 rm 命令就可以 ...

  6. 微服务架构 - 离线部署k8s平台并部署测试实例

    一般在公司部署或者真实环境部署k8s平台,很有可能是内网环境,也即意味着是无法连接互联网的环境,这时就需要离线部署k8s平台.在此整理离线部署k8s的步骤,分享给大家,有什么不足之处,欢迎指正. 1. ...

  7. MySQL 复制 - 性能与扩展性的基石 2:部署及其配置

    正所谓理论造航母,现实小帆船.单有理论,不动手实践,学到的知识犹如空中楼阁.接下来,我们一起来看下如何一步步进行 MySQL Replication 的配置. 为 MySQL 服务器配置复制非常简单. ...

  8. 《k8s-1.13版本源码分析》-调度器框架

    本文原始地址(gitbook格式):https://farmer-hutao.github.io/k8s-source-code-analysis/core/scheduler/scheduler-f ...

  9. ASP.NET Razor

    一.为什么要学习Razor? 可以让服务器代码(就是c#和vb)嵌入到网页中,也就是说这个页面中包含html代码和C#(vb)代码.基于服务器的代码可以在网页传送给浏览器时,创建动态 Web 内容.当 ...

  10. 改造断路器集群监控Hystrix Turbine实现自动注册消费者、实时监控多个服务

    在上一篇文章中,我们搭建了Hystrix Dashoard,对指定接口进行监控.但是只能对一个接口进行监听,功能比较局限: Turbine:汇总系统内多个服务的数据并显示到 Hystrix Dashb ...