数据分片(mycat)
1. 数据分片概念:
1.1. 分库分表
- 什么是分库分表:
- 将存放在一台数据库服务器中的数据,按照特定方式(指的是程序开发的算法)进行拆分,分散存放到多台数据库服务器中,以达到分散单台服务器负载的效果。
1.2. 水平分割
- 横向切分:
- 按照表中指定字段的切片规则,将表记录按行切分,分散存储到多个数据库中。
1.3. 垂直分割
- 纵向切分
- 将单个数据库的多个表按业务类型分类,分散存储到不同的数据库。
2. mycat软件介绍:
- mycat是基于Java的分布式数据库系统中间件,为高并发环境的分布式存储提供解决方案
- 适合数据大量写入的存储需求,不适合数据大量查询的请求。
- 支持MySQL、Oracle、SQL server、Mongodb等。
- 提供数据读写分离和数据分片服务。
- 基于阿里巴巴Cobar进行研发的开源软件
2.1. 分片规则
- mycat 支持提供10种分片规则
- 枚举法(sharding-by-intfile)
- 固定分片(rule1)
- 范围约定(auto-sharding-long)
- 求模法(mod-long)
- 日期列分区法(sharding-by-date)
- 通配取模(sharding-by-pattern)
- ASCII码求模通配(sharding-by-prefixpattern)
- 编程指定(sharding-by-substring)
- 字符串拆分hash解析(sharding-by-stringhash)
- 一致性hash(sharding-by-murmur)
2.2. 工作流程
- 当mycat收到一个SQL命令时
- 解析SQL命令涉及到的表
- 然后看对表的配置,如果有分片规则,则获取SQL命令里分片字段的值,并匹配分片函数,获得分片列表
- 然后将SQL命令发往对应的分片服务器去执行
- 最后收集和处理所有分片结果数据,并返回到客户端
3. 配置数据分片服务
- 数据分片拓扑结构
- 注意部署这个架构至少需要三台数据库服务器
- IP规划
主机名 | 角色 | 数据库 | IP地址 |
---|---|---|---|
mysql10 | 客户端 | 无 | 192.168.2.10 |
mycat20 | 分片服务器 | 无 | 192.168.2.20 |
mysql30 | 数据库服务器 | db1 | 192.168.2.30 |
mysql40 | 数据库服务器 | db2 | 192.168.2.40 |
mysql50 | 数据库服务器 | db3 | 192.168.2.50 |
- 安装mysql这里就不说了,可以参考mysql安装。
- 修改所有服务器的主机名以IP规划的表格为准。
##修改所有主机的hosts文件
[root@mysql10 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.10 mysql10
192.168.2.20 mycat20
192.168.2.30 mysql30
192.168.2.40 mysql40
192.168.2.50 mysql50
3.1. 安装mycat
##安装软件jdk,因为mycat软件需要jdk编译。
[root@mycat20 ~]# yum -y install java-1.8.0-openjdk
##查看java版本
[root@mycat20 ~]# java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)
##下载mycat二进制包
[root@mycat20 ~]# wget http://dl.mycat.org.cn/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
##解压指定目录
[root@mycat20 ~]# tar -xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
##解压是否成功
[root@mycat20 ~]# cd /usr/local/
[root@mycat20 local]# ls mycat/
bin catlet conf lib logs version.txt
配置mycat环境变量:
[root@localhost ~]# echo "export PATH=/usr/local/mycat/bin:$PATH" >/etc/profile.d/mycat.sh
[root@localhost ~]# . /etc/profile.d/mycat.sh
[root@localhost ~]# echo $PATH
/usr/local/mycat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
3.2. 目录结构
- ls /usr/local/mycat
- bin ----mycat命令
- catlet ----扩展功能
- conf ----配置文件
- lib ----mycat使用的jar包
- logs ----mycat启动日志和运行日志
- wrapper.log ----mycat服务启动日志
- mycat.log ----记录SQL脚本执行后报错内容
3.3. 修改主配置文件
- 重要配置文件说明
- server.xml ---设置连接账号及逻辑库
- schema.xml ---配置数据分片存储的表
- rule.xml ---分片规则
- 其他文件 ---分片规则配置文件
3.3.1. 创建连接用户(server.xml)
##备份server.xml文件
[root@mycat20 ~]# cd /usr/local/mycat/conf/
[root@mycat20 conf]# cp -r server.xml{,.bak}
##创建连接用户
.xml文件中<!-- -->代表注释。
[root@mycat20 conf]# vim server.xml
....
修改以下内容
<user name="root"> ---连接mycat服务用户名<property name="password">1234</property> ---用户密码<property name="schemas">mycatdb</property> ---逻辑库<!-- 表级 DML 权限设置 --><!--<privileges check="false"><schema name="TESTDB" dml="0110" ><table name="tb01" dml="0000"></table><table name="tb02" dml="1111"></table></schema></privileges>--></user><user name="user"><property name="password">1234</property><property name="schemas">mycatdb</property><property name="readOnly">true</property> ---只读权限</user>
3.3.2. 定义分片的表(schema.xml)
##定义分片的表<schema> ...... </schema> --定义分片信息,对什么表做分片
<table> ...... </table> --定义要分片的表
name --逻辑库名或逻辑表名
dataNode --指定数据节点名
rule --指定使用的分片规则
type=global --数据不做分片存储##定义数据节点<dataNode 选项=值,... .../> --定义数据节点
name --数据节点名
datahost --数据库服务器主机名
database --数据库名##定义数据库服务器IP地址及端口<datahost 选项=值,... ...>... ...</datahost> --服务器主机名
name --主机名(与datahost对应的主机名)
host --主机名(与IP地址对应的主机名)
url --数据库服务器IP地址及端口号
user --数据库服务器授权用户
password --授权用户密码
##备份schema.xml文件
[root@mycat20 conf]# cp -r schema.xml{,.bak}
[root@mycat20 conf]# vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100"><table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /><table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" /><table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" /><table name="hotnews" dataNode="dn1,dn2,dn3"rule="mod-long" /><table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"rule="sharding-by-intfile" /><table name="customer" primaryKey="ID" dataNode="dn1,dn2,dn3"rule="sharding-by-intfile"><childTable name="orders" primaryKey="ID" joinKey="customer_id"parentKey="id"><childTable name="order_items" joinKey="order_id"parentKey="id" /></childTable><childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"parentKey="id" /></table></schema><dataNode name="dn1" dataHost="mysql30" database="db1" /><dataNode name="dn2" dataHost="mysql40" database="db2" /><dataNode name="dn3" dataHost="mysql50" database="db3" /><dataHost name="mysql30" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.2.30:3306" user="mycat"password="1234"></writeHost></dataHost>
<dataHost name="mysql40" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM2" url="192.168.2.40:3306" user="mycat"password="1234"></writeHost></dataHost><dataHost name="mysql50" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM3" url="192.168.2.50:3306" user="mycat"password="1234"></writeHost></dataHost>
</mycat:schema>
4. 配置数据库服务器
- 根据分片配置做相应的设置
- 添加授权用户
- 创建数据库
##创建授权用户
mysql> grant all on *.* to mycat@'%' identified by '1234'; ---在mysql30、mysql40、mysql50执行。
##创建数据库
mysql> create database db1 default chatset=utf8; ---在mysql30执行
mysql> create database db2 default charset=utf8; --在mysql40执行
mysql> create database db3 default charset=utf8; ---在mysql50执行
- 以上的操作是根据mycat配置文件schema.xml的内容
5. 启动mycat服务
[root@mycat20 conf]# mycat start
Starting Mycat-server...
[root@mycat20 conf]# netstat -nltp | grep 8066
tcp6 0 0 :::8066 :::* LISTEN 9719/java
6. 客户端连接分片服务器
[root@mysql10 ~]# mysql -uroot -p1234 -h192.168.2.20 -P8066
mysql> show databases;
+----------+
| DATABASE |
+----------+
| mycatdb | ---逻辑库
+----------+
mysql> use mycatdb
mysql> show tables;
+-------------------+
| Tables in mycatdb |
+-------------------+
| company | ---这些都是逻辑表
| customer |
| customer_addr |
| employee |
| goods |
| hotnews |
| orders |
| order_items |
| travelrecord |
+-------------------+
9 rows in set (0.00 sec)
-
登录分片服务器的用户名密码是图片上定义
-
分片服务器上的逻辑库和逻辑表是图片上定义的
7. 分片规则
7.1.枚举法(sharding-by-intfile)
- 字段值必须在规则文件定义的值里选择
[root@mycat20 conf]# vim schema.xml
<table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"rule="sharding-by-intfile" />
##可以看的出来employee这个表格必须有ID这个字段并且约束条件是主键分片规则是枚举法(sharding-by-intfile)
##查看枚举法的详细内容
[root@mycat20 conf]# vim rule.xml
<tableRule name="sharding-by-intfile"><rule><columns>sharding_id</columns> --指定employee这个表格必须有sharding_id这个字段名<algorithm>hash-int</algorithm> 算法</rule>
....
##定义算法的<function name="hash-int"class="io.mycat.route.function.PartitionByFileMap"> ---算法<property name="mapFile">partition-hash-int.txt</property> ---定义分片规则的值的配置文件</function>
##查看sharding_id字段名的值范围
[root@mycat20 conf]# vim partition-hash-int.txt
10000=0 ---代表dn1
10010=1 ---代表dn2
10020=2 ---代表dn3
7.1.1. 重启mycat服务
[root@mycat20 conf]# mycat stop;mycat start
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
7.1.2. 创建employee表
##登录分片服务器,创建employee表格
[root@mysql10 ~]# mysql -umycat -p1234 -h192.168.2.20 -P8066
mysql> create table employee(-> ID int primary key auto_increment, ---schema.xml指定的字段名-> sharding_id int not null, 分片规则指定字段-> name char(20) not null,-> sex enum('boy','girl') not null,-> age int unsigned not null,-> homedir char(50) not null);
Query OK, 0 rows affected (0.08 sec)
mysql> desc employee;
+-------------+--------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| sharding_id | int(11) | NO | | NULL | |
| name | char(20) | NO | | NULL | |
| sex | enum('boy','girl') | NO | | NULL | |
| age | int(10) unsigned | NO | | NULL | |
| homedir | char(50) | NO | | NULL | |
+-------------+--------------------+------+-----+---------+----------------+
6 rows in set (0.09 sec)
##在mycat分片服务器上创建employee这个表格mysql30、mysql40、mysql50都应该有这个表格,这里就不显示出来了。
7.1.3. 验证枚举法
##往employee表格插入数据,sharding_id赋值为100010代表数据存储在mysql40上。
mysql> insert into employee(sharding_id,name,sex,age,homedir) values(10010,'bob','boy',29,'china');
##进入mysql40验证数据是否在。
mysql> select * from employee;
+----+-------------+------+-----+-----+-----------------------------------------+
| ID | sharding_id | name | sex | age | homedir |
+----+-------------+------+-----+-----+-----------------------------------------+
| 1 | 10010 | bob | boy | 29 | china |
+----+-------------+------+-----+-----+-----------------------------------------+1 row in set (0.01 sec)
##还可以验证mysql30、mysql50的employee表格是否有这个数据,这里就不展示了,正确的应该这两台都没有。
7.2. 求模法(mod-long)
- 根据字段值与设定的数字求模结果存储数据,意思就是取余。
##查看hotnews表定义的内容:分片规则为求模法。
[root@mycat20 conf]# vim schema.xml
<table name="hotnews" dataNode="dn1,dn2,dn3"rule="mod-long" />##查看求模法定义的字段名以及算法范围
[root@mycat20 conf]# vim rule.xml<tableRule name="mod-long">39 <rule>40 <columns>mod_id</columns>41 <algorithm>mod-long</algorithm>42 </rule>43 </tableRule>
......
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
106 <!-- how many data nodes -->
107 <property name="count">3</property> --定义mod_id值除以3余数为0存储dn1,余数为1存储在dn2,余数为2存储在dn3。
108 </function>
7.2.1. 重启mycat服务
[root@mycat20 conf]# mycat stop; mycat start
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
7.2.2. 创建hotnews表
mysql> create table hotnews( mod_id int not null, title char(20) not null, worker char(15) not null);
7.2.3. 验证求模法
##往hotnews表格插入数据
mysql> insert into hotnews(mod_id,title,worker) values(1,'system','bob');
##mod_id的值为1除以3余1所以数据存储在dn2(mysql40)
##在mysql40上查看数据
mysql> select * from hotnews;
+--------+--------+--------+
| mod_id | title | worker |
+--------+--------+--------+
| 1 | system | bob |
+--------+--------+--------+
1 row in set (0.00 sec)
##正确情况下mysql30和mysql50的hotnews表是没有数据的,这里不展示了。
8. 不分片存储(type=global)
##type=global意思是不用分片,存储数据在dn1、dn2、dn3上都存。<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
8.1. 创建表格goods并插入数据
mysql> create table goods(-> ID int primary key auto_increment,-> name char(15)not null,-> sex enum('boy','girl')not null,-> age int unsigned not null);
Query OK, 0 rows affected (0.02 sec)
##插入数据
mysql> insert into goods(name,sex,age) values('bob','boy',25),('andy','boy',19),('lucy','girl',18);
8.2.验证:
[root@mysql10 ~]# mysql -umycat -p1234 -h192.168.2.30 -e "select * from db1.goods"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------+------+-----+
| ID | name | sex | age |
+----+------+------+-----+
| 1 | bob | boy | 25 |
| 2 | andy | boy | 19 |
| 3 | lucy | girl | 18 |
+----+------+------+-----+
[root@mysql10 ~]# mysql -umycat -p1234 -h192.168.2.40 -e "select * from db2.goods"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------+------+-----+
| ID | name | sex | age |
+----+------+------+-----+
| 1 | bob | boy | 25 |
| 2 | andy | boy | 19 |
| 3 | lucy | girl | 18 |
+----+------+------+-----+
[root@mysql10 ~]# mysql -umycat -p1234 -h192.168.2.50 -e "select * from db3.goods"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------+------+-----+
| ID | name | sex | age |
+----+------+------+-----+
| 1 | bob | boy | 25 |
| 2 | andy | boy | 19 |
| 3 | lucy | girl | 18 |
+----+------+------+-----+
相关文章:

数据分片(mycat)
1. 数据分片概念: 1.1. 分库分表 什么是分库分表: 将存放在一台数据库服务器中的数据,按照特定方式(指的是程序开发的算法)进行拆分,分散存放到多台数据库服务器中,以达到分散单台服务器负载的…...

基于STM32设计的倒车雷达系统(超声波模块多方位测距应用)
一、项目背景 汽车高科技产品家族中,专为倒车泊位设置的“倒车雷达”应运而生,倒车雷达的加装可以解决驾驶人员的后顾之忧,大大降低到车事故的发生。汽车倒车雷达全称为“倒车防撞雷达”,也叫“泊车辅助装置”,是汽车泊车安全辅助装置,能以声音或者更为直观的显示来告知…...

Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试
最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写、数据驱动管理、测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做一个总…...

洛谷——前缀和与差分
前缀和与差分 文章目录前缀和与差分应用总结前缀和截断数组思路代码最大加权矩形题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码差分海底高铁题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码改变数组元素思路代码应用总结 前缀和用来…...

离线内网环境部署更新问题记录
文章目录低级错误错误一 配置文件参数错误错误二 文件位置错误新遇到的错误其他遇到的问题经验教训低级错误 错误一 配置文件参数错误 在与现场实施人员沟通时,出现信息错位,实施人员发来的截图里的ip地址不是正在使用的ip地址(机器c重装系…...

【Git】Git是什么?简单说说Git的工作机制?Git的常用命令有那些?
目录 一、Git是什么? 二、简单说说Git的工作机制? 三、Git的常用命令有那些? 💟 创作不易,不妨点赞💚评论❤️收藏💙一下 一、Git是什么? Git 是一个免费的、开源的分布式版本控制系统,可…...

《精通Spring4.x 企业应用开发实战》第1章 Spring概述
目录标题前言一、Spring带给我们什么二、Spring体系结构三、Spring4.0新特性核心容器的增强泛型依赖注入Map依赖注入Lazy延迟依赖注入List注入Conditional 注解CGLIB 代理类增强其他四、Spring 子项目总结前言 汇总:《精通Spring4.x 企业应用开发实战》 一、Spring带…...

【Spring Cloud Alibaba】003-Nacos 概述与单机搭建
【Spring Cloud Alibaba】003-Nacos 概述与单机搭建 文章目录【Spring Cloud Alibaba】003-Nacos 概述与单机搭建一、Nacos 概述0、新技术学习思路推荐1、什么是 Nacos2、架构图架构图架构图信息二、Nacos 单机搭建1、下载与启动下载地址编辑 startup.cmd 文件下面对两种模式的…...

如何使用 API 工具做 Websocket 测试
在 API 测试中,对 Websocket 协议的支持呼声越来越高,今天给大家推荐一款 开源的 API 管理工具——Postcat,以及教教大家,如何利用 API 管理工具做 Websocket 测试。 在线 Demo 链接:Postcat - Open Source API Ecosys…...

90%的人都理解错了HTTP中GET与POST的区别
Get和Post是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是Get把参数包含在URL中,Post通过request body传递参数。 你可能自己写过无数个Get和Post请求,或者已经看过很多权威网站总结…...

【C++】秋招实习面经汇总篇
C面经汇总 系列综述: 目的:本系列是个人整理为了秋招和实习面试的,整理期间苛求每个知识点,平衡背诵量与深入程度。 来源:材料主要源于阿秀的笔记和《王道考研复习指导》进行的,每个知识点的修正和深入主要…...

干货分享:2023欧美市场分析与机会
1、2023年欧美市场分析美国是⼀个消费大国,正常情况下做外贸不可忽略的市场。如何找客户:专注产业链 。产业链对接,其上游是什么,那么他就是我的客户 ( 原材料-⼯⼚)南美洲是北美的经济殖民地(矿产资源农产品),非洲仍然…...

介绍Kadence Elements元素模板:按您的方式设计网站
随着 Kadence Pro 1.0.4 和 Kadence Blocks Pro 1.5.8 的发布,Kadence 团队很高兴地宣布推出最强大的新方法,帮助网站所有者使用 Kadence Elements Templates 创建动态和高度定制的 WordPress 网站。如果您曾经创建过 WordPress 网站,并且发现…...

物联网发展的重要通信技术Wi-Fi
Wi-Fi 可以适应各种场景的联网需求 Wi-Fi 在实现物联网创新方面发挥了基础性作用,提供了广泛的连接性,将各种“事物”相互连接、连接到互联网,以及连接到全球使用的 180 亿台 Wi-Fi 设备。物联网的经济潜力是无限的,Wi-Fi 为智能…...

OSS上传(Java和Js)
OSS上传(Java和Js)准备工作创建RAM用户创建角色创建权限策略给角色授予权限策略获取临时访问凭证Java普通上传OSSJava分片上传OSSJS普通上传OSSJS分片上传OSS使用RAM用户或STS方式访问 由于阿里云账号AccessKey拥有所有API访问权限,建议遵循阿…...

【虚拟机】VirtualBox Host-Only + 主机网络共享配置
文章目录创建Host-Only虚拟机配置主机配置其它工作中经常会使用到虚拟机进行各种技术的试验,之前为了省事常用桥接模式,可是我经常变换办公地点,每个办公地点的局域网网段并不一样,所以我采取了仅主机模式网络共享这种方式&#x…...

小公司“混”的3年,我认真做了5件事,真的受益终生
小公司“混”的3年,我认真做了5件事,真的受益终生 目录:导读 功能测试很重要但不值钱 自动化测试在小公司没市场,但是你得会 给自己的一些忠告 第一件事:分清阶段,制定计划 第二件事:梳理…...

Linux Crontab命令定时任务基本语法与操作教程
Linux Crontab命令定时任务基本语法与操作教程 一、Crontab查看编辑重启 1、查看crontab定时执行任务列表 crontab -l 2、编辑crontab定时执行任务 crontab -e 3、删除crontab定时任务 crontab -r 4、相关命令: sudo service crond start #启动服务 sudo …...

文档测试要测什么,如何进行测试?
文档测试要测什么,如何进行测试? 对于交付用户文档来说,以需求、用户手册、安装手册等为主,检查用户文档是否和实际的存在差别,主要从以下几个方面来考虑: 阅读者:文档面向的读者定位要清晰&…...

.net 6 引入EFCore
这里默认使用sql server数据库 DBFirst nuget引入程序集 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.Design Microsoft.EntityFrameworkCore.Tools Microsoft.Extensions.Logging.Console 执行脚本 设置DAL…...

MySQL------自定义排序
1、MySQL函数 field() 实现自定义 语法: SELECT * from table_name ORDER BY FIELD(str,str1,str2,str3,…) str: 字段名, str1,str2,str3: 自定义排序的数值 例1排序-所有值: 先姓名排序后出生日期排序 SELECT * from name_info ORDER BY FIELD(name…...

FFMPEG自学二 ⾳频编码实战
一、FFmpeg编码流程二、流程关键函数avcodec_find_encoder:根据指定的AVCodecID查找注册的编码器。 avcodec_alloc_context3:为AVCodecContext分配内存。 avcodec_open2:打开编码器。 avcodec_send_frame:将AVFrame⾮压缩数据给…...

一致魔芋在北交所上市:市值突破11亿元,吴平夫妇为实控人
2月21日,湖北一致魔芋生物科技股份有限公司(下称“一致魔芋”,BJ:839273)在北京证券交易所上市。本次上市,一致魔芋的发行价为11.38元/股,发行1350万股,募资总额约为1.54亿元。 本次发行后&…...

进程或线程终止是否会释放锁
线程锁的必要性比如一个多线程抢票程序,tickets作为临界资源,所有的线程都要对它进行判断ticket是否大于0,以及ticket–的操作。用ticket–操作举例,虽然他看起来是一行C语言的代码,但是实际上它的底层汇编经历了三个阶…...

mysql复制表提示某些为null字段无效
sql_mode‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’ explicit_defaults_for_timestamp ON 1、方式1、 首先用下面的命令看下sql_mode show variables like ‘sql_mode’; 如果查询的结果如下&#…...

【数据库】redis 配置文件与发布订阅
目录 配置文件 一,Units 二, INCLUDE 三,NETWORK 1, bind 2, tcp-backlog 3,timeout 4, tcp-keepalive 四,GENERAL 1,daemonize 2, pidfile 3&…...

ChatGPT来了,英语不能丢,但我不想上班
文 / 谷雨(微信公众号:王不留) 好久没写文,可能大伙已把我忘了。春节之后,状态一直不太好。我在2月1号时从老家直接来到了深圳出差,而后以996的工作状态疲于应付工作中的各种问题。 终于这周末休息了两天&a…...

【LeetCode】二叉树的直径 [E](二叉树)
543. 二叉树的直径 - 力扣(LeetCode) 一、题目 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 …...

Mybatis框架详解(全)
目录 MyBatis简介 MyBatis整体架构及运行流程 1.数据源配置文件 2.Sql映射文件 3.会话工厂与会话 4.运行流程 mybatis实现增删改查 Mybatis的获取参数的方式 mapper中自定义映射 mybatis注解开发 mybatis缓存 mybatis分页插件 MyBatis简介 MyBatis 是一款优秀的持久…...

2023年爆火的csgo搬砖项目详细拆解,steam搬砖长期稳定
不懂的同学可以听我下面慢慢道来 我的态度:存在即有意义,没有长久的赚钱项目,但是一定有长久赚钱的人。 我们团队也一直在做这个项目,赚钱是一定的,简单总结:执行力技巧量化。 开门见山 一、steam搬砖项…...