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

知乎 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 团队的资源管控效率。

相关文章:

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

以下文章来源于知乎技术专栏 &#xff0c;作者代晓磊 导读 在现代企业中&#xff0c;数据库的运维管理至关重要&#xff0c;特别是面对分布式数据库的复杂性和大规模集群的挑战。作为一款兼容 MySQL 协议的分布式关系型数据库&#xff0c;TiDB 在高可用、高扩展性和强一致性方…...

Intel(R) Iris(R) Xe Graphics安装Anaconda、Pytorch(CPU版本)

一、Intel(R) Iris(R) Xe Graphics安装Anaconda 下载网址&#xff1a;https://repo.anaconda.com/archive/ 双击Anaconda3-2024.10-1-Windows-x86_64&#xff0c;一直下一步&#xff0c;选择安装的路径位置&#xff0c;一直下一步就安装完成了。打开Anaconda PowerShell Promp…...

RK3588 , mpp硬编码rgb, 保存MP4视频文件.

RK3588 , mpp硬编码yuv, 保存MP4视频文件. ⚡️ 传送 ➡️ RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBUbuntu x64 架构, 交叉编译aarch64 FFmpeg mppCode Init MppMPP_RET init_mpp...

揭开 Choerodon UI 拖拽功能的神秘面纱

01 引言 系统的交互方式主要由点击、选择等组成。为了提升 HZERO 系统的用户体验、减少部分操作步骤&#xff0c;组件库集成了卓越的拖拽功能&#xff0c;让用户可以更高效流畅的操作系统。 例如&#xff1a;表格支持多行拖拽排序、跨表数据调整、个性化调整列顺序&#xff1…...

常用网络协议简述

网络协议是计算机网络中规定数据交换格式和交换规则的一套标准。以下是一些常用的网络协议及其简要解释&#xff1a; HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09; 用于从网络传输超文本数据到本地浏览器的传输协议。基于TCP协议&…...

本地电脑使用命令行上传文件至远程服务器

将本地文件上传到远程服务器&#xff0c;在本地电脑中cmd使用该命令&#xff1a; scp C:/Users/"你的用户名"/Desktop/environment.yml ws:~/environment.yml 其中&#xff0c;C:/Users/“你的用户名”/Desktop/environment.yml是本地文件的路径&#xff0c; ~/en…...

笔记day2

文章目录 1 NavigationDuplivated警告错误2 Home模块组件拆分3 三级联动组件完成4 完成其余静态组件5 POSTMAN测试接口6 axios二次封装6.1 为什么需要进行二次封装axios&#xff1f;6.2 在项目中经常API文件夹【axios】6.3 axios基础不好&#xff0c;可以参考git|NPM关于axios文…...

排序算法(3)——归并排序、计数排序

目录 1. 归并排序 1.1 递归实现 1.2 非递归实现 1.3 归并排序特性总结 2. 计数排序 代码实现 3. 总结 1. 归并排序 基本思想&#xff1a; 归并排序&#xff08;merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff0…...

【5】C#期末复习第5套

1.int a[3][2]{2,4,6,8,10.12};则*&#xff08;a[1]1&#xff09;的值是8 指向&#xff08;a[1]的第二个元素&#xff09; 再* 2.合并字符串库函数strcat 3.比较字符串库函数strcmp 4.执行结果是x3&#xff0c;y3 int x3,y; int *px&x; y*px; (优先级高于*) 5.*p[5]没…...

jquery虚拟键盘插件jqkeyboard

jqKeyboard是一款jquery虚拟键盘插件。该虚拟键盘插件依赖于jquery ui&#xff0c;通过该插件&#xff0c;可以在页面中生成一个扁平风格的虚拟键盘面板。 在线预览 下载 安装 可以通过npm来安装jqKeyboard虚拟键盘插件。 npm install jq keyboard --save 使用方法 在页面…...

IMX6ULL开发板把屏幕刷黑(黑屏)的程序

承接博文 IMX6ULL开发板基础实验:Framebuffer驱动程序的简单应用实例代码详细分析 很容易写出把屏幕刷黑的程序… Ubuntu中的目录/home/book/mycode下新建目录C0003_draw_lcd_black&#xff0c;然后把把博文中的源码/home/book/mycode/C0002_show_pixel复制到目录C0003_draw_l…...

OpenCV基本图像处理操作(三)——图像轮廓

轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL &#xff1a;只检索最外面的轮廓&#xff1b;RETR_LIST&#xff1a;检索所有的轮廓&#xff0c;并将其保存到一条链表当中&#xff1b;RETR_CCOMP&#xff1a;检索所有的轮廓&#xff0c;并将他们组…...

C语言学习day24:DLL给程序打上窗口破解补丁

简言 在上一章节我们知道了DLL&#xff0c;编写DLL以及最重要的导出DLL&#xff0c;这一章节我们学习如何给应用打上窗口破解补丁&#xff08;DLL&#xff09;。 流程 工具&#xff1a;studyPE 操作&#xff1a; 把要补丁的程序拖入PE中点击导入菜单&#xff0c;导入dll函…...

大模型呼出机器人的应用场景

大模型呼出机器人的应用场景 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 大模型呼出机器人的应用场景十分广泛&#xff0c;涵盖了多个行业和服务领域。以下是对其应用场景的详细归纳&#xff1a; 一、客户…...

el-date-picker筛选时间日期选择范围

el-date-picker 选择时间日期范围-> 昨天 近7天 30天<template><div class"main"><div class"header"><el-form :model"form" label-width"auto"><el-button plain click"setTimeToYesterday&q…...

【Apache Paimon】-- 10 -- Paimon 0.9.0 集成 Hive 3.1.3

参考官方 0.9.0 版本文档:https://paimon.apache.org/docs/0.9/engines/hive/ 1、下载依赖包到 hive lib 下 $ cd $HIVE_HOME/$ mkdir auxlib$ cd auxlib$ wget https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-hive-connector-3.1/0.9.0/paimon-hive-connec…...

vue2如何写一个轮播图

需求描述 写一个轮播图&#xff0c;可以实现如下效果&#xff1a; 页面上展示三个轮播图元素默认状态下&#xff0c;进行自动轮播&#xff0c;循环播放一旦鼠标移入轮播图范围内&#xff0c;并停留在元素a上&#xff0c;则轮播图停止自动播放&#xff0c;同时将元素a放大 核…...

基础库httpx的使用

urllib 库和 requests 库的使用&#xff0c;已经可以爬取绝大多数网站的数据&#xff0c;但对于某些网站依然无能为力。什么情况?这些网站强制使用HTTP/2.0协议访问&#xff0c;这时 urllib 和requests 是无法爬取数据的&#xff0c;因为它们只支持 HTTP/1.1&#xff0c;不支持…...

MYSQL 利用concat函数 生成更新或者插入SQL

有时候需要批量运维一批数据&#xff0c;一条一条写SQL比较麻烦&#xff0c;可以使用下面的方法批量生成select sales_order_number,a.sog_line_id,actual_price,sales_goods_unit_price,b.id,concat(update your_table set actual_price, sales_goods_unit_price, where id,b…...

Backend For Frontend的学习分享

晚上公司开了一个技术分享会&#xff0c;主要内容就是公司的项目架构&#xff0c;会中讲解了项目整体架构是BFF架构&#xff0c;就是在微服务之上多加了一层。 除此之外&#xff0c;还讲解了DDD设计思想&#xff0c;主要用于各个业务中台&#xff0c;如订单中台、用户中台等。…...

KS曲线python实现

目录 实战 实战 # 导入第三方模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt# 自定义绘制ks曲线的函数 def plot_ks(y_test, y_score, positive_flag):# 对y_test重新设置索引y_test.index np.arange(len(y_test))# 构建目标数据集target_dat…...

【GO环境安装】mac系统+GoLand使用

文章目录 下载安装包环境配置GoLandGo Modules 下载安装包 地址&#xff1a;GO下载地址 下载好后直接进行安装&#xff1a; 进入terminal&#xff0c;查看是否安装成功&#xff1a; 环境配置 在文稿下面创建工作目录&#xff1a; 在文稿下新建Go_Works文件夹&#xff0c;在…...

2025年入职/转行网络安全,该如何规划?网络安全职业规划

网络安全是一个日益增长的行业&#xff0c;对于打算进入或转行进入该领域的人来说&#xff0c;制定一个清晰且系统的职业规划非常重要。2025年&#xff0c;网络安全领域将继续发展并面临新的挑战&#xff0c;包括不断变化的技术、法规要求以及日益复杂的威胁环境。以下是一个关…...

linux中 umask 命令

Umask Umask&#xff08;User File Creation Mode Mask&#xff09;是Linux系统中的一项命令&#xff0c;用于设定新创建文件和目录的默认权限。 一、umask的作用 Umask通过掩码操作&#xff0c;限制新文件和目录的访问权限。在Linux中&#xff0c;所有的文件和目录都被分配…...

OpenCV函数及其应用

1. 梯度处理的Sobel算子函数 功能 Sobel算子是一种用于边缘检测的离散微分算子&#xff0c;它结合了高斯平滑和微分求导&#xff0c;用于计算图像亮度的空间梯度。 参数 src&#xff1a;输入图像。 dst&#xff1a;输出图像。 ddepth&#xff1a;输出图像的深度。 dx&#xff…...

使用ENSP实现NAT(2)

一、NAT的类型 二、静态NAT 1.项目拓扑 2.项目实现 路由器AR1配置&#xff1a; 进入系统视图 sys将路由器命名为AR1 sysname AR1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为192.168.10.254/24 ip address 192.168.10.254 24进…...

欢迎 PaliGemma 2 – 来自 Google 的新视觉语言模型

我们很高兴迎来 Google 全新的视觉语言模型 PaliGemma 2&#xff0c;这是 PaliGemma 的一个新版本。与其前代产品一样&#xff0c;PaliGemma 2 使用强大的SigLIP进行视觉处理&#xff0c;但在文本解码部分升级到了最新的 Gemma 2。 https://hf.co/collections/google/siglip-65…...

C++ List(双向链表)

是一个线性链表结构&#xff0c;它的数据由若干个节点构成&#xff0c;每一个节点都包括一个 信息块&#xff08;即实际存储的数据&#xff09;、一个前驱指针和一个后驱指针。它无需分配指定 的内存大小且可以任意伸缩&#xff0c;这是因为它存储在非连续的内存空间中&#…...

pip使用方法

1. 安装包&#xff1a; pip install &#xff1a;安装指定的 Python 包。 pip install &#xff1a;安装特定版本的 Python 包。 pip install -r requirements.txt&#xff1a;从文件中读取依赖列表并安装所有列出的包。 pip install --pre &#xff1a;允许安装预发布或开发版…...

websocket再项目中的使用

WebSocket在项目中的使用‌主要包括以下几个方面&#xff1a; ‌WebSocket的基本概念和原理‌&#xff1a; ‌定义‌&#xff1a;WebSocket是一种基于TCP的协议&#xff0c;实现了浏览器与服务器之间的全双工通信。它通过HTTP/1.1协议的101状态码进行握手&#xff0c;建立连接‌…...

C语言:指针2(指针变量指向数组)

通过指针引用数组元素 引用一个数组元素&#xff0c;可以用&#xff1a; ① 下标法&#xff1a;如 a[i] 形式。 ② 指针法&#xff1a;如 *(ai) 或者 *(pi) 。其中a是数组名&#xff0c;p是指向数组元素的指针变量&#xff0c;其初值&#xff1a;p a; 案例 需求&#xff1a;…...

心觉:一个人的关注点,决定了他的成长速度

Hi&#xff0c;我是心觉&#xff0c;带你用潜意识化解各种焦虑、内耗&#xff0c;建立无敌自信&#xff1b;教你财富精准显化的实操方法&#xff1b;关注我,伴你一路成长&#xff01; 每日一省写作265/1000天 在生活和工作中&#xff0c;我们经常会进入一个矛盾&#xff1a;总是…...

【Websokect】服务器https协议下ws连接失败问题及解决办法

在服务器使用HTTPS协议下连接WebSocket时&#xff0c;通常会出现一些常见的问题导致连接失败。以下是一些可能的原因和解决办法&#xff1a; SSL证书配置问题&#xff1a; 确保您的服务器上已正确配置SSL证书&#xff0c;并且证书有效。如果证书配置不正确或者过期&#xff0c;…...

Python 助力 DBA:高效批量管理数据库服务器的多线程解决方案-多库查询汇总工具实现

批量数据库服务器连接测试与数据汇总&#xff1a;Python实现方案 作为数据库服务器运维人员&#xff0c;我们经常需要面对大量服务器的连接测试和数据汇总工作。本文将介绍一个使用Python实现的高效解决方案&#xff0c;可以帮助我们快速完成这些任务。 需求概述 从配置文件…...

如何在繁忙的生活中找到自己的节奏?

目录 一、理解生活节奏的重要性 二、分析当前生活节奏 1. 时间分配 2. 心理状态 3. 身体状况 4. 生活习惯 1. 快慢适中 2. 张弛结合 3. 与目标相符 三、掌握调整生活节奏的策略 1. 设定优先级 2. 合理规划时间 3. 学会拒绝与取舍 4. 保持健康的生活方式 5. 留出…...

uniapp blob格式转换为video .mp4文件使用ffmpeg工具

前言 介绍一下这三种对象使用场景 您前端一旦涉及到文件或图片上传Q到服务器&#xff0c;就势必离不了 Blob/File /base64 三种主流的类型它们之间 互转 也成了常态 Blob - FileBlob -Base64Base64 - BlobFile-Base64Base64 _ File uniapp 上传文件 现在已获取到了blob格式的…...

SQLite建表语句示例(含所有数据类型、索引、自增主键、唯一索引)

下面是一个示例&#xff0c;展示如何创建一个用户信息表。 包含 SQLite 支持的所有数据类型&#xff0c;同时设置主键为自增、一个字段为唯一索引&#xff0c;以及另一个字段为普通索引&#xff1a; -- 创建用户信息表 CREATE TABLE user_info (id INTEGER PRIMARY KEY AUTOI…...

vue常用的一些指令整理

在 Vue.js 中&#xff0c;指令&#xff08;Directives&#xff09;是特殊的 HTML 属性&#xff0c;用于在模板中绑定行为。Vue 提供了许多内置指令&#xff0c;你也可以定义自定义指令。以下是指令的分类和常用用法&#xff1a; 1. 内置指令 v-bind 用于动态绑定属性或特性。…...

SSM 搭台,Vue 唱戏:新锐台球厅管理系统的设计与实现盛宴

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…...

#C01L10P01. C01.L10.双重循环、多重循环程序设计.双重循环

双重循环格式&#xff1a; for(循环条件1){语句1&#xff1b;for(循环条件2){语句2&#xff1b;} }...

实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 3

大家好&#xff0c;我是Q&#xff0c;邮箱&#xff1a;1042484520qq.com。 今天我们在上一讲的基础上再扩展下 Cabin Wi-Fi 的功能需求&#xff0c;讲讲如何判断 5G TCU 系统中的路由关系。 参考&#xff1a; 实现某海外大型车企&#xff08;T&#xff09;Cabin Wi-Fi 需求的概…...

Python+OpenCV系列:AI看图识人、识车、识万物

在人工智能风靡全球的今天&#xff0c;用 Python 和 OpenCV 结合机器学习实现物体识别&#xff0c;不仅是酷炫技能&#xff0c;更是掌握未来的敲门砖。本篇博文手把手教你如何通过摄像头或图片输入&#xff0c;识别人、动物、车辆及其他物品&#xff0c;让你的程序瞬间具备 AI …...

全排列..

本节通过对一个全排列的实例,帮助对深度优先算法的理解. 问题描述: 给定一个集合,实现集合中的元素重排列 思路解析: 按照全排列的常规思维,执行过程如下:先确定第一位,将已经确定的元素放入一个数组中,再用一个循环对剩余数组进行全排列.在对剩余数组进行全排列时,就是递归执…...

用户体验与SEO的结合:如何优化网站以提升谷歌排名?

在SEO领域&#xff0c;算法、关键词和技术手段固然重要&#xff0c;但归根结底&#xff0c;谷歌的核心理念是提供最优质的用户体验。无论算法如何变化&#xff0c;用户体验始终是影响谷歌排名的重要因素之一。一个友好、直观的网站不仅能留住用户&#xff0c;还能直接提升搜索引…...

[计算机网络]ARP协议的故事:小明找小红的奇妙旅程

1.ARP小故事 在一个繁忙的网络世界中&#xff0c;每个设备都有自己的身份标识——MAC地址&#xff0c;就像每个人的身份证号码一样。在这个故事里&#xff0c;我们的主角小明&#xff08;主机&#xff09;需要找到小红&#xff08;目标主机&#xff09;的MAC地址&#xff0c;才…...

http的MIME类型

在 HTTP 协议中&#xff0c;MIME 类型&#xff08;Multipurpose Internet Mail Extensions&#xff09;用于描述传输内容的类型和格式。MIME 类型通过 Content-Type 头字段来指定&#xff0c;告知客户端如何处理和显示接收到的数据。 常见的 MIME 类型 以下是一些常见的 MIME…...

【数字信号处理】数字信号处理试题及答案,离散序列,Z变换,傅里叶变换

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

信号槽【QT】

文章目录 对象树字符集信号槽QT坐标系信号与槽connect自定义槽自定义信号disconnect 对象树 #ifndef MYLABEL_H #define MYLABEL_H#include<QLabel> class MyLabel : public QLabel { public:// 构造函数使用带 QWidget* 版本的.// 确保对象能够加到对象树上MyLabel(QWi…...

【JAVA】JAVA接口公共返回体ResponseData封装

一、JAVA接口公共返回体ResponseData封装&#xff0c;使用泛型的经典 例子 public class ResponseData<T> implements Serializable { /** * */ private static final long serialVersionUID 7098362967623367826L; /** * 响应状态码 */ …...

如何评估并持续优化AI呼出机器人的使用效果

如何评估并持续优化AI呼出机器人的使用效果 作者&#xff1a;开源呼叫中心FreeIPCC 随着人工智能技术的发展&#xff0c;AI呼出机器人在企业中的应用越来越广泛。这些智能系统不仅提高了工作效率、降低了成本&#xff0c;还改善了客户体验。然而&#xff0c;要确保AI呼出机器…...