FastDFS总结

news2024/12/26 21:22:20

目录

概述

什么是分布式文件系统

核心概念

目录结构

上传机制

下载机制

Linux中搭建FastDFS

常用指令

SpringBoot整合FastDFS

FastDFS集成Nginx


 

概述

FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。

FastDFS特性

  • 文件不分块存储,上传的文件和OS文件系统中的文件一一对应
  • 支持相同内容的文件只保存一份,节约磁盘空间
  • 下载文件支持HTTP协议,可以使用内置Web Server,也可以和其他Web Server配合使用
  • 支持在线扩容
  • 支持主从文件

什么是分布式文件系统

单机时代

初创时期由于时间紧迫,在各种资源有限的情况下,通常就直接在项目目录下建立静态文件夹,用于用户存放项目中的文件资源。如果按不同类型再细分,可以在项目目录下再建立不同的子目录来区分。例如:resources\static\fileresources\static\img等。

注意:

优点:便利,使用方便。

缺点:文件越多存放越混乱。

 

独立文件服务器

随着公司业务不断发展,将代码和文件放在同一服务器的弊端就会越来越明显。为了解决上面的问题引入独立图片服务器,

流程:

项目上传文件时,首先通过ftp或者ssh将文件上传到图片服务器的某个目录下,再通过Ngnix或者Apache来访问此目录下的文件,返回一个独立域名的图片URL地址,前端使用文件时就通过这个URL地址读取。

 

分布式文件系统

业务继续发展,单台服务器存储和响应也很快到达了瓶颈,新的业务需要文件访问具有高响应性、高可用性来支持系统。

优点

  • 扩展能力: 毫无疑问,扩展能力是一个分布式文件系统最重要的特点;
  • 高可用性: 在分布式文件系统中,高可用性包含两层,一是整个文件系统的可用性,二是数据的完整和一致性;
  • 弹性存储: 可以根据业务需要灵活地增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行。

缺点:系统复杂度稍高,需要更多服务器

核心概念

FastDFS服务端有三个角色:跟踪服务器(tracker)、存储服务器(storage)和客户端(client)。

tracker

跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。

 

Storage

存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。

 

Client

客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

 

Group

组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。

流程:

Tracker相当于FastDFS的大脑,不论是上传还是下载都是通过tracker来分配资源;客户端一般可以使用Ngnix等静态服务器来调用或者做一部分的缓存;存储服务器内部分为卷(或者叫做组),卷于卷之间是平行的关系,可以根据资源的使用情况随时增加,卷内服务器文件相互同步备份,以达到容灾的目的。

目录结构

上传机制

首先客户端请求tracker服务,获取到可使用的storage服务器的ip地址和端口,然后将文件上传到storage服务器,storage服务器接收到请求后生产文件,并且将文件内容保存到磁盘当中并返回file_id、路径信息、文件名等信息,客户端保存相关信息上传完毕

内部机制如下

1、选择Tracker server

当集群中不止一个Tracker server时,由于Tracker之间是完全对等的关系,客户端在upload文件时可以任意选择一个trakcer。

2、选择Storage server

当选定Group后,Tracker会在Group内选择一个Storage Server给客户端

3、选择Storage path

当分配好Storage Server后,客户端将向Storage发送写文件请求,Storage将会为文件分配一个数据存储目录。

注意:

剩余存储空间最多的优先。

4、生成Fileid

选定存储目录之后,Storage会为文件生一个Fileid,由Storage Server Ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成,然后将这个二进制串进行base64编码,转换为可打印的字符串。

5、生成文件名

当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

下载机制

客户端向tracker发送请求,tracker返回可用的storage服务器ip和端口,客户端将file_id发送给storage服务器,storage服务器将文件返回给客户端

内部机制如下

  1. client询问tracker下载文件的storage,参数为文件标识(组名和文件名)
  2. tracker返回一台可用的storage
  3. client直接和storage通讯完成文件下载

Linux中搭建FastDFS

1、下载所需要的插件和tar包

​
下载安装gcc

安装方式为yum安装(需网络):

yum install gcc-c++ perl-devel pcre-devel openssl-devel zlib-devel wget

 

下载安装FastDFS

wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz

 

下载安装FastDFS依赖

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz

​

 2、解压缩两个tar包

tar -zxvf V1.0.43.tar.gz -C /usr/local
tar -zxvf  V6.06.tar.gz-C /usr/local

 3、编译并安装(注意需要先编译安装依赖包,在编译安装FastDFS)

编译并安装libfastcommon
 cd /usr/local/libfastcommon-1.0.43/
 ./make.sh && ./make.sh install

编译并安装FastDFS
cd /usr/local/fastdfs-6.06
./make.sh && ./make.sh install

4、进入/etc/fdfs中修改配置文件的名字,fdfs只识别后缀为conf的文件为配置文件 

cd /etc/fdfs/
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

5、创建tracker服务,修改tracker.conf配置文件

创建tracker目录
mkdir -p  /data/fastdfs/tracker
修改配置文件
vim /etc/fdfs/tracker.conf
disabled=false          #启用配置文件
port=22122            #设置 tracker 的端口号
base_path=/data/fastdfs/tracker #设置 tracker 的数据文件和日志目录(需预先创建)
http.server_port=8888      #设置 http 端口号http.server_port=8888      #指的是在tracker服务器上启动http服务进程,如:apache或者nginx 启动时所监听的端口

启动tracker服务
/etc/init.d/fdfs_trackerd start
检查tracker服务
netstat -lntup | grep fdfs
tcp     0    0 0.0.0.0:22122      0.0.0.0:*        LISTEN    10757/fdfs_trackerd

 6、创建storage服务,修改storage.conf文件

创建storage目录
mkdir -p /data/fastdfs/base
mkdir -p /data/fastdfs/storage
修改配置文件
vim /etc/fdfs/storage.conf
disabled=false             #启用配置文件
group_name=group1           #组名,根据实际情况修改
port=23000               #设置 storage 的端口号
base_path=/data/fastdfs/base      #设置 storage 的日志目录(需预先创建)
store_path_count=1           #存储路径个数,需要和 store_path 个数匹配
store_path0=/data/fastdfs/storage     #存储路径
tracker_server=172.31.16.121:22122    #tracker 服务器的 IP 地址和端口号
http.server_port=8888         #设置storage上启动的http服务的端口号,如安装的nginx的端口号

启动storage服务
/etc/init.d/fdfs_storaged start
查看storage服务
netstat -lntup |grep fdfs
tcp     0    0 0.0.0.0:23000      0.0.0.0:*        LISTEN    10892/fdfs_storaged
tcp     0    0 0.0.0.0:22122      0.0.0.0:*        LISTEN    10757/fdfs_trackerd

7、需改client配置文件

vim /etc/fdfs/client.conf
connect_timeout=30
network_timeout=60
base_path=/data/fastdfs/client      # 日志路径
tracker_server=192.168.66.100:22122    # 追踪服务器的IP,有多个服务器可以另一行
创建日志目录
mkdir -p /data/fastdfs/client

查看启动的服务
ps -ef | grep fdfs

root      13080      1  0 03:12 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root      13223      1  0 03:14 ?        00:00:00 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
root      13233   7419  0 03:14 pts/0    00:00:00 grep --color=auto fdfs

 

常用指令

1上传指令

指令参数

fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]

参数含义:

  1. <config_file> :客户端配置文件路径
  2. <local_filename> :本地文件路径
  3. [storage_ip:port] :(可选参数)
  4. [store_path_index] :(可选参数)

指令使用

[root@tracker fdfs]# fdfs_upload_file /etc/fdfs/client.conf 上传的文件路径

注意:

上传文件后会返回文件在FastDFS中的唯一文件标识,即卷名+文件名

 

2下载指令

指令参数

fdfs_download_file <config_file> <file_id> [local_filename] [<download_offset> <download_bytes>]

参数含义:

  1. <config_file> :配置文件路径
  2. <file_id> :文件在FastDFS中的唯一文件标识,即卷名+文件名
  3. [local_filename] :文件下载地址
  4. <download_offset> :(可选参数)文件下载开始时间
  5. <download_bytes> :(可选参数)文件下载的字节数

指令使用

[root@tracker fdfs]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKhygVwnUUOAcgYHCCZp2Ahsb3g964.rpm /root/java/xxx.rpm

 

3查看文件信息指令

指令参数

fdfs_file_info <config_file> <file_id>

参数含义:

  1. <config_file> :配置文件路径
  2. <file_id> :文件在FastDFS中的唯一文件标识,即卷名+文件名

指令使用

[root@tracker fdfs]# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKhygVwnUUOAcgYHCCZp2Ahsb3g964.rpm

 

4删除指令

指令参数

fdfs_delete_file <config_file> <file_id>

参数含义:

  1. <config_file> :配置文件路径
  2. <file_id> :文件在FastDFS中的唯一文件标识,即卷名+文件名

指令使用

[root@tracker fdfs]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKhygVwnUUOAcgYHCCZp2Ahsb3g964.rpm

注意:

删除指令使用后,文件在该卷中的所有备份都会被删除,因为卷内的存储节点会相互同步,故慎用

SpringBoot整合FastDFS

1、引入fastdfs的依赖并且在yml文件中配置fdfs

        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.26.5</version>
        </dependency>

fdfs:
  so-timeout: 1501
  connect-timeout: 601
  thumb-image:
    width: 150
    height: 150
  tracker-list:
    - 192.168.138.102:22122

server:
  port: 8080

2、编写控制器

package com.itbaizhan.fastdfs_blog.controller;

import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class FdfsController {

    //fastdfs的客户端操作对象
    @Autowired
    private FastFileStorageClient fastFileStorageClient;

    //通过该路径跳转到上传页面
    @RequestMapping("/index")
    public String index(){
        return "index";
    }

    //处理上传业务
    @RequestMapping("/upload")
    public String upload(MultipartFile file){
        try {
            String fileName = file.getOriginalFilename();
            String suffix = fileName.substring(fileName.lastIndexOf(".")+1);
            /**
             * 参数一:文件输入流
             * 参数二:文件大小
             * 参数三:文件后缀名
             * 参数四:元对象
             */
            StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), suffix, null);
            System.out.println(storePath.getFullPath());//输出文件的唯一标识
        }catch (Exception ex){
            ex.printStackTrace();
        }
        //成功之后跳转到成功页
        return "ok";
    }

}

3、编写index.html,通过wangEditor实现文件上传

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <div id="div1">
        <p>欢迎使用<b>wangEditor</b>富文本编辑器</p>
    </div>

    <!--引入js-->
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/wangeditor@4.7.15/dist/wangEditor.js"></script>

    <script type="text/javascript">
        var E = window.wangEditor;
        const editor=new E('#div1')
        //设置文件上传的参数名称
        editor.config.uploadFileName='file'
        //配置server接口地址
        editor.config.uploadImgServer='/upload'
        //2M
        editor.config.uploadImgMaxSize=2*1024*1024
        editor.config.uploadImgAccept=['jpg','jpeg','png','gif','bmp','webp']
        //一次最多上传5个图片
        editor.config.uploadImgMaxLength=5
        editor.create()
    </script>
</body>
</html>

4、编写成功页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>完成页</title>
</head>
<body>
    上传图片成功,点击<a href="/index">返回</a>
</body>
</html>

5、启动控制器,访问路径http://localhost:8080/index跳转到文件上传页面,因为我们没有返回成功的状态码所以不管我们是否成功都无法跳转到成功页面,但是其实是已经上传成功了,大家如果想要做的更加完整可以返回一个成功的状态码,具体前往wangEditor的官网查看

但是我们可以通过控制器的输出获取到文件的唯一标识,然后在虚拟机中获取文件的信息:

 

FastDFS集成Nginx

Nginx服务器是一个高性能的web服务器与反向代理服务器。

 

FastDFS集成Nginx的2个原因

1为分布式文件系统提供Http服务支持

通过Nginx的web服务代理访问分布式文件系统的存储节点,从而实现通过http请求访问存储节点资源。

注意:

src 属性值图像文件的 URL。也就是引用该图像的文件的的绝对路径或相对路径。

 

2解决复制延迟问题

由于FastDFS的同卷的存储节点之间需要同步,当文件尚未同步完成时,访问请求到达改节点,获取的数据将是未同步完的不完整数据,即为复制延迟问题。通过Nginx检测请求的存储节点的数据,若该存储节点的数据尚未同步完成,则将请求转发至数据的原存储节点,从而解决复制延迟问题。

下载Fastdfs的Nginx模块包

​
cd /usr/local

wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz

tar -zxvf V1.22.tar.gz

​

 

安装Nginx依赖文件

yum install -y gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel gd-devel epel-release

 

下载Nginx软件包

​
wget https://nginx.org/download/nginx-1.19.2.tar.gz

tar -zxvf nginx-1.19.2.tar.gz

cd nginx-1.19.2/

​

 

配置Nginx服务器

#建立Makefile文件,检查Linux系统环境以及相关的关键属性。

./configure --add-module=/usr/local/fastdfs-nginx-module-1.22/src/

#编译项目,主要将gcc源代码编译成可执行的目标文件

make

#根据上一步骤编译完成的数据安装到预定的目录中。

make install

注意:

  • –add-module:为nginx添加一个fastdfs-nginx-module模块,值为该模块在当前系统的路径
  • –prefix:指定nginx安装位置

 

将Fastdfs软件包里面的http.conf和mime.types拷贝到/etc/fdfs目录下

cp /usr/local/fastdfs-6.06/conf/mime.types /etc/fdfs/

cp /usr/local/fastdfs-6.06/conf/http.conf /etc/fdfs/

 

配置Nginx的fastdfs模块,并编辑文件

#拷贝文件

[root@localhost opt]cp /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/

[root@localhost fdfs] vim mod_fastdfs.conf

#保存日志目录

base_path=/data/fastdfs/storage  

#tracker 服务器的 IP 地址以及端口号

tracker_server=192.168.66.100:22122

#文件url中是否有group 名

url_have_group_name = true     

#存储路径

store_path0=/data/fastdfs/storage 

group_count = 1            #设置组的个数

#然后在末尾添加分组信息,目前只有一个分组,就只写一个

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/data/fastdfs/storage

 

配置Nginx

server{

  listen 80;

  server_name localhost;

  location ~ /group[1-3]/M00 {

    alias /data/fastdfs/storage/data;

     ngx_fastdfs_module;       //使用FastDFS集成Nginx的模块

   }

  # 根目录下返回403

  location= / {

     return 403;

   }

  # log file

  access_log logs/img_access.log access;

}

启动Ningx服务

# 进入sbin目录

[root@tracker nginx]# cd sbin/

# 启动服务 -c:指定配置文件

[root@tracker sbin]# ./nginx -c /usr/local/nginx/conf/nginx.conf

 

查看服务启动情况

[root@tracker sbin]# ps -ef | grep nginx

 

启动追踪服务与存储节点服务

[root@tracker sbin]# fdfs_trackerd /etc/fdfs/tracker.conf start

[root@tracker sbin]# fdfs_storaged /etc/fdfs/storage.conf start

 

上传图片测试

将图片上传至linux系统后,使用指令上传至分布式文件系统

[root@tracker fdfs]# fdfs_upload_file /etc/fdfs/client.conf /root/xxxxx.png

group1/M00/00/00/wKhyj1wrIUWAL5ASAAAfA8PiO7Y493.png

 

通过浏览器远程访问

http://192.168.66.100/group1/M00/00/00/wKhyj1wrIfqAD3NFAAn1fNRE8_M976.png

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android输入法不使用多客户端多屏适配-Android12

Android输入法不使用多客户端多屏适配-Android12 1、IME屏幕之间切换2、属性配置3、屏幕之间切换 IME 窗口 在非默认屏幕上运行的应用 1、IME屏幕之间切换 系统使用一个 IME&#xff0c;但可以在屏幕之间切换&#xff0c;以跟踪用户焦点。Android 10 默认所有第一方和第三方 IM…

【Android】试着写一个资讯界面(含不同板块)

跟着视频做的&#xff0c;并不能动脑子&#xff0c;于是自己顺一遍流程&#xff01;&#xff08;只阅读了部分教程&#xff0c;代码不完全相同&#xff09;&#xff08;仅为静态界面不含跳转&#xff09;&#xff08;在fragment上&#xff09;此为视频链接 成果图&#xff1a; …

07-HTML-链接标签

<a> 标签定义超链接&#xff0c;用于从一张页面链接到另一张页面。<a> 元素最重要的属性是 href 属性&#xff0c;它指示链接的目标。 属性值描述downloadfilename规定被下载的超链接目标。hrefURL规定链接指向的页面的 URL。pinglist_of_URLs规定以空格分隔的 UR…

YOLOv8 人体姿态估计(关键点检测) python推理 ONNX RUNTIME C++部署

目录 1、下载权重 ​2、python 推理 3、转ONNX格式 4、ONNX RUNTIME C 部署 1、下载权重 我这里之前在做实例分割的时候&#xff0c;项目已经下载到本地&#xff0c;环境也安装好了&#xff0c;只需要下载pose的权重就可以 2、python 推理 yolo taskpose modepredict model…

ESP32设备驱动-PCA9685 LED控制器驱动

PCA9685 LED控制器驱动 文章目录 PCA9685 LED控制器驱动1、PCA9685介绍2、硬件准备3、软件准备4、驱动实现1、PCA9685介绍 PCA9685 是一款 IC 总线控制的 16 通道 LED 控制器,针对红色/绿色/蓝色/琥珀色 (RGBA) 彩色背光应用进行了优化。 每个 LED 输出都有自己的 12 位分辨率…

scala中match使用报错Scala.matchError:(of class java.lang.String)

1.遇到错误 Scala.matchError:(of class java.lang.String) 2.发现问题出在match使用中,如下写法就会报错 val partitionIndex key.toString match {case "chinese" > 0case "math" > 1case "english" > 2} 3.后来修改了写法&#xf…

【大数据学习篇3】HDFS命令操作与MR单词统计

1. HDFS命令使用 [rootmaster bin]# su hd[hdmaster bin]$ #查看/目录[hdmaster bin]$ hdfs dfs -ls / 5 #在/目录创建一个为test名字的文件夹[hdmaster bin]$ hdfs dfs -mkdir /test#查看/目录[hdmaster bin]$ hdfs dfs -ls Found 1 itemsdrwxr-xr-x - hd supergroup …

【rust】| 04——语法基础 | 函数

系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础_变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 文章目录 函数1. 定义函数…

Lecture 15:元学习Meta Learning

目录 Review Machine Learning Introduction of Meta Learning What is Meta Learning? Meta Learning的三个步骤 Meta Learning的framework&#xff1a; ML v.s. Meta Meta Learning的training What is learnable in a learning algorithm? 初始化参数θ0 Optimiz…

用 Phthon 写抽奖程序

一共 10 人参与抽奖&#xff0c;四人中奖&#xff0c;其中一人固定不变。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&#xff1a…

windows 打包 inno setup

1.下载并安装 inno setup 官网下载地址 点击下载并安装inno setup 软件,安装完成后点打开软件 在上图中点击 cancel 回到inno setup 的主界面 ①在主界面点击File -> New 然后在向导界面点击 next 填写安装信息点击next 如下图 点击next e 选择exe的位置, add folder …

实战打靶集锦-019-BTRSys2.1

提示&#xff1a;本文记录了博主的一次普通的打靶经历 目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 FTP服务探查4.2 Apache服务探查4.2.1 wpscan扫描4.2.2 Metasploit神器4.2.3 手工探查页面4.2.3.1 Appearance Editor4.2.3.2 Plugins Editor 5. 提权5.1 系统信息枚…

KVM存储池管理与磁盘格式

KVM存储池管理与磁盘格式 KVM必须配置一个目录作为存储磁盘镜像&#xff08;存储卷&#xff09;的目录&#xff0c;我们称这个目录为存储池 存储池管理 默认存储池 /var/lib/libvirt/images/ 创建基于文件夹的存储池&#xff08;目录&#xff09; mkdir -p /data/vmfs定义…

详解MySQL覆盖索引、索引下推

目录 1.覆盖索引 1.1.概述 1.2.聚集索引、非聚集索引 1.3.回表查询 1.4.覆盖索引 2.索引下推 1.覆盖索引 1.1.概述 覆盖索引&#xff0c;是为了避免“回表查询”&#xff0c;从而降低查询耗时的一种使用索引的方法&#xff0c;所以要聊覆盖索引首先我们要知道什么是&qu…

HTB-Busqueda

HTB-Busqueda 信息收集80端口 svcsvc -> root 信息收集 80端口 将ip和searcher.htb添加至/etc/hosts文件。 功能能就是你输入一个值&#xff0c;选择好搜索引擎后点击search&#xff0c;就会生成一个选择的搜索引擎里搜索你输入的值的链接。比如输入aster。 如果勾选了自动…

Github配置SSH密钥连接(附相关问题解决)

Github配置SSH密钥连接&#xff08;附相关问题解决&#xff09; 引言 当前&#xff0c;通过Git在本地仓库和远程仓库&#xff08;如Github&#xff09;之间进行操作&#xff0c;已不再支持密码验证&#xff0c;而是转为通过更安全的SSH密钥验证方式。 因此&#xff0c;本文将…

正态分布线性计算的方差推导(含协方差推导)

推导如下&#xff1a; 由于方差是每个数据与均值离差平方和的均值&#xff1a;即对Σ&#xff08;每个数据-均值&#xff09;再求一次均值&#x1f447;&#xfeff;&#xfeff; 最终Var(X) E(X&#xff09;-E&#xff08;X) 因此&#x1f447; Var(X-Y) E(X-Y)-E(X-Y) …

mysql的主从复制和读写分离

1.mysql主从复制和读写分离的相关知识 1.1 什么是读写分离? 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 …

一个用于Allen脑图谱基因数据的工具箱|abagen

艾伦人类脑图谱&#xff08;Allen Human Brain Atlas&#xff09; 艾伦人类脑图谱是一个由艾伦脑科学研究所(Allen Institute for Brain Science)开发的在线基因表达图谱数据库&#xff0c;旨在提供人类大脑各个区域的细胞类型和基因表达信息。这个数据库包含了人类全基因组微…

【C语言】通讯录(文件版)

前言 前面我们完成了通讯录的静态版本和动态版本&#xff0c;虽然功能已经比较完善了&#xff0c;但是前面的通讯录缺少了存储联系人的能力&#xff0c;所以我们学习了文件的操作管理&#xff0c;这里我们就用上一篇文章的知识来完成这次的文章吧。 关于通讯录的前两篇文章我放…