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

轻松上手:使用 Docker Compose 部署 TiDB 的简易指南

作者:ShunWah

在运维管理领域,我拥有多年深厚的专业积累,兼具坚实的理论基础与广泛的实践经验。精通运维自动化流程,对于OceanBase、MySQL等多种数据库的部署与运维,具备从初始部署到后期维护的全链条管理能力。拥有OceanBase的OBCA和OBCP认证、OpenGauss社区认证结业证书,以及崖山DBCA、亚信AntDBCA、翰高HDCA、GBase 8a | 8c | 8s、Galaxybase的GBCA、Neo4j的Graph Data Science Certification、NebulaGraph的NGCI & NGCP、东方通TongTech TCPE等多项权威认证。

在OceanBase & 墨天轮的技术征文大赛中,多次荣获一、二、三等奖。同时,在OpenGauss第五届、第六届、第七届技术征文大赛,TiDB社区专栏征文大赛,金仓数据库有奖征文活动,以及YashanDB「产品体验官」征文等活动中,我也屡获殊荣。此外,我还活跃于墨天轮、CSDN、ITPUB等技术平台,经常发布原创技术文章,并多次被首页推荐。

modbtidb.png

引言

TiDB 是一个开源的分布式关系型数据库,兼容 MySQL 协议。它结合了传统关系型数据库的强一致性和 NoSQL 数据库的可扩展性。本文将详细介绍如何在 CentOS 7 上使用 Docker Compose 部署一个完整的 TiDB 集群,包括 PD (Placement Driver)、TiKV (Storage Engine) 和 TiDB (SQL Layer),并进行基本的数据库操作和性能优化。

一、部署 TiDB

准备工作
首先确保你的 CentOS 7 系统已经安装了 Docker 和 Docker Compose。如果没有,请先安装它们:

1. 系统环境准备

确保你的开发环境满足tidb的运行要求。tidb支持多种操作系统,包括Linux、macOS和Windows。
本文以 x86 架构的 CentOS Linux 7.9 镜像作为环境介绍如何使用 docker容器化部署 tidb v7.5 数据库。

[root@worker3 tidb]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@worker3 tidb]# free -htotal        used        free      shared  buff/cache   available
Mem:            27G        1.9G         19G        672M        5.8G         24G
Swap:          8.0G          0B        8.0G
[root@worker3 tidb]# 

image.png

2. docker 容器环境准备
 

[root@worker3 tidb]# docker version Client: Docker Engine - Community Version: 19.03.8 API version: 1.40 Go version: go1.12.17 Git commit: afacb8b7f0 Built: Wed Mar 11 01:22:56 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.8 API version: 1.40 (minimum version 1.12) Go version: go1.12.17 Git commit: afacb8b7f0 Built: Wed Mar 11 01:30:32 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683 [root@worker3 tidb]# docker-compose version docker-compose version 1.28.6, build 5db8d86f docker-py version: 4.4.4 CPython version: 3.7.10 OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019 [root@worker3 tidb]#

image.png

3、Docker 部署 TiDB 拉取镜像:

通过 Docker 部署 TiDB 适合测试或开发环境,可快速启动基础集群。步骤如下:

[root@worker3 tidb]# docker pull pingcap/pd:v7.5.1
v7.5.1: Pulling from pingcap/pd
Digest: sha256:0e87d077d0fd92903e26a6ebeda633d6979380aac6fc76aa24c6a02d25a404f6
Status: Downloaded newer image for pingcap/pd:v7.5.1
docker.io/pingcap/pd:v7.5.1
[root@worker3 tidb]# docker pull pingcap/tikv:v7.5.1
v7.5.1: Pulling from pingcap/tikv
Digest: sha256:e68889611930cc054acae5a46bee862c4078af246313b414c1e6c4671dceca63
Status: Downloaded newer image for pingcap/tikv:v7.5.1
docker.io/pingcap/tikv:v7.5.1
[root@worker3 tidb]# docker pull pingcap/tidb:v7.5.1
v7.5.1: Pulling from pingcap/tidb
Digest: sha256:49159e21bdb8671cca48394ab4b6dc4e92527a775d24daf5a4b4c8d6f175a9fe
Status: Downloaded newer image for pingcap/tidb:v7.5.1
docker.io/pingcap/tidb:v7.5.1
[root@worker3 tidb]#

image.png

4、创建 docker-compose.yml 文件:

Docker Compose 更适合需要简化配置、快速部署和管理多个容器的场景。接下来,我们将为 TiDB 的各个组件(PD、TiKV、TiDB)编写 docker-compose.yml 文件。步骤如下:

[root@worker3 tidb]# vim docker-compose.ymlversion: '3'
services:pd:image: pingcap/pd:latestcontainer_name: tidb_pdcap_add:- SYS_ADMINsecurity_opt:- seccomp:unconfinedprivileged: trueports:- "2379:2379"- "2380:2380"environment:- PD_SERVER_NAME=pd- INITIAL_CLUSTER=pd=http://pd:2380- ETCD_INITIAL_CLUSTER_STATE=newvolumes:- pd-data:/pdtikv:image: pingcap/tikv:latestcontainer_name: tidb_tikvcap_add:- SYS_ADMINsecurity_opt:- seccomp:unconfinedprivileged: trueports:- "20160:20160"environment:- PD_ADDR=pd:2379depends_on:- pdvolumes:- tikv-data:/tikvtidb:image: pingcap/tidb:latestcontainer_name: tidb_servercap_add:- SYS_ADMINsecurity_opt:- seccomp:unconfinedprivileged: trueports:- "4000:4000"environment:- PATH="bin:$PATH"- MYSQL_HOST=0.0.0.0- MYSQL_PORT=4000- STORE=tikv- PATH=bin:$PATH- PD_ADDR=pd:2379depends_on:- tikv- pdvolumes:- tidb-data:/tidbvolumes:pd-data:tikv-data:tidb-data:

image.png

5、启动 TiDB 集群

保存上述配置后,在相同目录下运行以下命令启动 TiDB 集群:

[root@worker3 tidb]# docker-compose up -d
Starting tidb_pd ... done
Starting tidb_tikv ... done
Starting tidb_server ... done
[root@worker3 tidb]# 

image.png

二、数据库使用优化操作

1、创建数据库和表

连接到 TiDB 实例并执行 SQL 命令:

[root@worker3 tidb]# mysql -h 127.0.0.1 -P 4000 -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2097154
Server version: 8.0.11-TiDB-v7.5.1 TiDB Server (Apache License 2.0) Community Edition, MySQL 8.0 compatibleCopyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

image.png

2、查看数据库版本

在 MySQL 客户端中:查看版本 Version: v7.5.1

mysql> SELECT tidb_version();
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tidb_version()                                                                                                                                                                                                                                                     |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Release Version: v7.5.1
Edition: Community
Git Commit Hash: 7d16cc79e81bbf573124df3fd9351c26963f3e70
Git Branch: heads/refs/tags/v7.5.1
UTC Build Time: 2024-02-27 14:28:32
GoVersion: go1.21.6
Race Enabled: false
Check Table Before Drop: false
Store: unistore |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> 

image.png

3、创建数据库
mysql> CREATE DATABASE testdb;
Query OK, 0 rows affected (0.02 sec)mysql> USE testdb;
Database changed
mysql> 

image.png

4、创建表
mysql> CREATE TABLE employees (->     id INT PRIMARY KEY AUTO_INCREMENT,->     name VARCHAR(255) NOT NULL,->     age INT,->     position VARCHAR(255),->     salary DECIMAL(10, 2)-> );
Query OK, 0 rows affected (0.02 sec)mysql> 

image.png

5、插入数据
mysql> INSERT INTO employees (name, age, position, salary) VALUES -> ('John Doe', 30, 'Software Engineer', 80000),-> ('Jane Smith', 28, 'Product Manager', 90000),-> ('Alice Johnson', 35, 'Senior Developer', 110000),-> ('Bob Brown', 45, 'CTO', 150000),-> ('Charlie Davis', 22, 'Junior Developer', 60000),-> ('David Wilson', 33, 'DevOps Engineer', 95000),-> ('Eve Taylor', 29, 'QA Engineer', 75000),-> ('Frank White', 40, 'Director of Engineering', 130000),-> ('Grace King', 37, 'UX Designer', 85000),-> ('Henry Lee', 31, 'Backend Developer', 82000);
Query OK, 10 rows affected (0.01 sec)
Records: 10  Duplicates: 0  Warnings: 0mysql> 

image.png

6、查询所有员工信息
mysql> SELECT * FROM employees;
+----+---------------+------+-------------------------+-----------+
| id | name          | age  | position                | salary    |
+----+---------------+------+-------------------------+-----------+
|  1 | John Doe      |   30 | Software Engineer       |  80000.00 |
|  2 | Jane Smith    |   28 | Product Manager         |  90000.00 |
|  3 | Alice Johnson |   35 | Senior Developer        | 110000.00 |
|  4 | Bob Brown     |   45 | CTO                     | 150000.00 |
|  5 | Charlie Davis |   22 | Junior Developer        |  60000.00 |
|  6 | David Wilson  |   33 | DevOps Engineer         |  95000.00 |
|  7 | Eve Taylor    |   29 | QA Engineer             |  75000.00 |
|  8 | Frank White   |   40 | Director of Engineering | 130000.00 |
|  9 | Grace King    |   37 | UX Designer             |  85000.00 |
| 10 | Henry Lee     |   31 | Backend Developer       |  82000.00 |
+----+---------------+------+-------------------------+-----------+
10 rows in set (0.00 sec)mysql> 

image.png

7、创建分区表

为了在 CentOS 7 上使用 Docker Compose 部署 TiDB 7.5,并详细记录整个过程,包括创建数据库、表结构迁移(特别是分区表)、数据插入及优化等步骤。以下是详细的部署指南和实操命令流程。

TiDB 支持多种类型的分区表,这里我们创建一个按范围分区的表:

 

mysql> CREATE TABLE sales ( -> id INT NOT NULL AUTO_INCREMENT, -> sale_date DATE NOT NULL, -> amount DECIMAL(10, 2), -> PRIMARY KEY (id, sale_date) -- 主键包含分区列 -> ) PARTITION BY RANGE (YEAR(sale_date)) ( -> PARTITION p0 VALUES LESS THAN (2020), -> PARTITION p1 VALUES LESS THAN (2021), -> PARTITION p2 VALUES LESS THAN (2022), -> PARTITION p3 VALUES LESS THAN MAXVALUE -> ); Query OK, 0 rows affected (0.02 sec) mysql>

image.png


让主键包含分区函数中使用的列(即 sale_date),从而满足 TiDB 的约束条件。

8、 插入数据
mysql> INSERT INTO sales (sale_date, amount) VALUES -> ('2019-12-31', 5000),-> ('2020-01-01', 7000),-> ('2020-12-31', 8000),-> ('2021-01-01', 9000),-> ('2021-12-31', 10000),-> ('2022-01-01', 11000);
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0mysql> 

image.png

9、查询 2020 年的数据

SELECT * FROM sales WHERE sale_date BETWEEN ‘2020-01-01’ AND ‘2020-12-31’;

mysql> SELECT * FROM sales WHERE sale_date BETWEEN '2020-01-01' AND '2020-12-31';
+----+------------+---------+
| id | sale_date  | amount  |
+----+------------+---------+
|  2 | 2020-01-01 | 7000.00 |
|  3 | 2020-12-31 | 8000.00 |
+----+------------+---------+
2 rows in set, 1 warning (0.00 sec)mysql> 

image.png

10、查询 2021 年的数据

SELECT * FROM sales WHERE sale_date BETWEEN ‘2021-01-01’ AND ‘2021-12-31’;

mysql> SELECT * FROM sales WHERE sale_date BETWEEN '2021-01-01' AND '2021-12-31';
+----+------------+----------+
| id | sale_date  | amount   |
+----+------------+----------+
|  4 | 2021-01-01 |  9000.00 |
|  5 | 2021-12-31 | 10000.00 |
+----+------------+----------+
2 rows in set, 1 warning (0.00 sec)mysql> 

image.png

三、数据库优化实战

1、普通表的优化与分析

我们可以对表进行索引优化以提高查询效率:

1.1 在经常用于搜索的列上添加索引
mysql> CREATE INDEX idx_position ON employees(position);
CREATE INDEX idx_salary ON employees(salary);
Query OK, 0 rows affected (0.14 sec)mysql> CREATE INDEX idx_salary ON employees(salary);
Query OK, 0 rows affected (0.11 sec)mysql> 

image.png

1.2 分析查询性能
mysql> EXPLAIN SELECT * FROM employees WHERE position = 'Software Engineer';
+-------------------------------+---------+-----------+-----------------------------------------------+---------------------------------------------------------------------------------+
| id                            | estRows | task      | access object                                 | operator info                                                                   |
+-------------------------------+---------+-----------+-----------------------------------------------+---------------------------------------------------------------------------------+
| IndexLookUp_10                | 0.01    | root      |                                               |                                                                                 |
| ├─IndexRangeScan_8(Build)     | 0.01    | cop[tikv] | table:employees, index:idx_position(position) | range:["Software Engineer","Software Engineer"], keep order:false, stats:pseudo |
| └─TableRowIDScan_9(Probe)     | 0.01    | cop[tikv] | table:employees                               | keep order:false, stats:pseudo                                                  |
+-------------------------------+---------+-----------+-----------------------------------------------+---------------------------------------------------------------------------------+
3 rows in set (0.00 sec)mysql> 

image.png

2、分区表的优化与分析

我们可以对表进行索引优化以提高查询效率:
确保 sale_date 列上有索引,以便加速范围查询。

2.1 在经常用于搜索的列上添加索引
mysql> CREATE INDEX idx_sale_date ON sales(sale_date);
Query OK, 0 rows affected (0.11 sec)mysql> 

image.png

2.2 分析查询性能

TiDB 支持分区裁剪(Partition Pruning),在查询时会自动跳过无关分区,提升查询效率。例如:

mysql> EXPLAIN SELECT * FROM sales WHERE sale_date BETWEEN '2020-01-01' AND '2020-12-31';
+-------------------------+---------+-----------+---------------+----------------------------------------------------------------------------------------------------------------+
| id                      | estRows | task      | access object | operator info                                                                                                  |
+-------------------------+---------+-----------+---------------+----------------------------------------------------------------------------------------------------------------+
| TableReader_7           | 2.00    | root      | partition:p1  | data:Selection_6                                                                                               |
| └─Selection_6           | 2.00    | cop[tikv] |               | ge(testdb.sales.sale_date, 2020-01-01 00:00:00.000000), le(testdb.sales.sale_date, 2020-12-31 00:00:00.000000) |
|   └─TableFullScan_5     | 6.00    | cop[tikv] | table:sales   | keep order:false                                                                                               |
+-------------------------+---------+-----------+---------------+----------------------------------------------------------------------------------------------------------------+
3 rows in set (0.01 sec)mysql> 
2.3 查看执行计划,确认是否只扫描了相关的分区。

image.png

避免过度分区:
分区数量不宜过多,否则可能增加元数据管理的开销。通常建议根据业务需求合理划分分区范围。
在 TiDB 中创建分区表时,必须确保分区列与主键或唯一索引的关系符合其约束条件。
通过对比未加索引前后的查询性能,可以看到索引显著提升了查询速度。此外,TiDB 提供了分布式事务支持,使得大规模数据处理更加高效可靠。特别是在处理大量数据时,分区表可以有效提升查询性能和管理便利性。

总结

本篇征文介绍了如何在 CentOS 7 上利用 Docker Compose 快速搭建 TiDB 7.5 集群,并展示了基本的数据库操作如创建数据库、表以及数据插入。特别地,我们演示了如何创建分区表并对其进行优化。通过这些实践,可以更好地理解 TiDB 的功能特性及其应用场景,为后续深入学习和应用打下坚实基础。希望这篇教程能帮助更多开发者顺利部署并使用 TiDB 进行开发,享受其带来的高效和灵活性。同时,通过实际操作中的对比分析,进一步认识到了优化数据库设计的重要性。

关键点总结

  1. 环境准备:确保 Docker 和 Docker Compose 已正确安装。
  2. 集群部署:使用 Docker Compose 配置和启动 PD、TiKV 和 TiDB 服务。
  3. 数据库操作:创建数据库、表,插入数据,并进行查询。
  4. 性能优化:通过调整 TiDB 的启动参数来优化性能。
  5. 对比测试:通过插入数据和查询来验证 TiDB 的性能。

通过这些步骤,您可以快速上手 TiDB,并在实际业务中应用其强大的功能。

—— 仅供参考。如果有更多具体的问题或需要进一步的帮助,请随时告知。

相关文章:

轻松上手:使用 Docker Compose 部署 TiDB 的简易指南

作者:ShunWah 在运维管理领域,我拥有多年深厚的专业积累,兼具坚实的理论基础与广泛的实践经验。精通运维自动化流程,对于OceanBase、MySQL等多种数据库的部署与运维,具备从初始部署到后期维护的全链条管理能力。拥有Oc…...

Linux权限管理

权限的概念 在 Linux 系统里,权限管理是系统安全的关键环节。权限管理的核心目的是明确不同用户对文件和目录的操作许可范围,以此来保障系统资源的安全与合理使用。权限管理涉及三种不同的用户角色和三种基本的操作权限。 用户角色 所有者&#xff08…...

Crusader Kings III 王国风云 3(十字军之王 3) [DLC 解锁] [Steam] [Windows SteamOS macOS]

Crusader Kings III 王国风云 3(十字军之王 3) [DLC 解锁] [Steam] [Windows & SteamOS & macOS] DLC 版本 至最新全部 DLC 后续可能无法及时更新文章,具体最新版本见下载文件说明; DLC 解锁列表(仅供参考&am…...

架构风格对比

架构风格深度对比:从管道-过滤器到微内核 📜 引言 在软件架构设计中,不同的架构风格适用于不同的业务场景。本文将深入解析 7种主流架构风格,包括它们的核心思想、优缺点、适用场景,并通过对比表格和示例帮助您选择最…...

V Rising 夜族崛起 [DLC 解锁] [Steam] [Windows SteamOS]

V Rising 夜族崛起 [DLC 解锁] [Steam] [Windows & SteamOS] 注意 这个符号表示 可打开折叠内容 需要有游戏正版基础本体,安装路径不能带有中文,或其它非常规拉丁字符;仅限用于自建服务器,并禁用 VAC !&#xff0…...

HTML标记语言_@拉钩教育

目录 1.文本标签 2.格式化标签 3.图片标签 4.超链接标签 5.表格标签 6表单标签 6.1 6.2 6.3 7.行内框架(超链接内套一个页面) 8.多媒体标签(音/视频) 1.文本标签 2.格式化标签 3.图片标签 4.超链接标签 5.表格标签 6表单标签 6.1 6.2 6.3 7.行内框架(超链接内套一个…...

云原生开发革命:iVX 如何实现 “资源即插即用” 的弹性架构?

云原生技术正以惊人的速度重塑软件开发的版图。短短几年间,它从少数技术先驱的实验性方案,迅速崛起为全球企业数字化转型的核心驱动力。Gartner 预测,到 2026 年,全球 85% 的企业将全面采用云原生技术进行应用开发与部署。云原生架…...

whois为什么有时会返回两个不同的域名状态

前阵子发现一直想注册但被别人注册了的一个域名快要过期了,就想着写个脚本跑在电脑上,每分钟检查一次域名状态,一旦域名被正式删除,就发封邮件通知我,这样就不用频繁手动检查域名状态了。 写脚本时发现一个有趣的现象…...

跨境电商店铺矩阵布局:多账号运营理论到实操全解析

在当今竞争激烈的全球电商市场中,跨境电商店铺矩阵布局已成为卖家脱颖而出的关键策略。本文将深入剖析跨境电商店铺矩阵布局的本质、优势,并提供从理论到实操的全方位指导,助力您在全球市场中开启属于自己的销售新篇章。 一、是什么&#xff…...

安卓基础(强制转换)

​​一、强制转换(Type Casting)​​ ​​1. 什么是强制转换?​​ 当你想将一个类型的对象转换为另一个类型时,如果它们之间存在继承关系,就需要​​强制转换​​。 ​​注意​​:只有存在继承关系的类型…...

VS2022+OpenCasCade配置编译

一、Open CASCADE Technology介绍及安装(windows10) Open CASCADE Technology(简称OCCT)是一款开源的 3D CAD/CAM/CAE 软件开发平台,广泛应用于工业设计、工程仿真、制造等领域。开源OCC对象库是一个面向对象C类库&…...

AIGC重构元宇宙:从内容生成到沉浸式体验的技术革命

1. 引言 当数字技术掀开人类交互的新篇章,元宇宙正从科幻构想蜕变为现实——这个由虚拟与现实交织的数字宇宙,承载着未来社会的娱乐、工作与社交形态。作为核心赋能技术,AIGC(人工智能生成内容)正以惊人的创造力&…...

当所有人都用上先进ai,如何保持你的优势?

这不再是你能用上openai模型别人只能用文心一言的时候,而是每个人都可以免费用deepseek r1的时代。如今,办公室里每个人都能随时调用deepseek模型,喊一声“帮我写段代码”便轻松解决问题。在这种情况下,单纯“会用AI”已经很难再形…...

【浙江大学DeepSeek公开课】人类经验与AI算法的镜像之旅

人类经验与AI算法的镜像之旅 人类经验与 AI 算法的镜像之旅一、语言的奥秘:人类如何解码世界二、从符号到智能:AI 的语言理解之路三、DeepSeek - V3:大语言模型的构建与进化四、DeepSeek - R1:推理模型的诞生与突破五、智能体时代…...

【前端】从零开始的搭建顺序指南(技术栈:Node.js + Express + MongoDB + React)book-management

项目路径总结 后端结构 server/ ├── controllers/ # 业务逻辑 │ ├── authController.js │ ├── bookController.js │ ├── genreController.js │ └── userController.js ├── middleware/ # 中间件 │ ├── authMiddleware…...

探针台维护方法

探针台的维护直接影响其测试精度与使用寿命,需结合日常清洁、环境控制、定期校准等多维度操作,具体方法如下: 一、日常清洁与保养 1.‌表面清洁‌ 使用无尘布或软布擦拭探针台表面,避免残留清洁剂或硬物划伤精密部件。探针头清…...

js day8

事件绑定 事件:发生在html元素上的特定动作,鼠标点击,键盘按下,鼠标移入 事件三要素:事件源(触发事件的元素) 事件类型,事件触发后执行的函数 通过html触发事件(不建议…...

大模型训练平台:重构 AI 研发范式的智慧基建

当 AI 研发陷入“高耗低效”困局,如何破局? 在大模型技术爆发的今天,企业 AI 研发正面临前所未有的挑战:某金融机构为训练风控模型投入大量算力,却因数据标注耗时半年延误项目;某制造企业搭建的训练集群利…...

vuex刷新数据丢失解决方案-vuex-persist

安装 npm install -S vuex-persist(yarn add vuex-persist) 使用: /store/index.js引入vuex-persist配置: import Vue from vue import Vuex from vuex import VuexPersistence from vuex-persist import user from ./modules/use…...

多模态革命!拆解夸克AI相机技术架构:如何用视觉搜索重构信息交互?(附开源方案对比)

一、技术人必看:视觉搜索背后的多模态架构设计 夸克「拍照问夸克」功能绝非简单的OCRQA拼接,而是一套多模态感知-推理-生成全链路系统,其技术栈值得开发者深挖: 视觉编码器:基于Swin Transformer V2,支持4…...

Python依据卫星TLE轨道根数,计算可见时间窗口

1.卫星TLE数据 概括:两行字符串表示的卫星参数 字段 字符串位置(以0为起点) 描述内容注释1 01–01卫星编号203-07卫星类别卫星类别(U表示不保密,可供公众使用的;C 表示保密,仅限NORAD使用&…...

C++?模板!!!

一、引言 在之前我们一起学习了C中类和对象、动态内存管理等相关知识,今天我们将一起学习C中有关模板的相关知识,学完模板之后我们就可以进入C中非常重要的库---STL了,那么模板究竟有什么奥秘呢?让我们一起来看看吧! …...

web技术与nginx网站服务

一、Web服务基础概念 Web服务器核心功能 通过HTTP/HTTPS协议提供网页内容,支持HTML、CSS、JavaScript等静态资源,动态内容需结合后端语言(如PHP、Python)处理36。常用软件:Nginx、Apache、Lighttpd。Nginx以高并发、低…...

关系数据的可视化

目录 【实验目的】 【实验原理】 【实验环境】 【实验步骤】 一、安装Python所需要的第三方模块 二、实验 【实验总结】 【实验目的】 1.掌握关系数据在大数据中的应用 2.掌握关系数据可视化方法 3. python 程序实现图表 【实验原理】 在传统的观念里面&#xff0…...

MATLAB小试牛刀系列(1)

问题描述 某机床厂生产甲、乙两种机床,每台机床销售后的利润分别为 4 千元与 3 千元。生产甲机床需用 A、B 机器加工,加工时间分别为每台 2h 和每台 1h;生产乙机床需用 A、B、C 三种机器加工,加工时间均为每台 1h。若每天可用于加…...

CUDA、pytorch、配置环境教程合集

1.CUDA卸载 参考: 【环境搭建】卸载&重新安装cudacudnnanacondagpu版pytorch_卸载cuda-CSDN博客 【cuda】cuda安装与卸载升级_升级cuda-CSDN博客 检测代码: https://www.zhihu.com/question/482335084 import torch print(CUDA版本:,torch.vers…...

代码随想录打卡|Day29 动态规划Part02(不同路径、不同路径2、整数拆分、不同的二叉树搜索)

动态规划Part02 不同路径 力扣题目链接 代码随想录链接 视频讲解链接 题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xf…...

Leetcode刷题 | Day49_图论01

一、学习任务 深度优先搜索理论基础深度优先搜索理论基础 | 代码随想录98. 所有可达路径(ACM)797. 所有可能的路径(Leetcode)广度优先搜索理论基础 二、具体题目 1.深度优先搜索理论基础 类似回溯算法,二叉树的前中后序遍历是其在二叉树领域的应用。 代码框架&am…...

if consteval

if consteval 是 C23 引入的新特性,该特性是关于immediate function 的,即consteval function。用于在编译时检查当前是否处于 立即函数上下文(即常量求值环境),并根据结果选择执行不同的代码路径。它是对 std::is_con…...

【iOS】OC源码阅读——alloc源码分析

文章目录 前言基本调试方法allocalloc函数逐步调试空类检查快速路径:默认内存分配慢速路径:自定义内存分配slowpath和fastpath alloc核心操作cls->instanceSize:计算所需内存大小内存字节对齐原则为什么要16字节对齐内存字节对齐总结 其他…...

[JavaScript]对象关联风格与行为委托模式

对象关联. “[[prototype)]的机制就是存在于对象中的一个内部链接,它会引用其它对象” 为何创建原型链(关联)? Object.create()会创建一个新对象,参数对象会作为新对象的__proto__. “我们并不需要类来创建两个对象之间的关系,只需要通过委托来关联对象就足够了.而Object.c…...

在 Ubuntu 24.04 LTS 一台机子上同时部署Dify 1.3.1 和 RAGflow 0.18.0

一、RAGflow 0.18.0 简介 有关 Dify 的简介,可以查看我之前分享的 《在 Ubuntu24.04 LTS 上 Docker Compose 部署 Dify 社区版 1.0.1》文章。RAGFlow是一款基于深度文档理解(deepdoc)构建的开源 RAG引擎。其中,深度文档理解&#…...

小熊派BearPi-Pico H3863(二)环境配置 Ubuntu编译源码与VSCode远程开发指南

BearPi-H3863 Ubuntu编译源码与VSCode远程开发指南 摘要开发环境配置方案选型环境部署实战手册一、基础环境配置1. 镜像准备2. 虚拟机初始化3. 网络异常处理 二、VSCode远程开发配置1. SSH服务验证2. VSCode插件安装3. 远程连接实战4. 项目管理 关键要点总结 摘要 本文针对Bea…...

组装 (DIY) 一台显示器 (4K 屏支持 4 画面分屏 PBP 1080p x4)

首发日期 2025-04-26, 以下为原文内容: 家里的 PC 主机比较多, 如果同时开机, 显示器就不够用了. 因为穷, 窝租住的房间又很小, 放不下很多显示器. 所以, 窝希望买一台支持 分屏 功能的显示器. 最好是 4K 分辨率 (3840x2160) 的屏幕, 然后 4 分屏 (有 4 个 DP 或 HDMI 输入接口…...

SwiftUI 8.List介绍和使用

SwiftUI 的 List 组件用于展示可滚动的内容集合,支持静态或动态数据、交互操作(如点击、滑动删除)、分组、自定义样式等。以下是其详细介绍及使用方法: 一、基本用法 1. 静态列表 直接声明固定内容: struct Content…...

Android Kotlin ViewModel 错误处理:最佳 Toast 提示方案详解

在 Android Kotlin 的 ViewModel 中显示 Toast 提示需要特殊处理,因为 ViewModel 不应该直接持有 Context(避免内存泄漏),且 UI 操作(如 Toast)必须在主线程执行。以下是几种标准解决方案: 方案…...

Vue 集成 wangEditor5 公式编辑器的实现步骤‌

Vue 集成 wangEditor5 公式编辑器的实现步骤‌ 1. 安装公式依赖库‌2. 配置公式编辑器插件‌3. 启用工具栏公式按钮‌4. 组件模板与事件绑定‌功能验证与调试‌注意事项‌版本兼容性‌: 1. 安装公式依赖库‌ 安装 KaTeX 或 kityformula‌:根据项目需求选…...

go语言八股文(五)

1.go的局部变量是分配在栈上还是在堆上 在Go语言中,局部变量的内存分配(栈或堆)由编译器基于逃逸分析(escape analysis)来决定。以下是总结和具体示例: 栈上分配 当局部变量的生命周期严格限定在函数作用…...

C++ 解决一个简单的图论问题 —— 最小生成树(以 Prim 算法为例)

使用 C 解决一个简单的图论问题 —— 最小生成树(以 Prim 算法为例),并且使用 Graphviz 库来生成结果图。 在图论中,“边权之和最小” 是最小生成树(MST)的核心目标,其含义和背景可以从以下几个…...

OpenCV计算机视觉实战(2)——环境搭建与OpenCV简介

OpenCV计算机视觉实战(2)——环境搭建与OpenCV简介 0. 前言1. OpenCV 安装与配置1.1 安装 Python-OpenCV1.2 配置开发环境 2. OpenCV 基础2.1 图像读取与显示2.2 图像保存 3. 摄像头实时捕获小结系列链接 0. 前言 OpenCV (Open Source Computer Vision …...

pgrep和pkill命令详解

pgrep 与 pkill 命令详解‌ ‌一、基础功能‌ 命令作用核心机制pgrep根据条件查找进程ID (PID)通过进程名、用户、终端等属性筛选进程,输出匹配的PID列表pkill根据条件终止进程向符合条件的进程发送信号(默认发送SIGTERM,可指定其他信号&am…...

Python----卷积神经网络(卷积为什么能识别图像)

一、卷积的概念 卷积是一种数学运算,通常用于信号处理和图像分析。在卷积神经网络中,卷积操作用于提取输入数据(如图像)中的特征。通过将输入数据与卷积核(滤波器)进行卷积运算,CNN能够识别图像…...

web3.js 和 ethers.js 的核心区别

1. 核心设计理念 ---------web3.jsethers.js开发背景以太坊基金会官方维护独立开发者创建,社区驱动架构风格集中式对象 (web3 为核心)模块化设计(分离 Wallet/Provider/Contract)包体积较大(1MB)更轻量(压…...

Atcoder Help 有关Atcoder 的介绍-1 涨分规则

AtCoder 的 Rating 计算系统基于改进的 Elo 算法,主要包含以下核心机制: 一、基础计算公式 Rating 是「表现分(Performance)」的加权平均值减去衰减函数 f ( n ) f(n) f(n),其中: 新用户初始 f ( 1 ) 1200 f(1)1200 f(1)120…...

Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)

文章目录 1. 项目准备1.1 创建新项目1.2 添加必要依赖 2. 数据库设计3. 实现数据库3.1 创建实体类 (Entity)3.2 创建数据访问对象 (DAO)3.3 创建数据库类 4. 创建 Repository5. 创建 ViewModel6. 实现 UI 层6.1 创建笔记列表 Activityactivity_notes_list.xmlNotesListActivity…...

K8S学习笔记01

是什么 高可用,可扩展,自动化,容器化,管理多容器 组件 master API server controller manager scheduler etcd node 对应一台机器 负责运行和托管容器化 kubelet container runtime kube-proxy pod 同一个pod内的容器…...

奥威BI+AI数据分析解决方案

在数字化时代,数据已成为企业决策的核心驱动力。随着大数据、云计算、人工智能等技术的快速发展,企业对数据分析的需求日益迫切。奥威BI(Business Intelligence)与AI(Artificial Intelligence)的结合&#…...

第36课 常用快捷操作——用“鼠标右键”退出当前命令

概述 在AD 20软件中,很多的命令都是可以一直连续下去的,比方说放置一个元器件符号,如果你当中不取消的话,那就可以一直执行下去,放完一个接着放下一个,放完一个接着放下一个…… 想要退出这种连续进行的命…...

用Java模拟打字:深入解析 java.awt.Robot 的键盘控制艺术

作为开发者,我们有时会遇到需要自动化用户界面交互的场景,比如自动化测试、脚本编写、或者制作一些辅助工具。而模拟键盘输入,尤其是“打字”,是这类自动化任务中非常基础且常见的一环。 在 Java 中,实现这一目标的利…...

基于STM32、HAL库的ATSHA204A安全验证及加密芯片驱动程序设计

一、简介: ATSHA204A是Microchip公司生产的一款高性能加密认证芯片,主要特性包括: 基于SHA-256哈希算法的安全认证 4.5KB EEPROM存储空间(可配置为密钥存储、OTP区域等) 唯一的72位序列号 支持I2C和单线接口 工作…...