当前位置: 首页 > article >正文

Mongodb分片模式部署

MongoDB 分片集群部署教程

在这里插入图片描述

1. 概述

MongoDB 分片是一种用于处理大规模数据集的集群技术。通过分片,MongoDB 可以将数据分布在多个服务器上,从而提高存储容量和读写性能。本教程将详细介绍如何从零开始部署 MongoDB 分片集群。

介绍

分片集群中主要由三个部分组成,即分片服务器(Shard)、路由服务器(Mongos)以及配置服务器(Config Server)组成。其中,分片服务器有三个,即Shard1、Shard2、Shard3;路由服务器有两个,即Mongos1和Mongos2;配置服务器有三个,即主、副、副。

分片服务器

即MongoDB实例(即mongod,用Shard表示),分片服务器是实际存储数据的组件,持有完整数据集中的一部分,每个分片服务器都可以是一个MongoDB实例,也可是一组MongoDB实例组成的集群(副本集)。从MongoDB 3.6开始,必须将分片部署为副本集,这样具有更好的容错性。

路由服务器

即mongos,路由服务器主要提供客户端应用程序与分片集群交互的接口,所有请求都需要通过路由服务器进行协调工作。路由服务器实际上就是一个消息分发请求中心,它负责把客户端应用程序对应的数据请求转发到对应的分片服务器上。应用程序将查询、存储、更新等请求原封不动地发送给路由服务器。路由服务器询问配置服务器操作分片服务器需要获取哪些元数据,然后连接相应的分片服务器进行相关操作,最后将各个分片服务器的响应进行合并,返回给客户端应用程序。
生产环境中,一个分片集群通常会有多个路由服务器,一方面可以解决多个客户端同时请求,从而达到负载均衡的效果;另一方面可以解决当路由服务器宕机时导致整个分片集群无法使用的问题。

配置服务器

即Config Server。在生产环境中,通常需要多个配置服务器,因为它存储了分片集群的元数据,并且这些数据是不允许丢失的。因此,需要配置多个配置服务器以防止数据丢失,尽管其中一台分片服务器宕机,我们还有其它配置服务器,从而保证MongoDB分片集群依然能够正常工作。从MongoDB 3.4版本开始,配置服务器必须部署副本集,因此我们需要配置三个配置服务器组成的副本集。
配置服务器存储着分片集群的持久化元数据,而路由服务器存储着分片集群的非持久化元数据,这些数据均为内存缓存的数据。当路由服务器初次启动或关闭重启时,就会从配置服务器中加载分片集群的元数据。若是配置服务器的信息发生变化,则会通知所有路由服务器更新自己的状态,这样路由服务器就能继续准确的协调客户端与分片集群的交互工作。
在这里插入图片描述

2. 环境准备

在开始部署之前,确保已经准备好以下环境:

  • 三台服务器(例如:nosql01, nosql02, nosql03)
  • MongoDB 安装包
  • 每台服务器上已创建 user_mongo 用户
虚拟机名称服务器名称IP地址Shard1Shard2Shard3mongosConfig Server
NoSQL_1nosql01192.168.121.13427018主节点27020仲裁节点27019副节点2702127022主节点
NoSQL_2nosql02192.168.121.13527019副节点27018主节点27020仲裁节点2702127022副节点
NoSQL_3nosql03192.168.121.13627020仲裁节点27019副节点27018主节点27022副节点

(1)/opt/servers/mongodb_demo/shardcluster/:存放分片集群的相关配置文件目录、日志文件目录和数据目录等内容。
(2)/opt/servers/mongodb_demo/shardcluster/configServer/configFile:存放配置服务器的配置文件。
(3)/opt/servers/mongodb_demo/shardcluster/configServer/data:存放配置服务器的数据文件。
(4)/opt/servers/mongodb_demo/shardcluster/configServer/logs:存放配置服务器的日志文件。
(5)/opt/servers/mongodb_demo/shardcluster/shard/configFile:存放分片服务器的配置文件。
(6)/opt/servers/mongodb_demo/shardcluster/shard/shard1_data:存放分片服务器1的数据文件。
(7)/opt/servers/mongodb_demo/shardcluster/shard/shard2_data:存放分片服务器2的数据文件。
(8)/opt/servers/mongodb_demo/shardcluster/shard/shard3_data:存放分片服务器3的数据文件。
(9)/opt/servers/mongodb_demo/shardcluster/shard/logs:存放分片服务器的日志文件。
(10)/opt/servers/mongodb_demo/shardcluster/mongos/configFile:存放路由服务器的配置文件。
(11)/opt/servers/mongodb_demo/shardcluster/mongos/logs:存放路由服务器的日志文件。

3. 部署 MongoDB

3.1 上传并解压 MongoDB 安装包

  1. 将 MongoDB 安装包上传到 nosql01 服务器的 /opt/software/ 目录下。
  2. 修改安装包的用户和用户组权限为 user_mongo
  3. 解压安装包到 /opt/servers/mongodb_demo/shardcluster/ 目录下:
    $ tar -zxvf /opt/software/mongodb-linux-x86_64-rhel70-4.2.2.tgz -C /opt/servers/mongodb_demo/shardcluster/
    
  4. 重命名解压后的目录为 mongodb
    $ mv mongodb-linux-x86_64-rhel70-4.2.2/ mongodb
    

3.2 分发 MongoDB 安装包

mongodb 目录分发到 nosql02nosql03 服务器:

$ scp -r /opt/servers/mongodb_demo/shardcluster/mongodb/ user_mongo@nosql02:/opt/servers/mongodb_demo/shardcluster/mongodb/
$ scp -r /opt/servers/mongodb_demo/shardcluster/mongodb/ user_mongo@nosql03:/opt/servers/mongodb_demo/shardcluster/mongodb/

4. 部署 Config Server

4.1 创建配置文件

  1. nosql01/configServer/configFile/ 目录下创建配置文件 mongodb_config.conf
    $ touch /opt/servers/mongodb_demo/shardcluster/configServer/configFile/mongodb_config.conf
    
  2. 编辑 mongodb_config.conf,添加以下内容:
    # 数据文件存放路径
    dbpath=/opt/servers/mongodb_demo/shardcluster/configServer/data# 日志文件路径
    logpath=/opt/servers/mongodb_demo/shardcluster/configServer/logs/config_server.log# MongoDB 服务监听的端口号
    port=27022# 绑定 IP 地址,指定 MongoDB 服务监听的网络接口
    bind_ip=nosql01# 以追加方式写入日志文件
    logappend=true# 以守护进程方式运行 MongoDB
    fork=true# 最大同时连接数
    maxConns=5000# 复制集名称
    replSet=configs# 声明这是一个集群的 Config Server
    configsvr=true
    

4.2 分发配置文件

将配置文件分发到 nosql02nosql03

$ scp /opt/servers/mongodb_demo/shardcluster/configServer/configFile/mongodb_config.conf user_mongo@nosql02:/opt/servers/mongodb_demo/shardcluster/configServer/configFile/
$ scp /opt/servers/mongodb_demo/shardcluster/configServer/configFile/mongodb_config.conf user_mongo@nosql03:/opt/servers/mongodb_demo/shardcluster/configServer/configFile/
  1. 修改 nosql02nosql03 上的 bind_ip 为各自的 IP 地址。

4.3 启动 Config Server

在三台服务器上启动 Config Server:

$ ./mongod -f /opt/servers/mongodb_demo/shardcluster/configServer/configFile/mongodb_config.conf

4.4 配置 Config Server 副本集

在任意一台服务器上初始化副本集:

$ ./mongo --host nosql01 --port 27022
> rs.initiate()
configs:SECONDARY> rs.add('nosql02:27022')
configs:PRIMARY> rs.add('nosql03:27022')

5. 部署 Shard

5.1 创建配置文件

  1. nosql01/shard/configFile/ 目录下创建三个配置文件 mongodb_shard1.conf, mongodb_shard2.conf, mongodb_shard3.conf

    $ touch /opt/servers/mongodb_demo/shardcluster/shard/configFile/mongodb_shard1.conf
    $ touch /opt/servers/mongodb_demo/shardcluster/shard/configFile/mongodb_shard2.conf
    $ touch /opt/servers/mongodb_demo/shardcluster/shard/configFile/mongodb_shard3.conf
    
  2. 编辑 mongodb_shard1.conf,添加以下内容:

    # 数据文件存放路径
    dbpath=/opt/servers/mongodb_demo/shardcluster/shard/shard1_data# 日志文件路径
    logpath=/opt/servers/mongodb_demo/shardcluster/shard/logs/shard1.log# MongoDB 服务监听的端口号
    port=27018# 绑定 IP 地址,指定 MongoDB 服务监听的网络接口
    bind_ip=nosql01# 以追加方式写入日志文件
    logappend=true# 以守护进程方式运行 MongoDB
    fork=true# 最大同时连接数
    maxConns=5000# 复制集名称
    replSet=shard1
    
  3. 类似地,编辑 mongodb_shard2.confmongodb_shard3.conf,分别修改 dbpath, logpath, port, bind_ip, 和 replSet 参数。

5.2 启动 Shard

在三台服务器上启动 Shard:

$ ./mongod -f /opt/servers/mongodb_demo/shardcluster/shard/configFile/mongodb_shard1.conf
$ ./mongod -f /opt/servers/mongodb_demo/shardcluster/shard/configFile/mongodb_shard2.conf
$ ./mongod -f /opt/servers/mongodb_demo/shardcluster/shard/configFile/mongodb_shard3.conf

5.3 配置 Shard 副本集

在每台服务器上初始化副本集:

$ ./mongo --host nosql01 --port 27018
> rs.initiate()
shard1:SECONDARY> rs.add('nosql02:27019')
shard1:PRIMARY> rs.addArb('nosql03:27020')

6. 部署 mongos

6.1 创建配置文件

  1. nosql01/mongos/configFile/ 目录下创建配置文件 mongodb_mongos.conf
    $ touch /opt/servers/mongodb_demo/shardcluster/mongos/configFile/mongodb_mongos.conf
    
  2. 编辑 mongodb_mongos.conf,添加以下内容:
    # 日志文件路径
    logpath=/opt/servers/mongodb_demo/shardcluster/mongos/logs/mongos.log# 以追加方式写入日志文件
    logappend=true# MongoDB 服务监听的端口号
    port=27021# 绑定 IP 地址,指定 MongoDB 服务监听的网络接口
    bind_ip=nosql01# 以守护进程方式运行 MongoDB
    fork=true# 指定 Config Server 地址
    configdb=configs/nosql01:27022,nosql02:27022,nosql03:27022# 最大同时连接数
    maxConns=20000
    

6.2 分发配置文件

将配置文件分发到 nosql02

$ scp /opt/servers/mongodb_demo/shardcluster/mongos/configFile/mongodb_mongos.conf user_mongo@nosql02:/opt/servers/mongodb_demo/shardcluster/mongos/configFile/
  1. 修改 nosql02 上的 bind_ipnosql02

6.3 启动 mongos

nosql01nosql02 上启动 mongos:

$ ./mongos -f /opt/servers/mongodb_demo/shardcluster/mongos/configFile/mongodb_mongos.conf

7. 启动分片功能

7.1 登录 mongos

nosql01 上登录 mongos:

$ ./mongo --host nosql01 --port 27021

7.2 添加 Shard

向分片集群中添加 Shard:

mongos> use gateway
mongos> sh.addShard("shard1/nosql01:27018,nosql02:27019,nosql03:27020")
mongos> sh.addShard("shard2/nosql01:27020,nosql02:27018,nosql03:27019")
mongos> sh.addShard("shard3/nosql01:27019,nosql02:27020,nosql03:27018")

8. 分片基本操作

8.1 设置 chunk 大小

块大小的作用
数据分片:

MongoDB 将分片集合中的数据划分为多个块(chunk),每个块是一个连续的范围(range)。

默认情况下,每个块的大小为 64MB。

数据均衡:

当某个分片上的块数量过多或数据分布不均匀时,MongoDB 会自动触发数据迁移(chunk migration),将块从一个分片迁移到另一个分片,以实现数据均衡。

性能影响:

块大小会影响数据迁移的频率和性能。较小的块可以更精细地分布数据,但会增加迁移的频率;较大的块会减少迁移频率,但可能导致数据分布不均匀。

默认块大小

MongoDB 的默认块大小是 64MB。这个值在大多数场景下是一个合理的折衷方案。

查看 chunk 大小:

mongos> use config
mongos> db.settings.findOne({ _id: "chunksize" });

将 chunk 大小设置为 1MB:

mongos> use config
mongos> db.settings.save({"_id":"chunksize","value":1})

注意
在 MongoDB 5.0 及以上版本中,save() 方法已被弃用,不再支持。你需要使用 insertOne() 或 updateOne() 方法来插入或更新文档。

如果 config.settings 集合中还没有 chunksize 的记录,可以使用 insertOne() 插入新文档:

use config;
db.settings.insertOne({ _id: "chunksize", value: 1 });

如果 config.settings 集合中已经有 chunksize 的记录,可以使用 updateOne() 更新文档:

use config;
db.settings.updateOne({ _id: "chunksize" }, // 查询条件{ $set: { value: 1 } }, // 更新操作{ upsert: true } // 如果不存在则插入
);

8.2 模拟写入数据

创建数据库 school 并向集合 user 中插入 50000 条文档:

mongos> use school
mongos> for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}

8.3 启用数据库分片

启用数据库 school 的分片功能:

mongos> use gateway
mongos> sh.enableSharding("school")

8.4 对集合进行分片

为集合 user 创建索引并进行分片:

mongos> use school
mongos> db.user.createIndex({"id":1})
mongos> sh.shardCollection("school.user",{"id":1})

9. 验证分片集群

9.1 查看分片信息

查看数据库 school 中集合 user 的分片信息:

mongos> sh.status()

9.2 验证数据分布

通过查询不同分片上的数据,验证数据是否均匀分布:

mongos> db.user.getShardDistribution()

10. 安全认证(可选)

10.1 创建 KeyFile

  1. 生成 KeyFile:
    $ openssl rand -base64 756 > /opt/servers/mongodb_demo/shardcluster/keyfile
    $ chmod 400 /opt/servers/mongodb_demo/shardcluster/keyfile
    
  2. 将 KeyFile 分发到所有服务器:
    $ scp /opt/servers/mongodb_demo/shardcluster/keyfile user_mongo@nosql02:/opt/servers/mongodb_demo/shardcluster/
    $ scp /opt/servers/mongodb_demo/shardcluster/keyfile user_mongo@nosql03:/opt/servers/mongodb_demo/shardcluster/
    

10.2 修改配置文件

在所有服务器的配置文件中添加以下内容:

# 启用安全认证
security:keyFile: /opt/servers/mongodb_demo/shardcluster/keyfile

10.3 重启集群

重启所有 MongoDB 服务以应用安全认证配置。

10.4 创建管理员用户

在 mongos 上创建管理员用户:

mongos> use admin
mongos> db.createUser({user: "admin", pwd: "admin123", roles: ["root"]})

10.5 验证安全认证

以安全认证模式登录 mongos:

$ ./mongo --host nosql01 --port 27021 -u admin -p admin123 --authenticationDatabase admin

11. 集群关闭

11.1 Mongosr、Shard、Configserver依次关闭

在关闭集群之前先关闭平衡器(Balancer)

$ ./mongo --host nosql01 --port 27021 
mongos> use gateway
mongos> sh.stopBalancer()

相关文章:

Mongodb分片模式部署

MongoDB 分片集群部署教程 1. 概述 MongoDB 分片是一种用于处理大规模数据集的集群技术。通过分片&#xff0c;MongoDB 可以将数据分布在多个服务器上&#xff0c;从而提高存储容量和读写性能。本教程将详细介绍如何从零开始部署 MongoDB 分片集群。 介绍 分片集群中主要由三…...

ElementPlus 快速入门

目录 前言 为什么要学习 ElementPlus&#xff1f; 正文 步骤 1 创建 一个工程化的vue 项目 ​2 安装 element-Plus :Form 表单 | Element Plus 1 点击 当前界面的指南 2 点击左边菜单栏上的安装&#xff0c;选择包管理器 3 运行该命令 demo(案例1 &#xff09; 步骤 …...

C++输入输出流第二弹:文件输入输出流and字符串输入输出流

目录 文件输入输出流&#xff08;重点&#xff09; 文件输入流 文件输入流对象的创建 对测试代码进行解读&#xff1a; 1. 代码核心逻辑 2. 读取过程详解 3. 关键特性总结 4. 注意事项 5. 完整流程示例 这里既然提到了 >> 流&#xff0c;那么就对他进行进一步的…...

Kubernetes集群中部署SonarQube服务

以下是在Kubernetes集群中部署SonarQube服务的分步指南&#xff0c;包含持久化存储、数据库配置和高可用性建议&#xff1a; 1. 前置条件 已部署Kubernetes集群&#xff08;版本≥1.19&#xff09;安装kubectl和helm工具配置StorageClass&#xff08;如NFS、Ceph、EBS等&#…...

深度解析 | Android 12系统级禁用SIM卡功能实现与Framework层定制

一、需求背景与实现原理 在Android系统定制开发中&#xff0c;彻底禁用SIM卡功能是某些行业设备&#xff08;如安全终端、Kiosk模式设备&#xff09;的常见需求。不同于常规的SIM卡状态管理&#xff0c;该功能需要实现&#xff1a; 硬件级禁用 - 即使插入SIM卡也无法识别 系统…...

TCP传输---计算机网络

TCP结构 源端口和目标端口&#xff1a;标识通信的应用程序。序列号&#xff1a;标记发送的数据段的顺序序号。确认号 ( ACK)&#xff1a;确认接收到的数据序号。标志位&#xff1a;控制连接状态&#xff0c;包括 SYN&#xff08;同步&#xff09;、ACK&#xff08;确认&#xf…...

STM32学习笔记之常用外设接口(原理篇)

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

nginx服务配置练习

题目&#xff1a; 使用基于账号访问的配置&#xff0c;来配置通过 www.haha.com:8080/custom/index.html 访问时显示“你可以访问”&#xff0c;如果是 www.haha.com:8080/requir/index.html 则提示需要用户名和密码才能访问。 创建身份认证文件 [rootlocalhost conf.d]# ht…...

基于TweenMax和SVG的炫酷弹性进度条动画特效

这是一款效果非常炫酷的基于TweenMax和SVG的炫酷弹性进度条动画特效。该弹性进度条特效在点击触发按钮之后&#xff0c;按钮会变形为进度条&#xff0c;然后一个滑块在它上面滑动&#xff0c;就像重物滑过绳子的感觉&#xff0c;非常有创意。 在线演示 使用方法 该弹性进度条效…...

机器视觉工程师如何看机器视觉展会,有些机器视觉兄弟参加机器视觉展会,真的是参加了?重在参与?

作为机器视觉工程师,参加机器视觉展会不仅是了解行业前沿技术的窗口,也是拓展专业网络、寻找解决方案的重要机会。以下是结合展会信息和工程师视角的综合建议: 一、聚焦技术趋势与创新应用 参与技术论坛与研讨会 展会同期的技术论坛是获取行业洞见的核心渠道。例如: 上海展…...

【例6.5】活动选择(信息学奥赛一本通-1323)

【题目描述】 学校在最近几天有n个活动&#xff0c;这些活动都需要使用学校的大礼堂&#xff0c;在同一时间&#xff0c;礼堂只能被一个活动使用。由于有些活动时间上有冲突&#xff0c;学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。 现在给出n个活动使用礼堂的起…...

ngrep :网络嗅探的利器

在网络安全、渗透测试和系统调试领域&#xff0c;捕获和分析网络流量是不可或缺的技能。虽然像 tcpdump 和 Wireshark 这样的工具广为人知&#xff0c;但有一个轻量级且功能强大的工具却常常被忽视——ngrep。本文将详细介绍 ngrep 的功能、使用方法及其在实际场景中的应用&…...

HCIE是否必须培训?

一、官方政策&#xff1a;不强制培训&#xff0c;但实操门槛高 根据华为认证官网最新规定&#xff0c;HCIE考试不强制要求参加官方培训&#xff0c;考生可直接报名。但需注意以下隐性门槛&#xff1a; 实验环境限制&#xff1a; HCIE实验考试涉及 真机操作&#xff08;如CE交换…...

python面试高频考点(深度学习大模型方向)

1. python中yeild和return的区别&#xff1f; 2. 介绍一下pytohn中的上下文管理器&#xff1f; 在Python中&#xff0c;上下文管理器&#xff08;Context Manager&#xff09; 是一种通过 with 语句管理资源的协议&#xff0c;确保资源&#xff08;如文件、数据库连接、线程锁…...

六、重学C++—深入探索new delete

上一章节&#xff1a; 五、重学C—类(封装继承)-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146458436?spm1001.2014.3001.5502 本章节代码&#xff1a; cpp CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppstudy/tree/m…...

西门子200smart之modbus_TCP(做主站与第三方设备)通讯

西门子200smart做MODBUS_TCP主站通讯,只有一个指令。设置相关参数即可完成读写操作。整 个过程非常复杂,操作非常严谨。此次,我们使用汇川EASY系列PLC做从站,完成演示。关于汇川案例的演示,详见汇川EASY系列之以太网通讯(MODBUS_TCP做从站)-CSDN博客 关于主站和从站的介…...

Unity代码热更新和资源热更新

知识点来源&#xff1a;人间自有韬哥在&#xff0c;hybridclr,豆包 目录 一、代码热更新1.代码热更新概述2.HybridCLR 二、资源热更新1.资源热更新概述2.AB包2.1.AB包的加载2.2.卸载AB包2.3.加载AB包依赖包2.4.获取MD52.5.生成对比文件2.6.更新AB包 3.Addressable3.1.AssetRef…...

C语言中的共同体(共用体)

一.共用体 1.应用场景&#xff1a; 一种数据可能有多种数据类型&#xff0c;因此我们可以使用共同体来定义这种数据 2.定义格式&#xff1a; union 共同体名字 {数据类型1 成员1;数据类型2 成员2;...数据类型n 成员n; } 3.简单案例&#xff1a; #include<stdio.h> …...

二叉搜索树的最近公共祖先 删除二叉搜索树中的节点 修剪二叉搜索树(Java)

二叉搜索树的最近公共祖先(Java) 重要结论&#xff1a;第一次遇到cur节点是数值在[q, p]区间中&#xff0c;那么cur就是q和p的最近公共祖先&#xff08;闭区间是因为公共祖先可以是本身&#xff09; (如果知道这个结论&#xff1a;本题就类似于给定二叉搜索树&#xff08;BST&…...

于纷扰中寻静谧:正念观照的智慧之旅

在现代社会的快节奏浪潮中&#xff0c;我们仿若被裹挟前行的浮萍&#xff0c;生活的压力与信息的洪流冲刷着内心的宁静&#xff0c;焦虑与迷茫如影随形。而正念观照&#xff0c;恰似一叶扁舟&#xff0c;能引领我们在心灵的海洋中回归自我&#xff0c;探寻那片澄澈之境。 正念…...

Java并发编程面试汇总

Java并发编程 一、 基础概念1. 进程与线程的区别是什么&#xff1f;2. 创建线程的几种方式&#xff1f;3. 线程的生命周期&#xff08;状态&#xff09;有哪些&#xff1f;4. 什么是守护线程&#xff08;Daemon Thread&#xff09;&#xff1f;5. 线程优先级&#xff08;Priori…...

计算机考研复试机试-考前速记

考前速记 知识点 1. 链表篇 1. 循环链表报数3&#xff0c;输出最后一个报数编号 #include <iostream> using namespace std;typedef struct Node {int no;struct Node* next; }Node, *NodeList;void createNodeListTail(NodeList&L, int n) {L (Node*)malloc(siz…...

环境评价分析中土地利用现状图的制作方法

在环境评价中&#xff0c;土地利用现状图是重要的基础图件&#xff0c;用于分析项目区域的土地利用类型、分布格局及其生态环境特征。 以下是制作土地利用现状图的详细步骤和方法&#xff1a; 一、前期准备工作 确定制图范围和比例尺 根据评价范围确定制图区域边界 常用比例…...

SpringMVC 请求处理详解

SpringMVC 是 Spring 框架中用于构建 Web 应用程序的模块&#xff0c;它基于 MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;能够将业务逻辑、数据和显示分离&#xff0c;从而提高代码的可维护性和可扩展性。本文将详细介绍 SpringMVC 中请求处理的原理…...

编程题记录3

九宫幻方 题目链接&#xff1a;https://www.lanqiao.cn/problems/100/learning/?page1&first_category_id1&second_category_id3&tags%E7%9C%81%E8%B5%9B&tag_relationintersection 先旋转、镜像得到所有的情况&#xff0c;可以发现情况是可以暴力得出的。…...

sql语句给表添加一个递增列

SSMS–》视图-》数据库(表)-》新建查询 ALTER TABLE [表名] DROP COLUMN ID ALTER TABLE [表名] ADD ID INT IDENTITY(1,1)执行完以上操作&#xff0c;会在表的最后一列添加一个自增字段 接下来如何把最后一个字段放到第一个字段呢&#xff1f; 假如sqlserver 表test 有以下…...

Java面试黄金宝典10

1. Tomcat 的负载均衡方式 定义 Tomcat 的负载均衡是将客户端的请求均匀分配到多个 Tomcat 实例上&#xff0c;以提高系统的处理能力和可用性。常见的负载均衡方式有以下几种&#xff1a; 硬件负载均衡 原理&#xff1a;采用专门的硬件设备&#xff0c;如 F5 Big - IP、Cisco…...

vue java 实现大地图切片上传

文章目录 一、项目背景二、页面三、代码1.前端2.mock-i18n.js文件3.xx.js文件定义方法4.配置文件 application.properties5.后端方法 四、易错点易错点1&#xff1a;前端要进行分片切割&#xff0c;然后再分片上传。易错点2&#xff1a;后端配置文件要配置。易错点3&#xff1a…...

langchain+ollama+deepseek的部署(win)

ANACONDA 安装 官网&#xff1a;Download Anaconda Distribution | Anaconda 配置系统环境 在系统变量中配置 检查是否配置成功 通过 cmd 窗口输入&#xff1a; conda info 如图&#xff1a;表示成功 配置你的虚拟环境 二、安装 ollama allama 安装 官网地址&#xff1a…...

deepseek实战教程-第四篇开放平台接口文档使用

第二篇讲解了如何本地安装大模型&#xff0c;然后编写一个基于jsspringboot的项目&#xff0c;通过页面实现对话的功能。实际上&#xff0c;上面的demo用到是deepseek提供的接口&#xff0c;那么deepseek共提供了多少接口呢&#xff1f;这就要讨论到deepseek的接口库了&#xf…...