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

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

[[email protected] ~]# cd /etc/fdfs
[[email protected] fdfs]# ls
 client.conf client.conf.sample storage.conf.sample storage_ids.conf.sample tracker.conf.sample

[[email protected] fdfs]# cd /etc/init.d
[[email protected] init.d]# ls
fdfs_storaged  fdfs_trackerd  functions  netconsole  network  README
[[email protected] init.d]# 

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

[[email protected] fdfs]# cp storage.conf.sample storage.conf
[[email protected] fdfs]# cp tracker.conf.sample tracker.conf
[[email protected] fdfs]# ls
client.conf  client.conf.sample  storage.conf  storage.conf.sample  storage_ids.conf.sample  tracker.conf  tracker.conf.sample
[[email protected] 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的端口已经启动了,说明搭建成功

[[email protected] ~]# /etc/init.d/fdfs_trackerd start
Starting fdfs_trackerd (via systemctl):                    [  OK  ]
[[email protected] ~]# /etc/init.d/fdfs_storaged start
Starting fdfs_storaged (via systemctl):                    [  OK  ]
[[email protected] 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
[[email protected] 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);
        }
    }

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

时间: 2024-10-06 05:13:38

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

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

原文:把项目中那些恶心的无处存储的大块数据都丢到FastDFS之快速搭建     在我们开发项目的时候,经常会遇到大块数据的问题(2M-100M),比如说保存报表中1w个人的ID号,他就像一个肿瘤一样,存储在服务器哪里都 觉得恶心,放在redis,mongodb中吧,一下子你就会收到报警,因为内存满了...放在mysql吧???你还得建立一个text字段,和一些小字段混在一起, 还是有点恶心,还得单独拆出来,还得怕有些sql不规范的人挺喜欢select * 的,这速度挺恶心的呀...直接放到硬盘

任正非:向谷歌学习,杀出一条血路(谷歌军团的编制不大,战斗力极强。任何产品都是架构第一。算法团队直接杀入到项目中去,一线既有算法又有数据,就容易突破,抽象的平台一定要有实践东西检验。蓝军不一定是有学历的。我们帮助他们在工作中完成学历教育)

IT之家1月22日消息 日前,华为心声社区公布了任正非在1月9日在杭州研究所业务汇报会上的讲话.在本次讲话中,任正非表示在软件工程能力提升上,我们最缺乏的是对宏观架构有清醒认识的人才.建立公司是一个架构:建立公司的利益体系也是一个架构:任何产品都是架构第一:软件重构一定要从宏观架构入手. 任正非强调,没有谁在限制我们的科研,我们也不要自己约束了自己,要敢于到贴近人才资源的地方进行研究活动,在每个研究所形成自己的技术要素,对行业发展形成牵引.要多和终端.外研所交流. 最后任正非表示,谷歌军团的编制

在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析

在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析 低成本的Blob存储是一个强大的,通用的Hadoop兼容Azure存储解决方案无缝集成HDInsight.通过Hadoop分布式文件系统(HDFS)接口,完整的组件集合在HDInsight可以 在Blob存储数据的直接操作.在本教程中,学习如何建立一个容器的Blob存储,然后在里面处理的数据. 在BLOB存储中存储的数据能够用于计算的HDInsight集群被安全地删除,而不会丢失用户数据. 注意: 该ASV://语法中不支持

项目中常用功能,如:流媒体、健康数据(步数等)等-b

整理iOS开发中使用的各种流媒体和常用的高级功能.由于时间关系,目前只写了一部分功能,全部都采用的是系统方法,没用第三方,截图如下: screen1.png screen2.png 个人比较懒,不爱多写文字,直接上代码,哈哈. 视频 系统用AVFoundation与MediaPlayer框架实现播放视频的方案.其中AVFoundation扩展性好,都需自定义功能,而MediaPlayer集成简单,但是样式不可扩展. 1.AVFoundation使用AVPlayer播放视频,它属于view的lay

在C#项目中需要用double类型操作MSSQL float类型数据(附C#数据类型和SQL数据类型对照)

C#操作SQL Float类型,数据会多很多小数,原来是C#的float和sql的float类型不一致.以下是数据库中与C#中的数据类型对照. /// <summary> /// 数据库中与C#中的数据类型对照 /// </summary> /// <param name="type"></param> /// <returns></returns> private string ChangeToCSharpTyp

项目中树形结构的添加与立即删除该数据问题

立即添加是可以的,但是想把刚添加的那条数据删除就不行了.得不到数据的id值: 处理方法:我写了一个sql语句,在添加之后,把数据中最大的id值取出来,添加在节点上,这样就可以保证立即添加的数据,就可以立即删除了. $.ajax({ type: 'POST', url: '/yxt-admin/admin/address/insert', data:{ name:name, pid:treeNode.id, codeValue:$('#code_value').textbox('getValue'

VS2017项目中使用代码连接MySQL数据库,以及进行数据添加

//头文件 #include "mysql.h" //函数定义 // 执行sql语句, 包括增加.删除.更新数据 bool ExecuteSql(MYSQL m_mysql,const char * sql) { if (mysql_query(&m_mysql, sql)) { // 打错误log,这里直接显示到控制台 cerr << "执行sql语句失败,错误信息为: " << mysql_error(&m_mysql)

【spring-boot】spring-boot项目中,通过JAVA配置类形式配置前台代码都重定向转发

以下是MyMvcConfig.java配置类的代码,可供参考: package com.springboot.config; import com.springboot.conponent.LoginHanderInterceptor; import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.context.annotation.Be

Shuttle ESB(六)——在项目中的应用

如果说你认真看了前面几篇关于ESB的介绍,我相信,在这一篇文章中,你将会找到很多共鸣. 尽管,市面上开源的ESB确实非常之多,像Java中的Mule ESB,Jboss ESB:.Net中的NServiceBus.而Shuttle ESB是一个新兴的开源框架,网络上资源也比较少.我们当初为什么会选用Shuttle ESB呢? 正所谓没有最好,只有更合适.多次调研发现,Shuttle ESB有以下几大优点:1.Shuttle ESB是基于EDA的:2.Shuttle ESB的实现以发布订阅为核心: