知乎 PB 级别 TiDB 数据库集群管控实践

以下文章来源于知乎技术专栏 ,作者代晓磊

导读

在现代企业中,数据库的运维管理至关重要,特别是面对分布式数据库的复杂性和大规模集群的挑战。作为一款兼容 MySQL 协议的分布式关系型数据库,TiDB 在高可用、高扩展性和强一致性方面表现卓越。知乎自 2019 年开始应用 TiDB,并通过云原生 Kubernetes(以下简称 K8s)环境和 TiDB Operator 来实现高效的集群管控,支撑业务的快速发展。本文由知乎数据库架构团队负责人代晓磊撰写,深入探讨知乎如何利用 TiDB 的生态架构和平台化运维工具,结合 TiDB Operator 和自研的天穹平台,构建出灵活、稳定且高效的数据库管控体系。通过自动化部署、数据迁移、监控预警等一系列手段,知乎为业务研发和 DBA 团队提供了强有力的支持,确保数据库服务能够在高并发、大数据场景下持续稳定运行。

相关推荐: 知乎 PB 级别 TiDB 数据库在线迁移实践


TiDB 是一款开源的分布式关系型数据库,兼容 MySQL 协议,支持水平扩展,具有强一致性和高可用性。它融合了传统关系型数据库与 NoSQL 的优势,支持大规模数据处理,适合处理高并发、复杂查询和大数据存储的场景,广泛应用于金融、互联网等行业。知乎从 2019 年就开始应用落地 TiDB,截止现在知乎的 TiDB 规模:

TiDB 规模总览

TiDB 规模总览

对于这种超大规模的 TiDB 集群,如何让业务更好地使用分布式数据库、DBA 更好地管控 TiDB?

接下来本文将从 TiDB 生态架构入手展开说明管控 TiDB 都需要具备哪些工具和能力,然后结合 TiDB on K8s 或者 TiDB on 物理机这 2 种不同管控方式选择来展开知乎的具体实践,并且通过平台化能力,从业务研发和数据库管控两个方面来落地具体的管控措施,为知乎业务研发赋能。

运维管控架构图

首先业务要使用 TiDB 分布式数据库,就需要深入了解 TiDB 的生态架构,它包含了各种工具和能力集合体,如下图所示:

TiDB 生态架构图

TiDB 生态架构图

这张图展示了 TiDB 的整体系统架构和它在不同子系统之间的交互。以下是主要模块和功能的总结:

(1) TiDB Cluster(核心组件) : 业务程序通过 LVS 或 H5 进行负载均衡组建访问 TiDB Cluster 这个无状态的 SQL 处理层,解析 SQL 请求、生成执行计划、调用下层 TiKV 存储来执行查询。TiKV 作为分布式的存储引擎来存储数据,它是一个分布式的、可水平扩展的 Key-Value 存储。PD(Placement Driver)这个“大脑”管理集群的元数据,负责数据的调度、负载均衡等操作,保障了集群的稳定。

(2) 数据迁移与同步 : 要想使用 TiDB,需要将数据进行流转,包括使用 DM(Data Migration)将数据库表从 MySQL 等其他数据库中迁移数据到 TiDB,保证数据的可靠迁移和一致性。另外 TiCDC 可以将数据变更从 TiDB 集群导出,并且支持与 Kafka、MySQL 等系统对接,提供实时数据同步。

(3) 运维与监控平台 : DBDAS 平台是 TiDB 集群管控不可缺少的一环,TiDB dashboard 和 TiEM 等平台提供了含元信息、热力图、巡检报告、SQL 审计、自动化管理、扩展缩容等功能,简化运维操作。监控是通过 Prometheus、Grafana 对集群进行监控,提供指标数据采集与展示,K8s 里面通过 TiDB Monitor 组件实现监控功能。

(4) 备份与恢复 : 数据库稳定性必不可少的就是备份/恢复,TiDB 采用 BR(Backup & Restore)进行物理备份和恢复工具,确保在发生故障时能够快速恢复数据。另外 Lightning & Dumpling 用于快速导入和导出数据,适合数据逻辑备份/恢复场景。

(5) 生态集成 Spark 集成 : TiDB 与 Spark 集群集成,允许通过 Spark SQL 直连 TiKV 执行复杂的分布式计算任务。ELK(日志分析)通过 Filebeat 收集日志,经过 Kafka、Logstash 传递到 Elasticsearch,最终在 Kibana 上进行可视化展示。

(6) K8s 支持 : TiDB on K8s 是通过 TiDB Operator 来部署和管理 TiDB 集群,支持 K8s 上的自动化运维操作。

(7) 工具集 TiUP : TiDB 的集群管理工具,负责集群的安装、升级、扩展等操作。TiBigData、TiFlink、TiRedis 等工具帮助用户在大数据和分布式场景下更好地集成和使用 TiDB。

(8) 安全与审计 : SQL 变更和 SQL 审计功能,需要支撑业务日常的在线数据查询以及 SQL 变更操作,并且进行检测和审计,确保系统中所有操作都有迹可循,保障数据库稳定和数据安全。

总结来说,TiDB 的生态架构具备了从数据库迁移、存储、查询、备份恢复、实时同步、监控运维到大数据计算和日志分析的全方位功能。这种架构充分展示了使用好 TiDB 需要具备丰富的工具和能力。

那么如何更好地管控 TiDB?我们先从 TiDB on 云上 or 云下来看。

TiDB on Kubernetes OR 物理机

数据库运行在 K8s 和物理机上的区别主要体现在灵活性、资源管理、运维复杂度和性能等方面。

  • 灵活性与弹性 : K8s 提供自动扩展、负载均衡和自愈能力,使数据库能更灵活地响应业务流量波动。相比之下,物理机部署固定资源,弹性扩展较难,需手动调整。

  • 资源管理 : K8s 提供资源隔离和调度优化,允许数据库与其他应用共享资源。物理机则专注于资源固定分配,难以实现动态调度。

  • 运维复杂度 : K8s 自动化运维工具(如 TiDB Operator)简化了数据库的部署、升级和故障恢复,而物理机通常需要手动维护和更复杂的操作。

  • 性能 : 物理机通常能提供更高的性能,尤其是对高 I/O 需求的数据库,而 K8s 可能因虚拟化开销导致性能下降。

综合来看,K8s 适合动态、多租户场景,物理机则更适合对性能要求极高的关键任务。TiDB Operator 是 K8s 上的 TiDB 集群自动运维系统,提供包括部署、升级、扩缩容、备份恢复、配置变更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以无缝运行在公有云或自托管的 K8s 集群上。

TiUP 是 TiDB 4.0 版本引入的集群运维工具,通过 TiUP cluster 组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、弹性扩缩容、升级 TiDB 集群,以及管理 TiDB 集群参数。以下是我整理的 2 种部署管控工具的对比:

TiDB Operator VS TiUP

TiDB Operator VS TiUP

总的来说, TiDB Operator 更适合 K8s/云原生 场景,具有强大的自 动化和扩展能力。而 TiUP 则适合对 K8s 不熟悉或没有云原生需求的团队,适用于相对简单的部署和运维场景。

知乎的选择

知乎是业内较早研究应用 K8s 的互联网公司,在容器化方面有较深的积累,基于 TiDB 集群管控的便利性,知乎选择了 TiDB Operator 这个云上的管控工具来较为便利的管控 TiDB 集群 。

TiDB on K8s

TiDB on K8s

知乎如何搞定数据库管控

为了为公司业务研发团队提供分布式数据库(如 TiDB)的选型,数据库架构团队需要从多个方面进行深入的准备和规划。以下是每个方面的详细说明:

1. 数据库日常运维

  • 业务资源申请/删除需求

需求评估与资源分配:团队需要与研发团队紧密协作,评估业务系统对数据库资源的需求,包括存储、计算能力和网络带宽等。应设计标准化的资源申请流程,并确保资源分配合理且具有扩展性。自动化流程:使用工具 TiDB Operator 来支持资源的自动申请、分配和删除,确保资源生命周期的高效管理。

  • 资源规划&部署

数据库基础服务独立 K8s 集群,预留 5% 以内的计算和存储资源。业务申请经过业务 owner+DBA 审批通过后,调用 TiDB Operator+TiDB-cluster.yaml 实现快速部署。

  • 扩缩容

根据业务增长、降本需求,修改 TiDB-cluster.yaml 的 replica 数量并且应用实现集群的自动扩缩容。扩容一定要提前规划好资源池,以便快速响应业务的高峰期需求,避免因为资源不足影响服务可用性。定期监控数据库容量和性能指标,预警扩容需求。

2. 数据迁入/迁出

根据不同的业务类型和需求来定制化的执行 MySQL 迁移 TiDB 的方式,比如大部分都是通过 DM 工具(支持全量和增量同步,保证数据一致性)来迁移切换,对于一些凌晨从 Hive 写回的结果表(白天数据不变化),业务双写或者 Dumpling 导出 +Lightning 导入即可。当然知乎的业务有需要把 TiDB 的(T-1)数据当天凌晨导入到 Hive 的需求,这时 TiBigDATA 这个工具就派上用场了,知乎 70% 左右的在线表每天凌晨的全量 ETL 都是采用这个工具。还有一些业务需求是需要将 TiDB 的实时数据变更,我们使用 TiCDC,支持将 TiDB 中的数据流式同步到 Kafka 消息供业务消费。

3. 数据库稳定性建设

  • 数据库备份/恢复

根据业务的核心程度不同,定制实例级别的备份策略,比如 S 级别业务每天凌晨都用 BR(Backup & Restore) 工具定期备份到 S3,并且每天抽样 S3 备份文件验证数据恢复,保障数据库的稳定性。

  • 多云多活

对于核心业务,建议数据库具备多数据中心的多活能力,知乎基于 TiDB 的 Placement-rule 策略实现了跨云跨 K8s 的副本投放,并且通过 label+role 来控制 region leader 分布,并且基于这一套架构实现了在线机房的迁移,提高数据库的稳定性。

  • 数据库巡检

数据库巡检是数据库稳定性建设必不可少的模块,包括且不限于:库表巡检、SQL 巡检、资源巡检、数据库核心指标巡检等等, 自动化巡检能力通过定期进行数据库健康检查,未雨绸膜,提前发现数据库稳定性风险。

4. 数据库可观测能力

  • 业务数据库监控

业务抖动大部分跟数据库性能抖动相关,需要有监控系统如 TiDB 的 Prometheus 和 Grafana,实时查看数据库的性能指标,包括 CPU 使用率、内存消耗、磁盘 I/O、查询延迟等,来及时定位问题。业务延迟升高大部分跟慢查询相关,可以通过 TiDB 的 Slow Query 日志和 SQL 审计功能捕捉慢查询,分析业务查询的执行效率,优化数据库性能; 另 外 DBA 还利用 ELK(Elasticsearch + Logstash + Kibana) 系统,结合日志采集工具 Filebeat,对数据库日志进行集中管理和分析。 在业务抖动问题定位时,日志往往是定位问题的关键。

  • 报警

报警如何做到故障时能及时报出警而且又不至于报警轰炸?这时需要定制化的报警策略,根据数据库的性能指标设定报警阈值(如磁盘使用率、节点响应时间等),一旦超出阈值通过电话或企业微信及时通知。并且制定报警的报表,每周周会进行分析查看,并且制定合适的报警策略或者降低非必要报警。

5. 数据库降本增效

  • FinOps 成本管控

知乎通过 FinOps 成本管控平台来实现业务和资源方的成本使用。

首先要考虑的是数据库的成本是否需要完全分摊给业务方、应该如何分摊。目前 通过给每种资源定价(按套餐、按 xx 元 GB/天),制定合理的定价策略来管控业务数据库资源使用,建立数据库资源的成本监控机制,追踪每个业务模块对数据库资源的使用情况,帮助团队实现数据库成本的透明化管理。

资源方需要严格管控服务器利用率,比如对于 cpu+mem+disk 平均都 <20% 的服务器定期分析数据库资源利用率,避免不必要的资源过度配置;通过 K8s 和 TiDB Operator 的弹性扩缩容功能,动态调整数据库资源,避免资源闲置和浪费。

数据库架构团队在为公司业务研发团队提供 TiDB 分布式数据库选型时,需要全方位考虑数据库的基本运维(包括资源管理、自动化部署和扩缩容)、数据迁移、稳定性(如备份与巡检)、可观测性(监控和日志分析)以及成本管控(通过 FinOps 实现降本增效),这些管控工具其实都需要一个平台来承接。

知乎数据库平台化建设

知乎通过自研的天穹平台来承接,面向业务研发团队和面向 DBA 团队的需求和侧重点有所不同。以下是天穹平台对这 2 个纬度的支撑情况:

1. 面向业务研发团队

业务研发团队主要关注数据库平台的易用性、灵活性和自助服务能力,确保能够快速响应业务需求,提升开发效率。以下是平台化的几个关键点:

自助服务能力
  • 自助资源申请/下线: 研发人员可以通过天穹平台自助申请数据库实例、存储资源、 读写分离等服务,而不需要依赖运维团队或 DBA 手动分配。这种自助服务应具有标准化和自动化流程,确保快速响应需求。

  • 数据库扩容和缩容: 当业务流量波动或业务扩展时,研发团队应能够在平台发起扩缩容变更,平台自动完成资源分配,且能够在不影响服务的情况下进行扩展。

  • 工单中心: 天穹平台为研发人员提供数据库变更工单中心模块,能够根据不同的业务变更需求自助审批和执行。

天穹平台业务申请 TiDB 集群

天穹平台业务申请 TiDB 集群

天穹平台 TiDB 集群详情

天穹平台 TiDB 集群详情

天穹平台工单中心

天穹平台工单中心
数据库操作简化
  • SQL 变更支持: 提供 SQL 审核工具,研发人员可以通过平台提交 SQL 变更,自动完成语法检查、SQL 审批和执行全流程,并结合业务的数据库规范自动进行审核,避免低效或有风险的 SQL 语句。

  • 查询历史与可视化工具: 研发人员可以通过平台查看自己提交的 SQL 查询历史、执行计划等信息,帮助优化查询语句,同时应提供可视化工具(如数据表结构、索引等),简化数据库操作 。

  • 慢查询分析与优化: 平台应自动记录慢查询,并为研发团队提供优化建议或提示,帮助他们提高 SQL 语句的执行效率,提升业务系统性能。

天穹平台慢 SQL 处置中心1

天穹平台慢 SQL 处置中心2

天穹平台慢 SQL 处置中心
监控与日志查询
  • 自助监控面板: 为研发团队提供可视化的监控面板,能够实时查看与他们业务相关的数据库性能指标,如查询延迟、CPU 和内存使用情况等。

  • 日志查询: 支持研发人员查询数据库操作日志,分析执行过的 SQL 查询、报错信息等,帮助诊断问题,提高调试和排查的效率。

天穹平台监控中心

天穹平台监控中心

天穹平台日志中心

天穹平台日志中心

2. 面向 DBA 团队

DBA 团队主要关注数据库平台的稳定性、可观测性和自动化运维能力。平台化应提供便捷的工具来简化日常运维工作,提升数据库的管理和运维效率。以下是面向 DBA 团队的几个关键点:

统一管理与自动化运维
  • 统一集群管理: 平台能够集中管理多个数据库集群,包括 TiDB、MySQL、Redis 等,提供统一的操作界面,便于 DBA 快速查看集群状态、健康状况和节点信息。

  • 自动化任务调度: 对于日常的运维任务(如备份、巡检、扩缩容等),平台支持自动化调度,降低 DBA 的重复性工作负担。例如,使用 TiDB Operator 在 K8s 环境中自动执行备份、升级、扩缩容等操作。

  • 故障自动恢复: 平台应具备自动化故障处理机制,当节点失效或集群不稳定时,能够自动触发恢复操作,并及时通知 DBA,减少人为干预。

天穹平台 TiDB 集群列表

天穹平台 TiDB 集群列表
可观测性与预警
  • 监控与预警系统: 平台为 DBA 提供深度的数据库监控能力,能够跟踪 CPU 使用、内存消耗、磁盘 I/O、查询延迟、慢查询等指标。结合 Prometheus 和 Grafana,实时监控数据库健康状况,设置合理的告警阈值,提前发现潜在问题。

  • 日志管理与分析 : 集中管理数据库日志,包括错误日志、慢查询日志、SQL 审计日志等。通过整合 ELK(Elasticsearch、Logstash、Kibana)等工具,支持 DBA 对日志进行深度分析,帮助排查问题。

  • 数据库巡检: 平台自动生成巡检报告,定期评估数据库集群的运行情况,生成包含性能、稳定性、安全性的报告,供 DBA 团队分析,并对潜在问题进行处理,保障数据库稳定性。

天穹平台统一监控中心

天穹平台统一监控中心
SQL 审计与安全管控
  • SQL 审计功能: 平台支持 SQL 审计功能,能够记录所有执行的 SQL 语句,帮助 DBA 追踪和分析 SQL 操作,防止潜在的安全风险和数据泄露。

  • 访问控制与权限管理: DBA 团队需要通过平台集中管理数据库的用户权限,确保权限分配的最小化原则,防止数据被不当访问或篡改。

数据库备份与恢复
  • 自动化备份: DBA 团队可以通过平台设置定时备份策略,自动备份数据库到 S3。

  • 数据恢复工具: 平台为 DBA 提供一键恢复功能,支持在灾难发生时快速恢复数据,保障数据安全。同时,应具备详细的恢复日志,帮助 DBA 分析和优化恢复流程。

天穹平台 SQL 审计中心

天穹平台 SQL 审计中心
FinOps 成本管控

资源优化与成本监控:平台帮助 DBA 监控各数据库实例的资源使用情况,评估资源利用率,避免过度配置,提升成本效益。

FinOPS 成本监控

FinOPS 成本监控

总之,面向业务研发团队的数据库平台化重点在于提升自助服务能力,简化数据库操作,提高查询与开发效率,并为研发提供灵活的环境支持。

面向 DBA 团队的数据库平台化则侧重于自动化运维、监控预警、数据备份与恢复、SQL 审计和成本管控,确保数据库的稳定运行和高效管理。通过分别满足研发和 DBA 团队的不同需求,数据库平台化可以为整个企业提供一个高效、稳定、可扩展的分布式数据库解决方案。

总结

知乎的数据库团队以“致力于提供稳定、高效和易用的数据库服务”为目标,为公司业务团队提供更好的 TiDB 存储服务来应对高并发、复杂查询和大数据存储的需求。本文详细介绍了 TiDB 的生态架构,包括核心组件、数据迁移与同步、运维与监控平台、备份与恢复、生态集成、K8s 支持、工具集和安全与审计等方面。同时探讨了知乎如何在云上和云下环境中管控 TiDB 集群,以及如何通过自研的天穹平台实现数据库平台化建设,提升业务研发团队数据库变更和 DBA 团队的资源管控效率。

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

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

相关文章

Git版本控制工具--基础命令和分支管理

1.Git仓库的基本概念和流程 版本库的概念&#xff1a;版本库又名仓库&#xff0c;英文名repository,你可以简单的理解一个目录&#xff0c;这个目录里面的所有文件都可以被Git管理起来&#xff0c;每个文件的修改&#xff0c;删除&#xff0c;Git都能跟踪&#xff0c;以便任何…

EMQX构建简易的云服务

基本思路&#xff1a; 使用EMQX作为Mqtt brokermqtt-receive-server服务&#xff0c;用于接收设备上报的数据mqtt-sender-service服务&#xff0c;用于下发数据给设备KafKa实现数据解耦&#xff0c;mqtt-receive-server服务接收的数据简单处理下直接扔到Kafka中云服务各业务系…

基于MindSpore NLP的PEFT微调

创建notebook 登录控制台 创建notebook 如果出现提示按如下操作 回到列表页面创建notebook参数如下&#xff1a; 配置mindnlp环境 打开GitHub - mindspore-lab/mindnlp: Easy-to-use and high-performance NLP and LLM framework based on MindSpore, compatible with model…

半连接转内连接 | OceanBase SQL 查询改写

查询优化器是关系型数据库系统的核心模块&#xff0c;是数据库内核开发的重点和难点&#xff0c;也是衡量整个数据库系统成熟度的“试金石”。为了帮助大家更好地理解 OceanBase 查询优化器&#xff0c;我们撰写了查询改写系列文章&#xff0c;带大家更好地掌握查询改写的精髓&…

imx6ull qt多页面控制系统(正点原子imx系列驱动开发)

开题答辩完了也考完了四六级&#xff0c;赶紧来更新一下一个月前留下的坑吧 QAQ首先&#xff0c;因为毕业设计需要用到这些知识所以就从网络上找了一个智能车机系统&#xff0c;借鉴了一下大佬的项目思路&#xff0c;缝缝补补一个月终于完成了这一内容。 在这里先感谢从两位大佬…

Intel-ECI之Codesys PLC + Ethercat 远端IO + Codesys IDE编程

目录 一、 准备工作 二、安装Codesys 软件 PLC 三、 使用Codesys IDE 编程测试 CODESYS* 是领先的独立于制造商的 IEC 61131-3 自动化软件&#xff0c;适用于工程控制系统。它用于 Intel Edge Controls for Industrial&#xff08;Intel ECI 或 ECI&#xff09;&#xff0c;…

vscode的keil assistant 中搜索不到全局变量

搜不到 但是在包含的文件中输入 ../../../,就是全局搜索的结果 我的文件结构是&#xff1a;\Desktop\LVGL文件系统移植&#xff08;lvgl8&#xff0e;&#xff13;&#xff09;\Projects\MDK-ARM 盲猜是keil assistant 当前文件夹打开的时候是进入到了MDK-ARM文件夹层次&…

Unity A*算法实现+演示

注意&#xff1a; 本文是对基于下方文章链接的理论&#xff0c;并最终代码实现&#xff0c;感谢作者大大的描述&#xff0c;非常详细&#xff0c;流程稍微做了些改动&#xff0c;文末有工程网盘链接&#xff0c;感兴趣的可以下载。 A*算法详解(个人认为最详细,最通俗易懂的一…

格式工厂,各类文件格式转换

今天给大家推荐一个老牌的软件格式工厂。这个软件早就能支持转换视频、音频、图片、文档等市面上主流格式的软件了&#xff0c;现在也很能打。 格式工厂 各类文件格式转换 软件无需安装&#xff0c;打开这个图标就能直接使用。 屏幕录像功能还是非常强大的&#xff0c;可以全屏…

Java web的发展历史

目录 前言&#xff1a; 一.Model I和Model II 1.Model I开发模式 ​编辑 2.Model II开发模式 二. MVC模式 前言&#xff1a; 该篇文章主要介绍了Java web的发展历史&#xff0c;以及MVC相关内容 一.Model I和Model II 1.Model I开发模式 Model1的开发模式是&#xff…

Pyqt6在lineEdit中输入文件名称并创建或删除JSON文件

1、创建JSON文件 代码 import osdef addModulekeyWordFile(self):if "" ! self.lineEdit_module.text():moduleFile self.lineEdit_module.text() .jsonelse:self.toolLogPrinting(请输入模块名称)returnfilePath modulekeyWordFileDir moduleFileif os.path.e…

练习题 最小栈

最小栈 最小栈 class MinStack {private Stack<Integer> stack;private Stack<Integer> minstack;public MinStack() {stacknew Stack<>();minstacknew Stack<>();}public void push(int val) {stack.push(val);if(minstack.empty()){minstack.push(…

概率论得学习和整理32: 用EXCEL描述正态分布,用δ求累计概率,以及已知概率求X的区间

目录 1 正态分布相关 2 正态分布的函数和曲线 2.1 正态分布的函数值&#xff0c;用norm.dist() 函数求 2.2 正态分布的pdf 和 cdf 2.3 正态分布的图形随着u 和 δ^2的变化 3 正态分布最重要的3δ原则 3.0 注意&#xff0c;这里说的概率一定是累计概率CDF&#xff0c;而…

食家巷大烤馍:岁月沉淀下的麦香传奇

在繁华都市的街角巷尾&#xff0c;隐藏着许多不为人知的美食宝藏&#xff0c;食家巷大烤馍便是其中之一。它宛如一位低调的美食大师&#xff0c;默默散发着独特的魅力&#xff0c;用最质朴的味道&#xff0c;征服着每一个过往食客的味蕾。 初见食家巷大烤馍&#xff0c;你会被…

wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势

开发CuteMySQL/CuteSqlite开源客户端的时候&#xff0c;需要使用Scintilla编辑器&#xff0c;来高亮显示SQL语句&#xff0c;作为C/C领域最成熟稳定又小巧的开源编辑器&#xff0c;Scintilla提供了强大的功能&#xff0c;wxWidgets对Scintilla进行包装后的是控件类&#xff1a;…

【基础还得练】数值分析中的样条插值

什么是三次样条&#xff08;Cubic Spline&#xff09;&#xff1f; 三次样条&#xff08;Cubic Spline&#xff09;是一种常用于数据插值和曲线拟合的数学方法&#xff0c;它利用多个三次多项式函数来平滑连接数据点&#xff0c;使得拟合曲线不仅通过所有数据点&#xff0c;同时…

AMS1117芯片驱动电路·降压芯片的驱动电路详解

目录 AMS1117常见封装 AMS1117不同系列 AMS1117驱动电路 参考数据手册 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 相同LDO芯片驱动专栏文章 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-CSDN博客 ME6211C系列降压芯片驱动电路降压芯片…

[项目代码] YOLOv8 遥感航拍飞机和船舶识别 [目标检测]

项目代码下载链接 &#xff1c;项目代码&#xff1e;YOLO 遥感航拍飞机和船舶识别&#xff1c;目标检测&#xff1e;https://download.csdn.net/download/qq_53332949/90163939YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为…

《Qt Creator 4.11.1 教程》

《Qt Creator 4.11.1 教程》 一、Qt Creator 4.11.1 概述&#xff08;一&#xff09;简介&#xff08;二&#xff09;界面构成 二、常用设置指南&#xff08;一&#xff09;环境设置&#xff08;二&#xff09;文本编辑器设置&#xff08;三&#xff09;构建和运行设置 三、构建…

探索未知,乐享惊喜 —— 盲盒APP开发,开启您的个性化惊喜之旅!

在这个瞬息万变的数字时代&#xff0c;我们总在寻找那些能触动心灵、带来无限可能的小确幸。为了满足您对未知的好奇与对惊喜的渴望&#xff0c;我们匠心打造了一款全新的盲盒APP&#xff0c;旨在为您的生活增添一抹不同寻常的色彩&#xff0c;让每一次打开都是一次全新的探索与…