分库分表之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 为例
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat和Servlet

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Tomcat是什么&#xff1f;1.1下载&#xff1a;1.2 tomcat是什么1.3启动服务器&#xff1a; 二.部署三、Servlet3.1创建项目3.2引入依赖pom.xml的所有代码 3…

一文讲清数据资产化之确权和估值

《中共中央 国务院关于构建数据基础制度更好发挥数据要素作用的意见》已发布一年&#xff0c;数据资产化和入表已成为2023年的热门话题&#xff0c;随着2023年底国家数据局吹风《"数据要素x"三年行动计划&#xff08;2024-2026年&#xff09;》即将发布&#xff0c;这…

磁盘管理-------RAID卡

目录 一、RAID概述 二、常见类型 &#xff08;一&#xff09;RAID 0 &#xff08;二&#xff09;RAID 1 &#xff08;三&#xff09;RAID 5 &#xff08;四&#xff09;RAID 6 &#xff08;五&#xff09;RAID 10 &#xff08;六&#xff09;总结 三、创建RAID &…

lambda函数

文章目录 定义捕捉列表的形式一些更复杂的捕捉列表组合代码演示演示一演示二演示三演示四演示五演示六 lambda 函数&#xff0c;是C11中新引入的函数式编程语法&#xff0c;lambda函数可以被定义在类中成员函数内部&#xff0c;全局函数的内部。它是一个局部函数&#xff08;即…

springboot定时执行某个任务

springboot定时执行某个任务 要定时执行的方法加上Schedule注解 括号内跟 cron表达式 “ 30 15 10 * * &#xff1f;” 代表秒 分 时 日 月 周几 启动类上加上EnableScheduling 注释

第二部分 离散型随机变量

目录 求分布律里的未知数 例1 例2 根据X的分布律写Y的分布律 例3 根据(X,Y)的分布律写Z的分布律 例4 根据(X,Y)的分布律写边缘分布律 例5 X与Y相互独立时的联合分布律 例6 根据分布律求期望、方差 例7 求分布律里的未知数 例1 已知X的分布律为 X-202P0.40.3k ,试求k 解 0.40…

【网络奇遇记】揭秘计算机网络的性能指标:时延带宽积|往返时间|利用率|丢包率

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;上期回顾一. 时延带宽积二. 往返时间三. 利用率四. 丢包率&#x1f4dd;结语 &#x1…

【用户增长】引言:浅析游戏运营用户增长概念

1 游戏发行运营中的主要职能&#xff1a; ​ 一、发行运营通识l 运营介绍&#xff1a;职能分工、发行运营流程、职业发展能力及要求l 品类认知&#xff1a;行业品类布局、品类用户画像、运营节奏及特性&#xff0c;包含不同品类核心打法及长线运营思路l 海外运营&#xff1a;海…

linux安装python

文章目录 前言一、下载安装包二、安装1.安装依赖2.解压3.安装4.软链接5.验证 总结 前言 本篇文章介绍linux环境下安装python。 一、下载安装包 下载地址&#xff1a;官方网站 我们以最新的标准版为例 二、安装 1.安装依赖 yum -y install openssl-devel ncurses-devel li…

什么是AI PC,又有哪些产品

最近一段时间&#xff0c;AI PC成为一个流行词。Intel在发布Core Ultra处理器的时候&#xff0c;直接使用了AI PC这个词语&#xff0c;而各大厂商发布相应的笔记本产品时&#xff0c;也使用了AI Ready的宣传词。而在Intel之前&#xff0c;AMD在发布自己的新一代APU的时候&#…

数据结构和算法-B树的插入和删除

文章目录 B树的插入小结B树的删除小结 B树的插入 首先将根节点的关键字个数填满&#xff0c;填满后再分开成树 分开的规则 此时插入90&#xff0c;从根节点依次查找&#xff0c;然后插入到终端节点的关键字中 插入同上&#xff0c;注意此时在终端节点插入要符合终端节点的大…

蓝桥杯嵌入式KEY

1.按键原理图 2.按键GPIO引脚设置成输入&#xff0c;上拉模式 3.设置TIM4时钟源为外部时钟源 PSC为80-1 Period为10000-1 打开NVIC 中断时间为10ms 4.在bsp文件中添加interrupt.c文件 5.按键单击代码 6.长按键 7.按键过程和显示过程

缺少/run/haproxy目录,haproxy服务启动失败

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 搭建haproxy的机器&#xff0c;因出现故障重启了&#xff0c;然后发现haproxy服务出现异常。重新启动hap…

数据库最小函数依赖求法 附相关习题及解析

首先我们给出最小函数依赖的定义 如果函数依赖集F满足下列条件&#xff0c;则称F为最小函数依赖集或最小覆盖。 ① F中的任何一个函数依赖的右部仅含有一个属性&#xff1b; ② F中不存在这样一个函数依赖X→A&#xff0c;使得F与F-{X→A}等价&#xff1b; ③ F中不存在这样一…

【Linux专区】如何配置新服务器 | 添加普通用户到sudoers | 配置vim | git免账号密码pull push

&#x1f49e;&#x1f49e;欢迎来到 Claffic 的博客&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《Linux专区》&#x1f448; &#x1f4ac;前言&#xff1a; 时隔131天&#xff0c;你的好友Claffic重新发文了&#xff01;(✿◕‿◕✿) 上期已经带大家白嫖了阿…

Unity坦克大战开发全流程——游戏场景——敌人——移动的敌人

游戏场景——敌人——移动的敌人 制作预制体 将坦克拖拽至场景中进行设置 写代码 让坦克在两点之间不停移动 随机坐标函数 然后在start()中调用即可 坦克要一直盯着玩家 当小于一定距离时&#xff0c;攻击玩家 重写开火逻辑 注意还要将其tag改成Monster&#xff01; 当敌人死…

鲲志说:向我乘风破浪,好事多磨的2023致敬!(感恩有礼,感谢有你)

伴随着2023最后一个工作日的结束&#xff0c;也终于要给一年的工作划上一个结尾了&#xff0c;当然&#xff0c;也要给自己一个交代&#xff0c;给自己一个年度总结 2023年&#xff0c;大的挫折也是有的&#xff0c;但我相信好事多磨&#xff0c;总的来说是事业型的一年&#x…

前端--基础 目录文件夹和根目录 VScode打开目录文件夹

目录 目录文件夹和根目录 &#xff1a; 目录文件夹 &#xff1a; 根目录 &#xff1a; VScode 打开目录文件夹 &#xff1a; VScode 打开文件夹 &#xff1a; 拖拽目录文件夹 &#xff1a; 目录文件夹和根目录 &#xff1a; 我们都清楚&#xff0c;在实际的工作中会…

考研后SpringBoot复习1

考研后SpringBoot复习 Hello World入门 复习的版本为SpringBoot2的版本 创建maven项目 在pom文件中导入SpringBoot的依赖同时引入web开发的启动器 <!--声明springboot父项目--><parent><groupId>org.springframework.boot</groupId><artifactId>…

Markdown之EBNF语法介绍(二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…