分库分表之Mycat应用学习二

3 Mycat 概念与配置

官网 http://www.mycat.io/
Mycat 概要介绍 https://github.com/MyCATApache/Mycat-Server
入门指南 https://github.com/MyCATApache/Mycat-doc/tree/master/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97

3.1 Mycat 介绍与核心概念

3.1.1 基本介绍

历史:从阿里 cobar 升级而来,由开源组织维护,2.0 正在开发中。
定位:运行在应用和数据库之间,可以当做一个 MySQL 服务器使用,实现对 MySQL数据库的分库分表,也可以通过 JDBC 支持其他的数据库。
在这里插入图片描述
在这里插入图片描述
Mycat 的关键特性(官网首页)
1、可以当做一个 MySQL 数据库来使用
2、支持 MySQL 之外的数据库,通过 JDBC 实现
3、解决了我们提到的所有问题,多表 join、分布式事务、全局序列号、翻页排

4、支持 ZK 配置,带监控 mycat-web
5、2.0 正在开发

3.1.2 核心概念

在这里插入图片描述

在这里插入图片描述

概念含义
主机物理主机,一台服务器,一个数据库服务,一个 3306 端口
物理数据库真实的数据库,例如 146、150、151 的 gpcat 数据库
物理表真实的表,例如 146、150、151 的 gpcat 数据库的 order_info 表
分片将原来单个数据库的数据切分后分散存储在不同的数据库节点
分片节点分片以后数据存储的节点
分片键分片依据的字段,例如 order_info 表以 id 为依据分片,id 就是分片键,通常是主键
分片算法分片的规则,例如随机、取模、范围、哈希、枚举以及各种组合算法
逻辑表相对于物理表,是分片表聚合后的结果,对于客户端来说跟真实的表没有区别
逻辑数据库相对于物理数据库,是数据节点聚合后的结果,例如 catmal
下载、解压 Mycat(有 Windows 版本,可以在本地数据库测试)
http://dl.mycat.io/
wget http://dl.mycat.io/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
tar -xzvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz

Mycat 解压以后有 5 个目录:

目录作用
bin启动目录
catlet空目录
conf配置目录
libjar 包依赖
logs日志目

3.2 Mycat 配置详解

主要的配置文件 server.xml、schema.xml、rule.xml 和具体的分片配置文件。
坑非常多,配置错误会导致无法启动,这个时候要看日志!
注意备份,不知道什么时候就跑不起来了……

3.2.1 server.xml

包含系统配置信息。
system 标签:例如字符集、线程数、心跳、分布式事务开关等等。
user 标签:配置登录用户和权限。

<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">catmall</property>
</user

mycat

java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 0:root:123456
3.2.2 schema.xml

https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_schema
schema 在 MySQL 里面跟数据库是等价的。
schema.xml 包括逻辑库、表、分片规则、分片节点和数据源,可以定义多个 schema。
这里面有三个主要的标签(table、dataNode、dataHost):

表名和库名最好都用小写 定义了逻辑表,以及逻辑表分布的节点和分片规则: ```xml
```
配置作用
primaryKey指定该逻辑表对应真实表的主键。MyCat 会缓存主键(通过 primaryKey 属性配置)与具体 dataNode 的信息。当分片规则(rule)使用非主键进行分片时,那么在使用主键进行查询时,MyCat 就会通过缓存先确定记录在哪个 dataNode 上,然后再在该 dataNode 上执行查询。如果没有缓存/缓存并没有命中的话,还是会发送语句给所有的 dataNode。
dataNode数据分片的节点
autoIncrement自增长(全局序列),true 代表主键使用自增长策略
type全局表:global。其他:不配置
<dataNode name="dn1" dataHost="host1" database="gpcat" />

数据节点与物理数据库的对应关系。

配置物理主机的信息,readhost 是从属于 writehost 的。

<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="hostM1" url="localhost:3306" user="root" password="123456"><!-- can have multi read hosts --><readHost host="hostS2" url="192.168.8.146:3306" user="root" password="xxx"/></writeHost><writeHost host="hostS1" url="localhost:3316" user="root" password="123456"/><!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>

balance:负载的配置,决定 select 语句的负载

作用
0不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
1所有读操作都随机发送到当前的 writeHost 对应的 readHost 和备用的 writeHost
2所有的读操作都随机发送到所有的 writeHost,readHost 上
3所有的读操作都只发送到 writeHost 的 readHost 上
writeType:读写分离的配置,决定 update、delete、insert 语句的负载
作用
0所有写操作都发送到可用的 writeHost 上(默认第一个,第一个挂了以后发到第二个)
1所有写操作都随机的发送到 writeHos

switchType:主从切换配置

作用
-1表示不自动切换
1默认值,表示自动切换
2基于 MySQL 主从同步的状态决定是否切换,心跳语句为 show slave status
3基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’。
3.2.3 rule.xml

定义了分片规则和算法
分片规则:

<tableRule name="rang-long-cust"><rule><columns>id</columns><algorithm>func-rang-long-cust</algorithm></rule>
</tableRule>

分片算法:

<function name="func-rang-long-cust" class="io.mycat.route.function.AutoPartitionByLong"><property name="mapFile">rang-long-cust.txt</property>
</function>

分片配置:rang-long-cust.txt

10001-20000=1
0-10000=0
20001-100000=2
3.2.4 ZK 配置

https://www.cnblogs.com/leeSmall/p/9551038.htm
Mycat 也支持 ZK 配置(用于管理配置和生成全局 ID),执行 bin 目录下init_zk_data.sh,会自动将 zkconf 下的所有配置文件上传到 ZK(先拷贝到这个目录)。

cd /usr/local/soft/mycat/conf
cp *.txt *.xml *.properties zkconf/
cd /usr/local/soft/mycat/bin
./init_zk_data.sh

启用 ZK 配置:
mycat/conf/myid.properties

loadZk=true
zkURL=127.0.0.1:2181
clusterId=010
myid=01001
clusterSize=1
clusterNodes=mycat_gp_01
#server booster ; booster install on db same server,will reset all minCon to 2
type=server
boosterDataHosts=dataHost1

注意如果执行 init_zk_data.sh 脚本报错的话,代表未写入成功,此时不要启用 ZK配置并重启,否则本地文件会被覆盖。
启动时如果 loadzk=true 启动时,会自动从 zk 下载配置文件覆盖本地配置。在这种情况下如果修改配置,需要先修改 conf 目录的配置,copy 到 zkconf,再执行上传。
在这里插入图片描述

3.2.5 启动停止

进入 mycat/bin 目录(注意要先启动物理数据库):

操作命令
启动./mycat start
停止./mycat stop
重启./mycat restart
查看状态./mycat status
前台运行./mycat

连接:

mysql -uroot -p123456 -h 192.168.8.151 -P8066 catmal

3.3 Mycat 分片验证

explain 可以用来看路由结果
在三个数据库中建表

CREATE TABLE `customer` (
`id` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `order_info` (
`order_id` int(11) NOT NULL COMMENT '订单 ID', `uid` int(11) DEFAULT NULL COMMENT '用户 ID', `nums` int(11) DEFAULT NULL COMMENT '商品数量', `state` int(2) DEFAULT NULL COMMENT '订单状态', `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `order_detail` (
`order_id` int(11) NOT NULL COMMENT '订单号', `id` int(11) NOT NULL COMMENT '订单详情', `goods_id` int(11) DEFAULT NULL COMMENT '货品 ID', `price` decimal(10,2) DEFAULT NULL COMMENT '价格', `is_pay` int(2) DEFAULT NULL COMMENT '支付状态', `is_ship` int(2) DEFAULT NULL COMMENT '是否发货', `status` int(2) DEFAULT NULL COMMENT '订单详情状态', PRIMARY KEY (`order_id`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `student` (
`sid` int(8) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `qq` varchar(255) DEFAULT NULL, PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

schema.xml

<table name="customer" dataNode="dn1,dn2,dn3" rule="rang-long-cust" primaryKey="id"/>
<table name="order_info" dataNode="dn1,dn2,dn3" rule="mod-long-order"><childTable name="order_detail" joinKey="order_id" parentKey="order_id" primaryKey="id"/>
</table>
<table name="student" dataNode="dn1,dn2,dn3" primaryKey="sid" typ

数据节点配置

<dataNode name="dn1" dataHost="host1" database="gpcat"/>
<dataNode name="dn2" dataHost="host2" database="gpcat"/>
<dataNode name="dn3" dataHost="host3" database="gpcat"/>
<dataHost balance="0" maxCon="1000" minCon="10" name="host1" writeType="0" switchType="1"
slaveThreshold="100" dbType="mysql" dbDriver="native"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.8.146:3306" password="123456" user="root"/>
</dataHost>
<dataHost balance="0" maxCon="1000" minCon="10" name="host2" writeType="0" switchType="1"slaveThreshold="100" dbType="mysql" dbDriver="native"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.8.150:3306" password="123456" user="root"/>
</dataHost>
<dataHost balance="0" maxCon="1000" minCon="10" name="host3" writeType="0" switchType="1"slaveThreshold="100" dbType="mysql" dbDriver="native"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.8.151:3306" password="123456" user="root"/>
</dataHost>

schema——rule.xml——分片配置

3.3.1 范围分片
<tableRule name="rang-long-cust"><rule><columns>id</columns><algorithm>rang-long-cust</algorithm></rule>
</tableRule><function name="rang-long-cust" class="io.mycat.route.function.AutoPartitionByLong"><property name="mapFile">rang-long-cust.txt</property>
</function>

customer

INSERT INTO `customer` (`id`, `name`) VALUES (6666, '赵先生');
INSERT INTO `customer` (`id`, `name`) VALUES (7777, '钱先生');
INSERT INTO `customer` (`id`, `name`) VALUES (16666, '孙先生');
INSERT INTO `customer` (`id`, `name`) VALUES (17777, '李先生');
INSERT INTO `customer` (`id`, `name`) VALUES (26666, '周先生');
INSERT INTO `customer` (`id`, `name`) VALUES (27777, 

3.3.2 取模分片(ER 表)
order_info

<tableRule name="mod-long-order">
<rule>
<columns>order_id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule><function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">3</property>
</function>
INSERT INTO `order_info` (`order_id`, `uid`, `nums`, `state`, `create_time`, `update_time`) VALUES (1, 1000001, 1, 2,
'2019-9-23 14:35:37', '2019-9-23 14:35:37');
INSERT INTO `order_info` (`order_id`, `uid`, `nums`, `state`, `create_time`, `update_time`) VALUES (2, 1000002, 1, 2,
'2019-9-24 14:35:37', '2019-9-24 14:35:37');
INSERT INTO `order_info` (`order_id`, `uid`, `nums`, `state`, `create_time`, `update_time`) VALUES (3, 1000003, 3, 1,
'2019-9-25 11:35:49', '2019-9-25 11:35:49');

order_detail

INSERT INTO `order_detail` (`order_id`, `id`, `goods_id`, `price`, `is_pay`, `is_ship`, `status`) VALUES (3, 20180001, 85114752, 19.99, 1, 1, 1);
INSERT INTO `order_detail` (`order_id`, `id`, `goods_id`, `price`, `is_pay`, `is_ship`, `status`) VALUES (1, 20180002, 25411251, 1280.00, 1, 1, 0);
INSERT INTO `order_detail` (`order_id`, `id`, `goods_id`, `price`, `is_pay`, `is_ship`, `status`) VALUES (1, 20180003, 62145412, 288.00, 1, 1, 2);
INSERT INTO `order_detail` (`order_id`, `id`, `goods_id`, `price`, `is_pay`, `is_ship`, `status`) VALUES (2, 20180004, 21456985, 399.00, 1, 1, 2);
INSERT INTO `order_detail` (`order_id`, `id`, `goods_id`, `price`, `is_pay`, `is_ship`, `status`) VALUES (2, 20180005, 21457452, 1680.00, 1, 1, 2);
INSERT INTO `order_detail` (`order_id`, `id`, `goods_id`, `price`, `is_pay`, `is_ship`, `status`) VALUES (2, 20180006, 65214789, 9999.00, 1, 1, 
3.3.3 全局表

student

<table name="student" dataNode="dn1,dn2,dn3" primaryKey="sid" type="global"/>
INSERT INTO `student` (`sid`, `name`, `qq`) VALUES (1, '黑白', '166669999');
INSERT INTO `student` (`sid`, `name`, `qq`) VALUES (2, 'AV 哥', '466669999');
INSERT INTO `student` (`sid`, `name`, `qq`) VALUES (3, '最强菜鸟', '368828888');
INSERT INTO `student` (`sid`, `name`, `qq`) VALUES (4, '加载中', '655556666');
INSERT INTO `student` (`sid`, `name`, `qq`) VALUES (5, '猫老公', '265286999');
INSERT INTO `student` (`sid`, `name`, `qq`) VALUES (6, '一个人的精彩', '516895555')

3.4 Mycat 全局 ID

Mycat 全局序列实现方式主要有 4 种:本地文件方式、数据库方式、本地时间戳算法、ZK。也可以自定义业务序列。
注意获取全局 ID 的前缀都是:MYCATSEQ

3.4.1 文件方式

配置文件 server.xml sequnceHandlerType 值:
0 文件 1 数据库 2 本地时间戳 3 ZK

<property name="sequnceHandlerType">0</property>

文件方式,配置 conf/sequence_conf.propertie

CUSTOMER.HISIDS= CUSTOMER.MINID=10000001
CUSTOMER.MAXID=20000000
CUSTOMER.CURID=10000001

语法:select next value for MYCATSEQ_CUSTOMER

INSERT INTO `customer` (`id`, `name`) VALUES (next value for MYCATSEQ_CUSTOMER, 'qingshan');

优点:本地加载,读取速度较快。
缺点:当 Mycat 重新发布后,配置文件中的 sequence 需要替换。Mycat 不能做集群部署。

3.4.2 数据库方式

<property name="sequnceHandlerType">1</property>

配置: sequence_db_conf.properties
把这张表创建在 146 上,所以是 dn1

#sequence stored in datanode
GLOBAL=dn1
CUSTOMER=dn1

在第一个数据库节点上创建 MYCAT_SEQUENCE 表:

DROP TABLE IF EXISTS MYCAT_SEQUENCE;
CREATE TABLE MYCAT_SEQUENCE (
name VARCHAR(50) NOT NULL, current_value INT NOT NULL, increment INT NOT NULL DEFAULT 1, remark varchar(100), PRIMARY

注:可以在 schema.xml 配置文件中配置这张表,供外部访问。

<table name="mycat_sequence" dataNode="dn1" autoIncrement="true" primaryKey="id"></table>

创建存储过程——获取当前 sequence 的值

DROP FUNCTION IF EXISTS `mycat_seq_currval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_currval`(seq_name VARCHAR(50)) RETURNS varchar(64)
CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE retval VARCHAR(64);
SET retval="-999999999,null";
SELECT concat(CAST(current_value AS CHAR),",",CAST(increment AS CHAR) ) INTO retval FROM
MYCAT_SEQUENCE WHERE name = seq_name;
RETURN retval ;
END
;;
DELIMITER ;

创建存储过程,获取下一个 sequence

DROP FUNCTION IF EXISTS `mycat_seq_nextval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_nextval`(seq_name VARCHAR(50)) RETURNS varchar(64)
CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = current_value + increment WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER ;

创建存储过程,设置 sequence

DROP FUNCTION IF EXISTS `mycat_seq_setval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), value INTEGER)
RETURNS varchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = value
WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER 

插入记录

INSERT INTO MYCAT_SEQUENCE(name,current_value,increment,remark) VALUES ('GLOBAL', 1, 100,'');
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment,remark) VALUES ('ORDERS', 1, 100,'订单表使
用')

测试

select next value for MYCATSEQ_ORDERS
3.4.3 本地时间戳方式
ID= 64 位二进制 (42(毫秒)+5(机器 ID)+5(业务编码)+12(重复累加) ,长度为18 位
<property name="sequnceHandlerType">2</property>

配置文件 sequence_time_conf.propertie

#sequence depend on TIME
WORKID=01
DATAACENTERID=01

验证:select next value for MYCATSEQ_GLOBAL
在这里插入图片描述

3.4.4 ZK 方式

修改 conf/myid.properties
设置 loadZk=true(启动时会从 ZK 加载配置,一定要注意备份配置文件,并且先用 bin/init_zk_data.sh,把配置文件写入到 ZK)

<property name="sequnceHandlerType">3</property>

配置文件:sequence_distributed_conf.properties

# 代表使用 zk
INSTANCEID=ZK
# 与 myid.properties 中的 CLUSTERID 设置的值相同
CLUSTERID=010

复制配置文件

cd /usr/local/soft/mycat/conf
cp *.txt *.xml *.properties zkconf/
chown -R zkconf/
cd /usr/local/soft/mycat/bin
./init_zk_data.sh

验证:select next value for MYCATSEQ_GLOBAL
在这里插入图片描述

3.4.5 使用

在 schema.xml 的 table 标签上配置 autoIncrement=“true”,不需要获取和指定序列的情况下,就可以使用全局 ID 了。

4 Mycat 监控与日志查看

4.1 监控

4.1.1 命令行监控

连接到管理端口 9066,注意必须要带 IP

mysql -uroot -h127.0.0.1 -p123456 -P906

全部命令:

mysql>show @@help
命令作用
show @@server查看服务器状态,包括占用内存等
show @@database查看数据库
show @@datanode查看数据节点
show @@datasource查看数据源
show @@connection该命令用于获取 Mycat 的前端连接状态,即应用与 mycat 的连接
show @@backend查看后端连接状态
show @@cache查看缓存使用情况 SQLRouteCache:sql 路由缓存。TableID2DataNodeCache : 缓存表主键与分片对应关系。ER_SQL2PARENTID :缓存 ER 分片中子表与父表关系
reload @@config重新加载基本配置,使用这个命令时 mycat服务不可用
show @@sysparam参看参数
show @@sql.high执行频率高的 SQL
show @@sql.slow慢 SQL设置慢 SQL 的命令:reload @@sqlslow=5 ;

4.1.2 命令行监控 mycatweb 监控

https://github.com/MyCATApache/Mycat-download/tree/master/mycat-web-1.0
Mycat-eye 是 mycat 提供的一个监控工具,它依赖于 ZK。
本地必须要运行一个 ZK,必须先启动 ZK。
参考:https://gper.club/articles/7e7e7f7ff7g59gc3g64
下载 mycat-web

cd /usr/local/soft
wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
tar -xzvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz

启动 mycat-web

cd mycat-web
nohup ./start.sh &

停止:kill start.jar 相关的进程
访问端口 8082
http://192.168.8.151:8082/mycat/
mycat server.xml 配置

<!-- 1 为开启实时统计、0 为关闭 -->
<property name="useSqlStat">1</property>

重启 mycat 服务生效

4.2 日志

log4j 的 level 配置要改成 debug

4.2.1 wrapper.log 日志

wrapper 日志:mycat 启动,停止,添加为服务等都会记录到此日志文件,如果系统环境配置错误或缺少配置时,导致 Mycat 无法启动,可以通过查看 wrapper.log 定位具体错误原因。

4.2.2 mycat.log 日志

mycat.log 为 mycat 主要日志文件,记录了启动时分配的相关 buffer 信息,数据源连接信息,连接池,动态类加载信息等等。
在 conf/log4j2.xml 文件中进行相关配置,如保留个数,大小,字符集,日志文件大小等。
以 select 为例
在这里插入图片描述

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

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

相关文章

【Yii2】数据库查询方法总结

目录 1.查找单个记录&#xff1a; 2.查找多个记录&#xff1a; 3.条件查询&#xff1a; 4.关联查询&#xff1a; 假设User模型有一个名为orders的多对一关联关系。 5.排序和分组&#xff1a; 6.数据操作&#xff1a; 7.事务处理&#xff1a; 8.命令查询&#xff1a; 9…

MongoDB聚合:$out

$out阶段将聚合管道产生的文档写入到指定的集合&#xff0c;从MongoDB4.4开始&#xff0c;支持指定数据库。$out阶段必须放在聚合管道的最后&#xff0c;支持聚合结果任意大小的数据集。 警告&#xff1a; 如果指定的集合已经存在则会被替换。 语法 用法 1&#xff1a; 定数…

骑砍战团MOD开发(29)-module_scenes.py游戏场景

骑砍1战团mod开发-场景制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Cw411N7G4/ 一.骑砍游戏场景 骑砍战团中进入城堡,乡村,战斗地图都被定义为场景,由module_scenes.py进行管理。 scene(游戏场景) 天空盒(Skyboxes.py) 地形(terrain code) 场景物(scene_…

【华为数据之道学习笔记】8-2 数据质量规则

异常数据是不满足数据标准、不符合业务实质的客观存在的数据&#xff0c;如某位员工的国籍信息错误、某位客户的客户名称信息错误等。 数据在底层数据库多数是以二维表格的形式存储&#xff0c;每个数据格存储一个数据值。若想从众多数据中识别出异常数据&#xff0c;就需要通过…

[EFI]机械革命Mechrevo-蛟龙5-76Q电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Mechrevo-Jiaolong-76Q 处理器AMD Ryzen 7 5800h已驱动内存2 x 8GB DDR4 2133MHz已驱动硬盘LITEON CV5-8Q256 256GB已驱动显卡核显已驱动声卡Realtek ALC293 (ALC3235)已驱动网卡Intel I219-LM Gigabit Ethernet已驱动无线网卡蓝牙Intel Wireless-AX200 D…

【滑动窗口】C++算法:可见点的最大数目

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 LeetCode 1610可见点的最大数目 给你一个点数组 points 和一个表示角度的整数 angle &#xff0c;你的位置是 location &#xff0c;其中 location [posx, posy] 且 point…

React MUI(版本v5.15.2)详细使用

使用React MUI&#xff08;版本v5.15.2&#xff09;的详细示例。请注意&#xff0c;由于版本可能会有所不同&#xff0c;因此建议您查阅官方文档以获取最新的信息和示例。但是&#xff0c;我将根据我的知识库为您提供一些基本示例。 首先&#xff0c;确保您已经按照之前的说明…

CentOs7安装 Kafka

在 CentOS 7 上安装 Kafka 可以按照以下步骤进行。这里假设您已经在 CentOS 7 系统上安装了 Java。如果没有安装 Java&#xff0c;请先安装 Java。 步骤 1: 安装 Java sudo yum install java-1.8.0-openjdk步骤 2: 下载和解压 Kafka 访问 Apache Kafka 官方网站&#xff1a;…

C#语言发展历程(1-7)

一、类型发展 C#1中是没有泛型的 在C#2中在逐渐推出泛型。C#2还引入了可空类型。 示例&#xff1a;C#泛型&#xff08;详解&#xff09;-CSDN博客 1 C#3&#xff1a;引入了匿名类型、和隐式的局部变量&#xff08;var&#xff09; 匿名类型&#xff1a;我们主要是使用在LIN…

openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅

文章目录 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅179.1 发布179.2 订阅179.3 冲突处理179.4 限制179.5 架构179.6 监控179.7 安全性179.8 配置设置179.9 快速设置 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅 发布和订阅基于逻辑复…

大模型推理部署:LLM 七种推理服务框架总结

自从ChatGPT发布以来&#xff0c;国内外的开源大模型如雨后春笋般成长&#xff0c;但是对于很多企业和个人从头训练预训练模型不太现实&#xff0c;即使微调开源大模型也捉襟见肘&#xff0c;那么直接部署这些开源大模型服务于企业业务将会有很大的前景。 本文将介绍七中主流的…

用文心一言写“批量进行文本文件的字符集转换”的脚本

尝试用文心一言写了个 shell 脚本&#xff0c;一字未改&#xff0c;直接运行&#xff0c;运行结果正确。的确可以提高工作效率。 输入的问题如下&#xff1a; 请按照以下要求编写一个shell脚本。 1. 编写一个函数&#xff0c;函数名是cnvfile。其输入是一个文件名。首先用cha…

C++的面向对象学习(8):面向对象编程的三大特性之:多态

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、多态是什么&#xff1f;多态是面向对象编程中的一个重要概念&#xff0c;指的是同一个函数在不同的对象上具有不同的行为。具体来说&#xff0c;多态是通过虚函…

微服务(6)

目录 26.LoadBalanced注解的作用&#xff1f; 27.什么是断路器&#xff1f; 28.什么是Hystrix? 29.什么是Feign? 30.SpringCloud有几种调用接口方式&#xff1f; 26.LoadBalanced注解的作用&#xff1f; 开启客户端负载均衡 27.什么是断路器&#xff1f; 当一个服务调用…

【eclipse】eclipse开发springboot项目使用入门

下载eclipse Eclipse downloads - Select a mirror | The Eclipse Foundation 安装eclipse 其他一步一步即可 我们是开发java web选择如下 界面修改 Window->Preferences-> 修改eclipse风格主题 Window->Preferences->General->Appearance 修改字体和大小…

【用pandas,写入内容到excel工作表的问题】

用pandas的话&#xff08;如下面代码所示&#xff09;&#xff0c;写入内容到excel工作表&#xff0c;有几个问题&#xff1a; 1、运行的之前&#xff0c;excel需要先关闭。 2、如果Sheet2存在&#xff0c;那么就会报错。如果if_sheet_exists‘replace’&#xff0c;那么就会把…

基于 CefSharp 实现一个文件小工具

I’m not saying you can’t be financially successful I’m saying have a greater purpose in life well beyond the pursuit of financial success Your soul is screaming for you to answer your true calling You can change today if you redefine what success is to …

Python和Java的优缺点

Python的优点&#xff1a; 简单易学&#xff1a;Python的语法简洁清晰&#xff0c;易于学习和理解。丰富的库和框架&#xff1a;Python拥有庞大的标准库和活跃的开源社区&#xff0c;可以快速使用各种功能强大的库和框架&#xff0c;比如NumPy、Pandas、Django等。可读性强&am…

深度强化学习DQN训练避障

目录 一.前言 二.代码 2.1完整代码 2.2运行环境 2.3动作空间 2.4奖励函数 2.5状态输入 2.6实验结果 一.前言 深度Q网络&#xff08;DQN&#xff09;是深度强化学习领域的一项革命性技术&#xff0c;它成功地将深度学习的强大感知能力与强化学习的决策能力相结合。在过…

VIM8 文本实战学习

目录 第一章 开始Vim 之旅 1.1 模式界面与无模式界面对比 1.2 通过.vimrc文件来配置Vim 1.3 Vim 交换文件 1.4 通过:help阅读Vim手册 本章小结 第二章 高级编辑和文本浏览 主要内容&#xff1a; 2.1 安装插件 2.2 组织工作区 2.2.1 缓冲区 2.2.2 插件——unimpaire…