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

国产数据库TiDB从入门到放弃教程

国家层面战略,安全的角度,硬件、软件国产化是趋势,鸿蒙电脑操作系统、鸿蒙手机操作系统…数据库也会慢慢国产化,国产数据库TiDB用起来比OceanBase丝滑,本身没有那么重。

从入门到放弃

    • 1. 介绍
      • 1.1 TiDB 的主要特点
      • 1.2 TiDB 架构概览
      • 1.3 使用场景
    • 2. 安装
    • 3. SQL语句
    • 4. SQL分类
    • 5. DDL
      • 5.1 库的DDL
      • 5.2 表、列的DDL
    • 6. DML
      • 6.1 添加数据
      • 6.2 修改数据
      • 6.3 删除数据
    • 7. DQL
      • 7.1 基础查询
      • 7.2 条件查询
      • 7.3 排序查询
      • 7.4 聚合函数
      • 7.5 分组查询
      • 7.6 分页查询
    • 8. 约束
      • 8.1 约束分类
    • 9. 多表查询
      • 9.1 内连接查询
      • 9.2 外连接查询
      • 9.3 子查询
    • 10. 事务
      • 10.1 隔离级别
    • 11. 函数
      • 11.1 数学函数
      • 11.2 字符串函数
      • 11.3 日期函数
    • 12. DCL
      • 12.1 用户管理
      • 12.2 权限管理
    • 13. 备份与还原

1. 介绍

TiDB 是一个开源的分布式 NewSQL 数据库,兼容 MySQL 协议。它结合了传统关系型数据库(RDBMS)和 NoSQL 数据库的优点,旨在提供水平扩展、强一致性和高可用性。TiDB 由 PingCAP 公司开发,并得到了社区的广泛支持。

1.1 TiDB 的主要特点

  1. MySQL 兼容

    • TiDB 完全兼容 MySQL 协议,使得现有的 MySQL 应用可以无缝迁移到 TiDB,而无需修改代码。
    • 支持大部分 MySQL 特性,如事务、存储过程、触发器等。
  2. 水平扩展

    • TiDB 设计为分布式架构,可以轻松地通过添加更多节点来实现水平扩展,以应对不断增长的数据量和查询负载。
    • 分布式架构还允许 TiDB 处理大规模数据集,同时保持高性能。
  3. 强一致性

    • TiDB 使用 Raft 共识算法来保证分布式系统中的强一致性。
    • 这意味着所有成功的写入操作在集群中的一致副本上都是一致的,从而避免了数据不一致的问题。
  4. 高可用性

    • TiDB 架构中的各个组件(如 TiKV、PD 和 TiDB Server)都是无单点故障设计,确保系统的高可用性。
    • 数据自动复制和故障转移机制进一步增强了系统的可靠性。
  5. HTAP (Hybrid Transactional/Analytical Processing)

    • TiDB 支持混合事务/分析处理,即可以在同一个集群中同时高效地执行 OLTP(在线事务处理)和 OLAP(在线分析处理)工作负载。
    • 这减少了维护多个不同类型的数据库系统的需求,简化了架构并降低了成本。
  6. 云原生

    • TiDB 可以部署在物理机、虚拟机、容器或云端环境中,具有良好的云原生特性。
    • 它与 Kubernetes 等容器编排工具集成良好,便于管理和自动化运维。
  7. 生态丰富

    • TiDB 拥有活跃的开源社区,提供了丰富的插件和工具,例如备份恢复工具 BR、数据同步工具 DM、监控工具 Prometheus + Grafana 等。
    • 社区和官方文档资源丰富,易于学习和使用。
  8. 多数据中心部署

    • TiDB 支持跨多个数据中心部署,这有助于提高灾难恢复能力和地理冗余度。

1.2 TiDB 架构概览

  • TiDB Server:负责处理 SQL 请求、优化查询计划和与客户端通信。它是无状态的,可以横向扩展。
  • PD (Placement Driver):管理元数据、调度任务和分配全局唯一 ID。PD 是整个集群的大脑,确保数据分布合理且高效。
  • TiKV:是一个分布式键值存储引擎,负责持久化存储数据,并实现了 MVCC(多版本并发控制)以支持 ACID 事务。
  • TiFlash:是 TiDB 的列式存储引擎,主要用于加速 OLAP 查询。它与 TiKV 结合使用,提供 HTAP 能力。

1.3 使用场景

  • 金融行业:需要高可用性和强一致性的交易系统。
  • 互联网应用:面对大量用户请求,要求快速响应和灵活扩展的应用。
  • 数据分析:实时处理海量数据并进行复杂查询分析的场景。
  • 物联网 (IoT):处理来自众多设备的数据流,要求高吞吐量和低延迟。

在这里插入图片描述

2. 安装

下载tidb镜像或者导入tidb镜像

# 下载tidb镜像
docker pull xuxuclassmate/tidb# 导入tidb镜像
# docker load -i 文件名.tar.gz
# cat 文件名.tar.gz | docker load
docker load -i tidb.tar.gz

启动容器

docker run --name=tidb -d --privileged=true -p 4000:4000 xuxuclassmate/tidb

3. SQL语句

SQL的英文是Structured Query Language,简称SQL,是一种操作关系型数据库的结构化查询语言。操作数据库,最经常使用就是查询操作。

1、TiDB数据库的SQL语句不区分大小写,关键字建议使用大写;

2、SQL语句可以使用单行或多行书写,以分号结尾

3、注释

单行注释

- 单行注释# 单行注释

多行注释

/*
多行注释
多行注释
*/

4. SQL分类

分类说明作用备注
DDL数据定义语言用来对数据库、表、列的定义data definition language
DML数据操作语言用来对数据库中表的数据进行增、删、改操作data manipulation language
DQL数据查询语言用来对数据库中表的数据进行查询data query language
DCL数据控制语言用来对数据库的控制(用户创建、权限控制)data control language

5. DDL

5.1 库的DDL

一个功能,一般都是四个动作,增删改查。

展示所有的数据库

show databases;

创建数据库

create database 数据库名称 charset=utf8;
create database if not exists 数据库名称 charset=utf8; # 使得SQL语句更加强健、健壮。

示例:

create database db1 charset=utf8;
create database if not exists db1 charset=utf8;

删除数据库

drop database 数据库名称;
drop database if exists 数据库名称;

示例:

drop database test;
drop database if exists test;

使用数据库

use 数据库名称;

查询正在使用的数据库

select database();

小结:

命令作用示例
show databases;查看所有数据库show databases;
create database if not exists 数据库名 charset=utf8;创建数据库create database if not exists db1 charset=utf8;
use 数据库名;使用数据库use db1;
select database();查看当前使用的数据库select database();
drop database if exists 数据库名;删除数据库drop database if exists db1;

5.2 表、列的DDL

列的内容可以是数字、字符串、时间等,由数据类型约束

在满足业务需求的请求下,数据类型范围选择越小的。

数值数据类型

数据类型字节数有符号无符号
tinyint1个字节-128~1270~255
smallint2个字节-32768~327670~65535
mediumint3个字节-8388608~83886070~16777215
int4个字节-2147483648~21474836470~4294967295
bigint8个字节-263~263-10~2^64-1
float单精度,4个字节-231~231-10~2^32-1
double双精度,8个字节
decimal[M, D]双精度,8个字节

decimal(5,2),表示共5位数字,其中2位是小数,比如:888.88

字符串数据类型

数据类型长度用途
char(size)最大255个字符数据是定长,如md5的密码,邮编,手机号,身份证号等
varchar(size)最大65535个字节存放一般内容长度
tinytext最大255个字节
text最大65535个字节
mediumtext最大16777215个字节大段文本时,如新闻、文章、论文等
longtext最大4294967295个字节大段文本时,如新闻、文章、论文等

1、VARCHAR(size):0~65535字节 可变长度字符串,最大65532字节,1-3个字节用于记录大小【utf8编码size最大21844字符,gbk编码最大32766字符 】

2、查询速度:char > varchar

3、text与char、varchar不同的是,text不可以有默认值,能用varchar的地方不用text

日期+时间数据类型

数据类型格式
date年-月-日,如:2024-4-8
datetime年-月-日 时:分:秒,如:2024-4-8 16:17:40
timestamp年-月-日 时:分:秒,如:2024-4-8 16:17:40
time时:分:秒,如:16:17:40
year年,如:2024

datetime保存时间的范围: 1000-01-01 00:00:009999-12-31 23:59:59

timestamp保存时间的范围: 1970-01-01 00:00:012038-01-19 03:14:07

展示当前数据库所有表

show tables;

描述表结构

desc 表名;

查看表的创建语句

show create table 表名;show create table user;

创建表

create table 表名(字段名1 数据类型,字段名2 数据类型,...字段名n 数据类型  # 最后一个不需要逗号(,)
);示例:
create table if not exists user(id tinyint,username varchar(32),age tinyint
);

删除表

drop table 表名称;
drop table if exists 表名称;

修改表、列

# 修改表名
alter table 原来的表名 rename to 新的表名;示例:
alter table user rename to users;# 增加一列
alter table 表名 add 列名 数据类型;示例:
alter table users add height float;# 修改列数据类型
alter table 表名 modify 列名 新数据类型;示例:
alter table users modify id int;# 修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型;示例:
alter table users change id no tinyint;# 删除列
alter table 表名 drop 列名;示例:
alter table users drop height;

小结:

命令作用
show tables;查看当前数据库中所有表
desc 表名;查看表结构
show create table 表名;查看表的创建语句
alter table 表名 rename to 新的表名;修改表名
alter table 表名 add 列名 类型;添加字段
alter table 表名 modify 列名 类型及约束;修改字段数据类型
alter table 表名 change 原名 新名 类型及约束;修改字段名和数据类型
alter table 表名 drop 列名;删除字段
drop table 表名;删除表

6. DML

6.1 添加数据

添加指定列数据

insert into 表名(列名1,列名2...) values(1,2...);

添加全部列数据

insert into 表名 values(1,2...);示例:
insert into users values(1, 'zhangsan', 18);

批量添加指定列数据

insert into 表名(列名1,列名2...) values(1,2...),(1,2...)...;

批量添加全部列数据

insert into 表名 values(1,2...),(1,2...)...;示例:
insert into users values(1, 'lisi', 18),(1, 'wanger', 19);

6.2 修改数据

修改表数据

update 表名 set 列名1=1 列名2=2...[where条件];示例:
update users set no=2 where username='lisi';

注:如果不加where条件,就是对该表所有行内容进行修改

6.3 删除数据

删除表数据

delete from 表名 [where条件]示例:
delete from users where username='wanger';

注:如果不加where条件,就是对该表所有行内容进行删除

7. DQL

完整语法

SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段
HAVING分组后条件
ORDER BY排序字段
LIMIT分页限定
- 创建数据库
create database if not exists db1- 创建数据库表
use db1;create table if not exists stu(id int(11),username varchar(32),sex tinyint(1),age tinyint(3),math tinyint(3),chinese tinyint(3)
);- 添加数据
insert into stu values(1,'小张',1,16,75,86),(2,'小李',1,16,76,86),(3,'小王',0,17,76,87),(4,'小胡',0,17,77,87),(5,'小丘',0,18,77,88),(6,'小刘',0,18,80,90);

7.1 基础查询

- 查询指定字段
select id,username from stu;- 查询表所有字段
select * from stu;- 去除重复记录
select distinct sex from stu;- 字段取别名
select id,sex as gender,math shuxue from stu;

7.2 条件查询

select 字段列表 from 表名 where条件

where后面支持多种运算符

运算符功能描述
比较运算符=、>、>=、<、<=、!=、<>
逻辑运算符and、&&、or、||、not
模糊查询like
范围查询between…and…、in(…)
空判断is null、is not null

模糊查询使用like关键字,可以使用通配符进行占位

_:代表单个任意字符

%:代表任意个字符

正则表达式

select * from stu where class_id REGEXP '1|7';

7.3 排序查询

select 字段列表 from 表名 order by 排序字段名1 [,排序字段2]...;

注:排序方式有上序ASC,降序DESC,默认情况下是升序ASC

select * from stu order by math desc,chinese desc;

7.4 聚合函数

在进行查询操作时,往往需要对一整列进行运算,例如成绩的平均分

函数名功能
count(列名)统计数量(一般选用不为null的列)
max(列名)最大值
min(列名)最小值
sum(列名)求和
avg(列名)平均值
select 聚合函数 from 表名;

注:NULL值不参与聚合函数运算

7.5 分组查询

select 字段列表 from 表名 [where分组前的条件限定] group by 分组字段名 [having 分组后的条件过滤];

注:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义

select sex,max(math),max(chinese) from stu group by sex;

7.6 分页查询

select 字段列表 from 表名 limit 查询起始索引,查询条目数

注:limit关键字中,查询起始索引是从0开始的

8. 约束

约束是作用于数据库表中列上的规则,用于限制添加数据的行为。从而保证数据库中数据的正确性、有效性和完整性。

8.1 约束分类

约束类型关键字功能
非空约束NOT NULL保证列中所有数据不能有NULL值
唯一约束UNIQUE保证列中所有数据各不相同
主键约束PRIMARY KEY主键是一行数据的唯一标识,要求非空且唯一
默认约束DEFAULT保存数据时,未指定值则采用默认值
外键约束FOREIGN KEY外键用来让两个表数据建立关联,保证数据的一致性和完整性
检查约束CHECK保证列中的值满足某一条件
create table if not exists stu(id int(11) unsigned auto_increment primary key not null,username varchar(32) not null unique,sex tinyint(1) default 1 not null,age tinyint(3) not null,math tinyint(3) default 0 not null,chinese tinyint(3) default 0 not null
);

9. 多表查询

一次性从多张表中查询需要的数据

create table class(class_id int(11) unsigned auto_increment primary key not null,class_name varchar(32) not null unique
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;create table stu(stu_id int(11) unsigned auto_increment primary key not null,class_id int(11) not null,stu_name varchar(32) not null unique
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;insert into class(class_name) values('一班'),('二班');insert into stu(class_id,stu_name) values(1,'小张'),(1,'小李'),(2,'小孙'),(2,'小杨');

在MySQL中多表查询分为连接查询和子查询,连接查询又分为内连接和外连接,内连接又分为隐式内连接和显示内连接,外连接又分为左外连接和右外连接。

9.1 内连接查询

- 隐式内连接查询
select 字段列表 from1,2... where 条件;- 显式内连接查询
select 字段列表 from1 [inner] join2 on 条件;

示例

- 隐式内连接查询
select * from class,stu where class.class_id=stu.class_id;- 显式内连接查询
select * from class inner join stu on class.class_id=stu.class_id;

9.2 外连接查询

左外连接查询:相当于查询A表所有数据和交集部分数据

右外连接查询:相当于查询B表所有数据和交集部分数据

- 左外连接查询
select 字段列表 from1 left [outer] join2 on 条件;- 右外连接查询
select 字段列表 from1 right [outer] join2 on 条件;

示例

select * from stu left outer join class on stu.class_id=class.class_id;select * from stu right outer join class on stu.class_id=class.class_id;

9.3 子查询

指查询中嵌套有查询

子查询语句结果是单行单列,子查询语句作为条件值,使用>、>=、<、<=、=、!=等进行条件判断。

# class_id 大于 1班的class_id的学生
select * from stu where class_id > (select class_id from class where class_name='一班');

子查询语句结果是多行单列,子查询语句作为条件值,使用in等关键字进行条件判断

# 查询存在班级的学生
select * from stu where class_id in (select class_id from class);

子查询语句结果是多行多列,子查询语句作为虚拟表

select * from stu,(select * from class) c where stu.class_id=c.class_id;

10. 事务

使用场景:转账、下单扣库存

语法:

# 开启事务
start transaction;begin;-- 执行各种操作# 回滚事务
rollback;# 提交事务
commit;

事务特征:

1、原子性,事务是不可分割最小操作单位,要么同时成功,要么同时失败

2、一致性,事务完成时,必须使所有数据都保持一致状态

3、隔离性,多个事务之间,操作可见性

4、持久性,事务一旦提交或回滚,它对数据库中数据的改变是永久的

10.1 隔离级别

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。在事务的并发操作中可能会出现脏读,不可重复读,幻读。

读未提交(Read uncommitted):

解释:

一个事务读到了另一个事务还没有提交的数据。

例如:

A给B转账,
A转给B,10万,点转账,但未点确认
B查账户看到10万
A及时发现,点撤回,修改为1万,再点转账,再点确认

分析:

A给B最终转账是1万,但是在过程中,B能看到过程数据。这就是脏读。

读已提交(Read committed):
解释:

一个事务要等另一个事务提交后才能读取数据。

例如:

父亲的银行卡有10万
儿子拿着这个银行卡去买单,同时父亲准备转款(开启事务)。此时儿子看到银行卡里有10万
等儿子看完有10万后,钱被父亲转走,并提交
收费系统准备在这个银行卡扣款,再次检测,发现卡里没有钱了

分析:

这就是读已提交,若有事务对数据进行更新操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。
这个例子中,有读两次卡里的钱,一次是10万,一次是没有钱了,这就是不可重复读。

可重复读(Repeatable read):
解释:

同一事务下,事务在执行期间,多次读取同一数据时,能够保证读取到的数据是一致的。

例如:

父亲的银行卡有10万
儿子拿着这个银行卡去买单,此时儿子看到银行卡里有10万,这个时候父亲想转账,发现转不了
等儿子买完单,父亲才能够实行转账行为

分析:

读数据的时候,不允许该数据有写数据的事务。因为写数据会改变数据。这样子就解决了不可重复读的问题。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。

什么时候会出现幻读?

解释:

一个事务读取到了另一个事务新增的数据

例如:

儿子某一天去消费,花了8千元,然后他的父亲去查看他今天的消费记录(全表扫描,儿子事务开启),看到确实是花了8千元,就在这个时候,儿子花了1万买了一部电脑,即新增INSERT了一条消费记录,并提交。当父亲打印儿子的消费记录清单时(儿子事务提交),发现花了1.8万元,似乎出现了幻觉,这就是幻读。

串行化(Serializable):

解释:

它是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率最低,比较耗费数据库性能,一般不推荐使用。

小结:

隔离级别脏读不可重复读幻读
读未提交可能出现可能出现可能出现
读已提交不会出现可能出现可能出现
可重复读不会出现不会出现可能出现
串行化不会出现不会出现不会出现

隔离级别查询

-- MySQL8以前
SELECT @@GLOBAL.tx_isolation, @@tx_isolation;-- MySQL8开始
SELECT @@GLOBAL.transaction_isolation, @@transaction_isolation;

修改隔离级别

-- 建议开发者在修改时,仅修改当前session隔离级别即可
-- REPEATABLE-READ,MySQL默认级别
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE-READ

11. 函数

11.1 数学函数

函数含义
abs(x)返回x的绝对值
rand()返回0到1的随机数
mod(x,y)返回x除以y以后的余数
power(x,y)返回x的y次方
round(x)返回离x最近的整数
round(x,y)保留x的y位小数四舍五入后的值
sqrt(x)返回x的平方根
truncate(x,y)返回数字 x 截断为 y 位小数的值
ceil(x)返回大于或等于 x 的最小整数
floor(x)返回小于或等于 x 的最大整数
greatest(x1,x2…)返回返回集合中最大的值
least(x1,x2…)返回返回集合中最小的值

11.2 字符串函数

函数含义
trim()返回去除指定格式的值
concat(x,y)将提供的参数 x 和 y 拼接成一个字符串
substr(x,y)获取从字符串 x 中的第 y 个位置开始的字符串,跟substring()函数作用相同
substr(x,y,z)获取从字符串 x 中的第 y 个位置开始长度为z 的字符串
length(x)返回字符串 x 的长度
replace(x,y,z)将字符串 z 替代字符串 x 中的字符串 y
upper(x)将字符串 x 的所有字母变成大写字母
lower(x)将字符串 x 的所有字母变成小写字母
left(x,y)返回字符串 x 的前 y 个字符
right(x,y)返回字符串 x 的后 y 个字符
repeat(x,y)将字符串 x 重复 y 次
space(x)返回 x 个空格
strcmp(x,y)比较 x 和 y,返回的值可以为-1,0,1
reverse(x)将字符串 x 反转

11.3 日期函数

函数含义
current_date()当前日期
current_time()当前时间
current_timestamp()当前时间戳

12. DCL

12.1 用户管理

创建用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
-- 实例:
CREATE USER 'java'@'%' IDENTIFIED BY 'asd123crl';

删除用户

drop user 用户名@IP;
-- 实例:
drop user 'java'@'%';

修改密码

UPDATE `user` SET `Password` = PASSWORD('新密码') WHERE `User` = '用户名';
-- 实例:
UPDATE `user` SET `Password` = PASSWORD('asd123') WHERE `User` = 'java';

12.2 权限管理

常用权限:

  • 表数据: select, update, delete, insert
  • 表结构: create, alert, drop
  • 外键: references
  • 创建临时表: create temporary tables
  • 操作索引: index
  • 视图: create view, show view
  • 存储过程: create routine, alert routine, execute
  • 所有权限: all

查看用户权限命令

SHOW GRANTS FOR '用户名'@'主机名';
-- 实例:
SHOW GRANTS FOR 'root'@'%';

给用户授予权限

在MySQL中使用GRANT命令给用户授权,如果用户不存在,GRANT会自动创建用户,并进行授权。

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';  -- 权限列表中如果有多个权限则用逗号,隔开-- 授权所有库的所有表的所有权限
GRANT ALL ON *.* TO '用户名'@'主机名';  
-- 示例:给张三赋予db_test数据库students表的查询权限
GRANT SELECT ON db_test.students TO 'zhangsan'@'localhost';
-- 刷新权限
flush privileges

撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
-- 示例:撤销张三在db_test.students表的查询权限
REVOKE SELECT ON db_test.students FROM 'zhangsan'@'localhost';
-- 刷新权限
flush privileges

13. 备份与还原

备份语法:

mysqldump -h 服务器 -u 用户名 -p -B 数据库名1 数据库2 数据库n > 备份文件.sql

示例:

mysqldump -u root -p -B test > /backup/123.sql

还原语法:

mysqldump -h 服务器 -u 用户名 -p密码 --databases 数据库名 < 备份文件.sql# 进入数据库后
source 备份文件.sql;

示例:

mysqldump -u root -p --databases test < /backup/123.sql

一般系统推荐的字符集和排序规则

# 字符集
utf8mb4# 排序规则,不区分大小写
utf8mb4_general_cli

字符集(Character Set):utf8mb4

排序规则 | 字符序(Collate):utf8mb4_general_cli 或 utf8mb4_bin

在这里插入图片描述

相关文章:

国产数据库TiDB从入门到放弃教程

国家层面战略&#xff0c;安全的角度&#xff0c;硬件、软件国产化是趋势&#xff0c;鸿蒙电脑操作系统、鸿蒙手机操作系统…数据库也会慢慢国产化&#xff0c;国产数据库TiDB用起来比OceanBase丝滑&#xff0c;本身没有那么重。 从入门到放弃 1. 介绍1.1 TiDB 的主要特点1.2 T…...

深入解析 Spring 属性:spring.codec.max-in-memory-size

在现代 Web 应用开发中&#xff0c;数据传输的大小和效率直接影响到系统的性能和稳定性。Spring WebFlux 作为一种响应式编程框架&#xff0c;提供了强大的数据流处理能力。在使用 WebFlux 时&#xff0c;spring.codec.max-in-memory-size 是一个关键配置&#xff0c;用于定义应…...

在K8S中,如何查看Pod状态的详情?事件显示cpu不足如何处理?

在Kubernetes中&#xff0c;查看Pod状态的详细通常设计使用kubectl命令行工具&#xff0c;这是kubernetes提供的一个强大的管理工具。以下是如何查看Pod状态详情的步骤&#xff1a; 1. 查看Pod状态详情 列出所有Pod&#xff1a; 使用kubectl get pods命令可以查看集群所有Po…...

ArcGIS教程(009):ArcGIS制作校园3D展示图

文章目录 数据下载校园3D展示图制作创建要素类矢量化【楼】要素矢量化【绿地】矢量化【范围】矢量化处理打开ArcScene添加动画数据下载 https://download.csdn.net/download/WwLK123/90189025校园3D展示图制作 创建要素类 添加底图: 新建【文件地理数据库】,并修改名称为【…...

REDIS2.0

string list hash set 无序集合 声明一个key&#xff0c;键里面的值是元素&#xff0c;元素的类型是string 元素的值是唯一的&#xff0c;不能重复 多个集合类型之间可以进行并集&#xff0c;交集&#xff0c;集查的运算 sadd test1 a b c c d &#xff1a;添加5个元素&am…...

算法练习——模拟题

前言&#xff1a;模拟题的特点在于没有什么固定的技巧&#xff0c;完全考验自己的代码能力&#xff0c;因此有助于提升自己的代码水平。如果说一定有什么技巧的话&#xff0c;那就是有的模拟题能够通过找规律来简化算法。 一&#xff1a;替换所有问号 题目要求&#xff1a; 解…...

京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率

2024 年度总结系列 2024 年 10 月&#xff0c;京东零售供应链技术团队凭借其在库存选品与调拨技术上的创新与实践&#xff0c;荣获运筹与管理学领域的国际顶级奖项 Daniel H. Wagner Prize。本文为您介绍获奖背后的供应链技术创新和落地应用。 00 摘要 在电商行业中&#x…...

pytorch张量的fill_方法介绍

在 PyTorch 中&#xff0c;fill_ 是一个张量的原地操作方法&#xff0c;用于将张量中的所有元素填充为指定的值。 方法签名 Tensor.fill_(value)参数 value (float or int): 要填充到张量中的值。 返回值 返回调用该方法的张量本身&#xff0c;且是经过修改后的张量。 特…...

WAP短信格式解析及在Linux下用C语言实现

WAP短信格式解析及在Linux下用C语言实现 一、引言二、WAP短信格式概述三、WAP短信头的内容四、UDHI与WAP短信体的关系五、在Linux下用C语言解析WAP短信头及短信体内容一、引言 在移动通信领域,短信作为一种古老却稳定的通信方式,一直扮演着重要的角色。随着技术的发展,短信…...

Linux的诞生与发展、体系结构与发行版本

Linux作为一个开源操作系统&#xff0c;在过去几十年中一直扮演着至关重要的角色。它不仅深刻影响了服务器、桌面和移动设备&#xff0c;还成为了开源运动的重要组成部分。本文将介绍Linux的历史、体系结构、以及主要的发行版&#xff0c;帮助你更好地了解Linux的方方面面。 一…...

为什么Mysql用B+树作为索引

首先&#xff0c;能作为索引的数据结构有很多&#xff0c;例如数组、链表、二叉树 数据和索引都是存储在磁盘里的。 我们通过索引来查询数据时&#xff0c;先从磁盘读取索引到内存&#xff0c;再通过索引从磁盘中找到某行数据&#xff0c;然后读入到内存。 要设计一个适合 MySQ…...

探索 DC-SDK:强大的 3D 地图开发框架

在现代 Web 开发中&#xff0c;地理信息系统&#xff08;GIS&#xff09;和 3D 地图可视化变得越来越重要。dc-sdk 是一个基于 Cesium 的开源 WebGL 地图开发框架&#xff0c;它提供了丰富的地图可视化功能和简单易用的 API&#xff0c;使开发者能够轻松地在 Web 应用中集成 3D…...

C#高级篇 反射和属性详解【代码之美系列】

&#x1f380;&#x1f380;&#x1f380;代码之美系列目录&#x1f380;&#x1f380;&#x1f380; 一、C# 命名规则规范 二、C# 代码约定规范 三、C# 参数类型约束 四、浅析 B/S 应用程序体系结构原则 五、浅析 C# Async 和 Await 六、浅析 ASP.NET Core SignalR 双工通信 …...

算法 class 005 (对数器C语言实现)

对数器的概念&#xff1a; 用来测试你的算法是否正确。 怎么做呢&#xff1f; 1&#xff1a;比如&#xff0c;写个冒泡排序&#xff0c;作为对比的对象 2&#xff1a;生成一个随机数 数组&#xff0c;用来测试 3&#xff1a;用冒泡排序和你想要验证的那个排序算法&#xff0c;同…...

windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter

1.在win主菜单中找到Anaconda安装文件夹并打开终端 文件夹内有所有安装后的Anaconda的应用软件和终端窗口启动窗口 点击Anaconda Prompt&#xff08;Anaconda&#xff09;就会打开类似cmd的命令终端窗口&#xff0c;默认打开的路径是用户名下的路径 2.激活虚拟环境 使用命令…...

leetcode 面试经典 150 题:矩阵置零

链接矩阵置零题序号73题型二维数组解题方法标记数组法难度中等熟练度✅✅✅✅ 题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1]…...

SQL中的TRIM用法

TRIM 是 SQL 中用于去除字符串两端&#xff08;左侧和右侧&#xff09;的空格或特定字符的函数。这个函数常用于清理数据中的无效空白字符&#xff0c;尤其是在从外部系统导入数据时&#xff0c;常常会遇到数据两端有不必要的空格&#xff0c;使用 TRIM 可以去除这些多余的字符…...

Git Flow 工作流:保障修改不破坏主功能的完整指南20241230

Git Flow 工作流&#xff1a;保障修改不破坏主功能的完整指南 引言 在团队协作和个人项目中&#xff0c;Git Flow 是一种可靠的分支管理策略。通过清晰的分工和规范的流程&#xff0c;它能有效保障代码改动的安全性&#xff0c;避免修改破坏主功能&#xff0c;同时提高开发效…...

CentOS 7安装Docker详细教程

本文以 CentOS7.8 为例安装 Docker 26.1.4 、Docker Compose、以及 Docker 镜像仓库。 1.安装Docker社区版 1.1 安装准备 1.1.1 检查系统环境 Docker 不支持32位的 CentOS 7 系统&#xff0c;要求系统内核版本为3.10 以上&#xff0c;可以通过命令 uname -r 来查看当前系统…...

如何在 Ubuntu 22.04 上安装 Varnish HTTP 教程

简介 在本教程中&#xff0c;我们将学习如何在 Ubuntu 22.04 服务器上安装和配置 Varnish HTTP。 Varnish 是一款高性能的 HTTP 加速器&#xff0c;旨在提高内容密集型动态网站的速度。它通过将网页缓存在内存中来工作&#xff0c;从而减少 Web 服务器的负载&#xff0c;并显…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...