如何利用 ClickHouse 实现高级分析:MySQL 到 ClickHouse 实时数据同步指南
在数据驱动的时代,企业必须依靠先进的数据分析能力来提升竞争力。随着数据量的激增和业务需求的复杂化,传统的关系型数据库已经无法满足高效处理和实时分析的需求。ClickHouse 作为一款高性能的列式数据库,凭借其卓越的查询性能和可扩展性,成为处理大规模数据并执行复杂分析任务的理想选择。基于 ClickHouse 的实时数仓,也成为诸多企业在寻找强时效性、高数据准确性、低开发运维成本的数据分析与运营决策解决方案的优选之一。
本文将介绍如何实现 MySQL、Oracle 或 MongoDB 到 ClickHouse 的实时数据同步,并分享如何构建高效、可靠的数据管道,从而为企业级的数据处理和分析需求铺路。
需求背景:为什么选择将数据移动到 ClickHouse?
之所以选择 ClickHouse 作为数据目标来承载企业内部的数据处理与分析需求,本质上是因为其具有以下几点关键优势:
1. 高查询性能
ClickHouse 专为大数据集设计,具有极低的延迟。其列式存储模型可以快速访问特定数据块,显著提高查询速度,尤其是在处理需要聚合和复杂计算的分析性工作负载时。
2. 高效的数据压缩
ClickHouse 采用先进的数据压缩技术,显著减少数据的存储占用。这不仅有助于降低成本,还能提升查询性能,因为需要扫描的数据量减少,从而提高整体效率。
3. 实时数据分析
通过 ClickHouse,企业可以实现实时数据分析。它能够快速摄取数据并支持并发查询,意味着您可以在数据到达的同时获得即时洞察,帮助企业做出快速决策。
4. 可扩展性
ClickHouse 支持横向扩展,可以轻松将数据分布到多个节点上。随着数据量的不断增长,分析能力也能同步扩展,且不会出现性能瓶颈。
5. 完善的 SQL 支持
ClickHouse 提供全面的 SQL 支持,便于具有 SQL 基础的用户无缝操作数据库。这种兼容性大大减少了学习成本,使团队能够快速上手并充分发挥现有技能。
如何将数据同步至 ClickHouse?
将数据同步至 ClickHouse 涉及数据的提取、转换、加载和同步等多个环节。不同的业务需求和技术环境可能决定了选择不同的同步方案。一些时候,手动方案可以满足数据迁移的基本需求,而在数据量较大或实时性要求较高的场景下,采用自动化工具能够提升迁移效率并降低人工干预的风险。接下来,我们将分别介绍这两类常见的数据同步方案,帮助大家了解各自的具体流程与适用场景,为进一步选择提供参考。
手动方案:传统数据移动流程
1. 数据提取
将数据从源数据库(如 MySQL、Oracle 或 MongoDB)导出的过程。通常采用 SQL 查询或使用数据库客户端工具进行提取。
步骤:
- 使用数据库客户端工具(如 MySQL Workbench、SQL Developer 或 MongoDB Compass)手动执行查询,提取数据。
- 如果是 MySQL 或 Oracle,可以使用 SQL 语句通过 SELECT INTO OUTFILE 或 SPOOL 将数据导出为 CSV 或 TSV 格式。
示例:
- MySQL 数据导出:
SELECT * FROM source_table
INTO OUTFILE '/path/to/exported_data.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
- Oracle 数据导出:
SPOOL /path/to/exported_data.csv
SELECT * FROM source_table;
SPOOL OFF;
工具:
- MySQL Workbench、SQL Developer、MongoDB Compass 等客户端工具。
- SQL 或 Python 脚本(使用 pymysql、cx_Oracle 或 pymongo 等库进行数据提取)。
2. 数据转换
在数据提取之后,需要对数据进行清洗和转换,以适应目标数据库(ClickHouse)的要求。这个环节通常需要使用 ETL 工具或自定义脚本。
步骤:
- 数据清洗:去除无效或重复的数据。
- 数据转换:根据目标表的结构转换数据类型、格式等。
- 如果源数据格式是 CSV,可以使用 Python 脚本或 ETL 工具(如 Talend、Pentaho 或 Apache Nifi)进行转换。
示例:
- 使用 Python 转换 CSV 数据:
import pandas as pd# 读取 CSV 数据
df = pd.read_csv('/path/to/exported_data.csv')# 数据清洗,去除空值
df.dropna(inplace=True)# 转换列的数据类型(例如,将日期列转为日期格式)
df['date'] = pd.to_datetime(df['date'])# 将清洗后的数据保存为新的 CSV 文件
df.to_csv('/path/to/cleaned_data.csv', index=False)
工具:
- Python(pandas、csv 等库)进行数据清洗和转换。
- ETL 工具(如 Talend、Apache Nifi)进行数据处理和格式转换。
3. 数据加载
数据加载是将转换后的数据导入目标数据库(ClickHouse)的过程。此步骤通常使用数据库导入工具或者 SQL 脚本进行数据加载。
步骤:
- 使用数据库的导入工具(如 ClickHouse-client、clickhouse-csv-loader)将清洗后的数据加载到目标数据库中。
- 也可以通过 SQL 插入语句手动加载数据。
示例脚本: - ClickHouse 导入 CSV 数据:
clickhouse-client --query="INSERT INTO target_table FORMAT CSV" < /path/to/cleaned_data.csv
工具:
- ClickHouse-client 或 clickhouse-csv-loader:用于将 CSV 数据批量导入到 ClickHouse。
- SQL 插入语句:例如使用 INSERT INTO 来逐行插入数据,但这种方式效率较低。
4. 实时同步
为了实现实时数据同步,需要编写增量同步的脚本,定期从源数据库提取数据,并将变化的部分(例如通过时间戳或标记字段)同步到目标数据库。
步骤:
- 通过定时任务(如 cron 作业)定期运行增量数据同步脚本。
- 利用源数据库的变更数据捕获(CDC)机制,捕获数据变化,并将其同步到目标数据库。
示例脚本:
- 使用 Python 获取增量数据并同步到 ClickHouse:
import pymysql
import clickhouse_driver
连接 MySQL 数据库
mysql_conn = pymysql.connect(host='localhost', user='user', password='password', db='source_db')
cursor = mysql_conn.cursor()
获取增量数据(例如:最近24小时的数据)
query = "SELECT * FROM source_table WHERE last_updated > NOW() - INTERVAL 1 DAY"
cursor.execute(query)
new_data = cursor.fetchall()
连接 ClickHouse
clickhouse_conn = clickhouse_driver.Client('localhost')
将增量数据插入 ClickHouse
for row in new_data:clickhouse_conn.execute('INSERT INTO target_table VALUES', [row])
mysql_conn.close()
clickhouse_conn.disconnect()
工具:
- Python 脚本:用于定期查询源数据库并同步增量数据。
- Cron 或 Airflow:用于调度定时任务,定期执行增量同步脚本。
- Change Data Capture (CDC):使用 MySQL 的 binlog 或类似技术捕获数据变更。
5. 错误处理
在手动迁移过程中,错误处理是不可忽视的一部分。通常需要人工监控数据同步过程,并处理可能出现的错误(如数据冲突、数据丢失、连接失败等)。
步骤:
- 监控数据同步日志,及时发现问题。
- 手动排查问题(例如,重新运行失败的脚本或手动修复数据问题)。
工具:
- 日志分析工具:如 ELK Stack 或 Splunk,用于分析错误日志并监控数据同步过程中的异常。
- 手动重试机制:手动执行失败的迁移任务,确保数据一致性。
6. 维护和更新
随着时间推移,手动方案的维护变得更加复杂,尤其是在数据源或目标数据库发生变化时。需要定期更新脚本,确保其与数据库结构的兼容性。
步骤:
- 更新数据库表结构和字段类型时,手动调整迁移脚本和同步逻辑。
- 维护数据质量,定期进行数据清洗和审查。
工具:
- Git:用于版本控制,方便管理迁移脚本的更新和修改。
小结
手动数据迁移方案需要依赖大量人工干预和多个工具来完成数据提取、转换、加载、实时同步等环节。每个环节都可能面临不同的技术挑战,需要编写和维护复杂的脚本,同时需要不断地进行手动调整和监控。因此,尽管这种方案可行,但在处理大规模数据时效率低且容易出错。
自动化数据移动工具:如 TapData
不同于传统方案,利用一些现代化的自动数据移动工具,完成数据从 MySQL、Oracle 或 MongoDB 到 ClickHouse 的同步并不复杂。以 TapData 为例,作为行业内以低延迟数据移动为核心的数据移动工具,它提供了简化的流程,能够高效且准确地处理实时数据复制、实时数据集成与消费等深入数据底层的关键需求。其关键优势在于:
- 出色的 CDC(Change Data Capture,变更数据捕获)能力,开箱即用的实时同步
- 集中数据中心架构(Data Hub),便于统一管理与数据共享
- 内置 100+ 数据连接器,轻松连接各种数据源
- 低代码自动化工作流程,减少错误、提升效率
ClickHouse + Metabase 教程:如何使用 TapData 实现数据实时同步与实时分析(分步演示)
以 MySQL 实时同步到 ClickHouse,并为开源数据分析和可视化工具 Metabase 供数为例:
第 1 步:连接数据源 MySQL
首先,建立 TapData 与待同步的源数据库(MySQL)之间的连接:
- 配置连接:在 TapData 界面中,通过填写数据库主机名、端口和认证信息创建新的连接。确保连接安全且稳定。
- 测试连接并保存:在继续下一步操作之前,测试连接以确认 TapData 能够有效地与源数据库通信。
第 2 步:连接目标 ClickHouse 数据库 - 配置连接:在 TapData 中,通过配置数据库主机名、端口和身份验证详细信息来创建新连接。确保连接安全稳定。
- 测试连接并保存:在继续之前,仍然是完成连接测试以确保 TapData 可以有效地与目标数据库通信。
第 3 步:构建实时复制的数据管道
设置数据管道用以进行实时数据同步:
- 进入数据复制功能页面,在这里单击创建按钮:
- 通过拖拉拽的方式,在画布页面上,摆放好该数据复制任务的源(MySQL)与目标(ClickHouse)节点:
- 配置 MySQL 节点:单击 MySQL 节点并选择待实时复制到 ClickHouse 的表。
- 调整同步设置:单击 MySQL 节点的设置并选择全量和增量同步选项,以确保首次复制存量数据,并在完全同步后自动开始捕获增量或 CDC 数据。
- 配置 ClickHouse 节点:单击 ClickHouse 节点,然后用默认配置保存数据管道并启动任务。
- 任务监控:任务启动后,将跳转到监视页面,可以在其中跟踪复制任务状态并验证数据是否成功复制。
现在,我们已经创建了一个从MySQL到ClickHouse的实时管道。MySQL中的每个更改都将在短短几秒钟内更新ClickHouse。
第 4 步:将 ClickHouse 与 Metabase 连接
假设要通过 Metabase 实现对 ClickHouse 数据的实时分析和可视化,具体操作步骤如下:
① 将 Metabase 连接到 ClickHouse
- 启动 Metabase
- 添加新数据库:在管理(Admin)面板选择数据库(Database),并点击【添加数据库】(Add a database)
- 配置数据库连接:
- 数据库类型:选择“ClickHouse”。
- 名称:为该数据库连接指定一个名称。
- 主机:输入 ClickHouse 服务器的主机名或 IP 地址。
- 端口:输入端口号(默认通常是 8123)。
- 数据库名称:指定您要连接的数据库名称。
- 用户名和密码:提供必要的身份验证信息。
- 保存连接:输入所有详细信息后,单击“保存”
② 为仪表板创建 Question
- 单击“新建”按钮,从下拉框中选择“原生查询(Native query)”。此选项允许直接编写 SQL 查询。
③ 选择数据库
从可用数据库列表中选择 ClickHouse 数据库,确保后续的查询在正确的数据源上运行。
④ 在查询编辑器中输入 SQL 查询,以获取所需数据
例如,若要按状态统计订单数量,可以使用以下查询:点击【运行 Run】按钮(或【执行 Execute】)以执行查询,并在表格中查看结果。
⑤ 点击结果面板顶部的可视化选项(图表图标)
⑥ 从可视化类型中选择“饼图”。如对饼图结果满意,即可点击“保存”按钮。
⑦ 添加新仪表板
从 Metabase 首页,点击“新建仪表板”,并为其命名。
⑧ 添加我们在前面步骤中创建的 Question
⑨ 保存带有我们添加的 Question 的仪表板
小结
综上所述,借助 TapData 的实时复制管道,实现 MySQL、Oracle 以及 MongoDB 等数据库到 ClickHouse 的实时数据移动,不仅能够提升数据处理性能,还能帮助企业利用 ClickHouse 的高效查询、实时分析和数据压缩功能,快速获得关键业务洞察。结合 Metabase 等数据分析工具的可视化能力,企业可以轻松构建强大的数据管道,推动数据驱动的决策过程。通过实施这些方案,组织能够优化数据操作、提高分析效率,并增强团队在面对复杂数据时的决策信心。
相关文章:
如何利用 ClickHouse 实现高级分析:MySQL 到 ClickHouse 实时数据同步指南
在数据驱动的时代,企业必须依靠先进的数据分析能力来提升竞争力。随着数据量的激增和业务需求的复杂化,传统的关系型数据库已经无法满足高效处理和实时分析的需求。ClickHouse 作为一款高性能的列式数据库,凭借其卓越的查询性能和可扩展性&am…...
Python读取TIF文件
在Python中,逐帧读取TIFF文件(尤其是多页TIFF文件)可以使用tifffile库或Pillow库。以下是两种方法的示例: 方法 1:使用 tifffile 逐帧读取 tifffile 是一个专门用于处理TIFF文件的库,支持多页TIFF文件的逐…...
vue3+ts+element-plus 表单el-form取消回车默认提交
问题描述:在表单el-form中的el-input中按回车后,页面会刷新,url也会改变, 回车前: 回车后: 相关代码: 解决方法1:在 el-form 上阻止默认的 submit 事件,增加 submit.pre…...
面试经典150题——滑动窗口
文章目录 1、长度最小的子数组1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、无重复字符的最长子串2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、串联所有单词的子串3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、最小覆盖子串4.1 题目链接4.2 题目描…...
目标检测之DINO详解
相关链接 论文:[2203.03605] DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detectionhttps://arxiv.org/abs/2203.03605 代码:...
Linux指令
1. 将一个文件夹中的前5000张图片移动到另一个文件夹 可以使用 find 和 mv 命令来实现将一个文件夹 folder1 中的前 5000 张 jpg 图片移动到另一个文件夹 folder2。下面是具体的步骤: 首先,确保 folder2 存在。如果不存在,可以使用 mkdir 命…...
groovy:多线程 简单示例
在Groovy中,多线程编程与Java非常相似,因为Groovy运行在Java虚拟机(JVM)上,并且可以利用Java的所有并发工具。以下是一些在Groovy中实现多线程编程的方法: class MyThread extends Thread {Overridevoid…...
硬件产品:做产品,不仅仅是产品思维
目录 前言 1. 产品思维阶段 2. 流量思维阶段 3. 用户思维阶段 作者简介 前言 从思维层面来看, 做产品会经历三个阶段,分别是: 1. 产品思维阶段; 2. 流量思维阶段; 3. 用户思维阶段。 如果不理解这三个思维…...
【小程序开发】解决 HBuilder X 提示“本项目类型无法运行到小程序模拟器”
今天在hbuilder引入一个项目时,准备将该项目在微信开发者工具上运行时,发现提示“本项目类型”,如何解决这个问题? 问题如下: 第一:检查一下文件夹是否为一级文件夹(如图) 不要有多个…...
RuoYi-Vue从http升级为https(Jar+Nginx)
一、前提条件 1.已通过数字证书管理服务控制台签发证书。 2.SSL证书绑定的域名已完成DNS解析,即域名与主机IP地址相互映射。 附:阿里云网站运维检测平台 3.已在Web服务器开放443端口(HTTPS通信的标准端口)。 如果使用的是阿里云ECS服务器,请确保已经在安全组规则入方向…...
探索 Yocto-Meta-OpenEuler:嵌入式开发的强大基石
title: 探索 Yocto-Meta-OpenEuler:嵌入式开发的强大基石 date: ‘2024-11-19’ category: blog tags: Yocto-Meta-OpenEuler嵌入式系统开源项目定制化开发 sig: EmbeddedTech archives: ‘2024-12’ author:way_back summary: Yocto-Meta-OpenEuler 为嵌入式系统开…...
leetcode 3219. 切蛋糕的最小总开销 II
题目:3219. 切蛋糕的最小总开销 II - 力扣(LeetCode) 排序贪心。 开销越大的越早切。 注意m或n为1的情况。 class Solution { public:long long minimumCost(int m, int n, vector<int>& horizontalCut, vector<int>&…...
UniApp 打开文件工具,获取文件类型,判断文件类型
注意:以下代码使用 typeScript 开发,如果想在 js 中使用,可参考 npm 已经发布的包:https://www.npmjs.com/package/uni-easy-file NPM 使用 如果想直接在 npm 项目中使用可以直接执行以下命令 npm i uni-easy-file然后直接使用 …...
webpack打包node后端项目
webpack打包后端项目 后端项目写好了,感觉也可以打包一下,然后就想到了用webpack试试 先要下载webpack和webpack-cli npm install webpack webpack-cli然后创建webpack配置文件webpack.config.js 核心配置为entry、output、target 但是因为咱们是后…...
《学习之道》
《学习之道》主要讲述了以下内容: 学习的原理 大脑的两种认知模式:介绍了专注模式和发散模式。专注模式适合集中精力解决具体问题、进行深度理解和记忆推理,但长时间使用易疲惫和陷入思维定式;发散模式则让大脑在更广泛的认知网…...
随笔 | 写在2024的最后一天
. 前言 转眼又到了一年的末端。过去这一年,和前些年有些不同,变化巨大,感触良多。多到一时竟不知从何开始写。今天这篇随笔,因为时间有限,可能文法也会有些凌乱,就是想到哪里写到哪里,如果未来…...
对三层架构的梳理(Controller、Service、Dao)
项目结构如下: src├── main│ └── java│ └── com│ └── example│ └── demo│ ├── controller│ │ └── UserController.java│ ├…...
常用的公共 NTP(网络时间协议)服务器
公共 NTP 服务列表 以下是一些常用的公共 NTP(网络时间协议)服务器,供您参考: 中国地区公共 NTP 服务器 国家授时中心 NTP 服务器:ntp.ntsc.ac.cn中国 NTP 快速授时服务:cn.ntp.org.cn阿里云公共 NTP 服务…...
SimForge HSF 案例分享|复杂仿真应用定制——UAVSim无人机仿真APP(技术篇)
导读 「神工坊」核心技术——「SimForge HSF高性能数值模拟引擎」支持工程计算应用的快速开发、自动并行,以及多域耦合、AI求解加速,目前已实现航发整机数值模拟等多个系统级高保真数值模拟应用落地,支持10亿阶、100w核心量级的高效求解。其低…...
ROS2+OpenCV综合应用--10. AprilTag标签码追踪
1. 简介 apriltag标签码追踪是在apriltag标签码识别的基础上,增加了小车摄像头云台运动的功能,摄像头会保持标签码在视觉中间而运动,根据这一特性,从而实现标签码追踪功能。 2. 启动 2.1 程序启动前的准备 本次apriltag标签码使…...
Qanything 2.0源码解析系列6 PDF解析逻辑
Qanything 2.0源码解析系列6: PDF解析逻辑 type: Post status: Published date: 2024/12/04 summary: 深入剖析Qanything是如何拆解PDF的,核心是pdf转markdown category: 技术分享 原文:www.feifeixu.top 😀 前言: 在前面的文章中探究了图片是怎么进行解析的,这篇文章对…...
IDEA修改编译版本
目录 一、序言 二、修改maven配置 1.修改 2.代码 三、pom文件配置 1.修改 2.代码 3.问题 一、序言 有两种方法可以帮助大家解决IDEA每次刷新maven的pom配置时,会发生发行源版本不正常的报错。个人推荐第二种,原因:第二种你刷新maven后…...
Python 向量检索库Faiss使用
Faiss(Facebook AI Similarity Search)是一个由 Facebook AI Research 开发的库,它专门用于高效地搜索和聚类大量向量。Faiss 能够在几毫秒内搜索数亿个向量,这使得它非常适合于实现近似最近邻(ANN)搜索&am…...
LunarVim安装
LunarVim以其丰富的功能和灵活的定制性,迅速在Nvim用户中流行开来。它不仅提供了一套完善的默认配置,还允许用户根据自己的需求进行深度定制。无论是自动补全、内置终端、文件浏览器,还是模糊查找、LSP支持、代码检测、格式化和调试ÿ…...
机器学习随机森林回归时间序列预模型中时间滑动窗口作用以及参数设置
一、时间序列模型中时间滑动窗口作用 在时间序列模型中,时间滑动窗口(Sliding Window)起到了至关重要的作用。它是一种常见且有效的数据表示技术,通过将时间序列数据分割成多个固定大小的窗口,来捕捉和分析数据中的模式…...
【ArcGIS技巧】如何制作轨迹动画
轨迹是日常生活与工作经常要用到的,如跑步轨迹、自驾路线,考察轨迹等。地图根据路线生成轨迹也很好玩,今天小编就带大家用arcmap来实现这一功能,让你的制图动起来。 1、数据准备 在开始制作轨迹动画之前,准备一张影像…...
使用 Docker 搭建 Hadoop 集群
1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接:Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接:Docker Desktop release notes | Do…...
Bash 中的 2>1 | tee 命令详解
Bash 中的 2>&1 | tee 命令详解 在 Linux 和 Unix 系统中,命令行提供了强大的输出控制功能,能够灵活地处理标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。本文将详…...
hpcrunner
title: 探索 Hpcrunner:高性能计算的得力助手 date: ‘2024-12-31’ category: blog tags: Hpcrunner高性能计算任务调度资源优化 sig: HPC archives: ‘2024-12’ author:way_back summary: Hpcrunner 作为高性能计算领域的一款实用工具,专注于优化任务…...
关于 PPPOE技术的详细解释
PPPoE(以太网点对点协议)是一种网络协议,它通过光纤将点对点协议(PPP)封装以实现宽带接入点。PPPoE主要用于ADSL和光纤等宽带接入技术中,它允许多个用户共享同一个交换机连接,同时为每个用户提供…...
java下载文件流,不生成中间文件。
java下载文件流,不生成中间文件。 代码设计:代码实现 代码设计: 从前端获取的数据经过后端加工后,生成文件流,并返回前端,(不生成中间文件,注意内存,记得关闭流…...
Android:bug记录(简单)
1、theme 冲突 问题: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.demokotlinapplication/com.example.demokotlinapplication.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (…...
【模块系列】STM321.69TFT屏幕
前言 在翻翻自己的器件盒的时候,发现这块好久之前买的TFT屏了,想起还没有用STM32点亮过,手头上正好有立创的梁山派STM32F4,就试着按照网上的文章教程顺便移植个LVGL看看,然后就有了就本文。 代码工程命名的是LvglDemo&…...
机器学习详解(11):分类任务的模型评估标准
模型评估是利用不同的评估指标来了解机器学习模型的性能,以及其优势和劣势的过程。评估对于确保机器学习模型的可靠性、泛化能力以及在新数据上的准确预测能力至关重要。 文章目录 1 介绍2 评估准则3 分类指标3.1 准确率 (Accuracy)3.2 精确率 (Precision)3.3 召回率…...
UE5材质节点Camera Vector/Reflection Vector
Camera Vector相机向量,输出像素到相机的方向,结果归一化 会随着相机移动而改变 Reflection Vector 反射向量,物体表面法线反射到相机的方向,x和y和camera vector相反 配合hdr使用...
基于Springboot + vue实现的夕阳红公寓管理系统
🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...
ctr方法下载的镜像能用docker save进行保存吗?
ctr 和 docker 是两个不同的容器运行时工具,它们使用的镜像存储格式是兼容的(都是 OCI 标准镜像),但它们的镜像管理方式和存储路径不同。因此,直接使用 docker save 保存 ctr 拉取的镜像可能会遇到问题。 关键点 ctr 和 docker 的镜像存储位置不同: ctr(containerd)的镜…...
详解云桌面3种主流架构
本文简要介绍下云桌面(云电脑)的3种主流架构:VDI、IDV和VOI,概念、原理和区别,欢迎阅读。 云桌面作为桌面办公和云计算融合发展的产物,在一定程度上替代了传统的办公形式。目前阿里云、华为云、移动云、电…...
java实现预览服务器文件,不进行下载,并增加水印效果
通过文件路径获取文件,对不同类型的文件进行不同处理,将Word文件转成pdf文件预览,并早呢更加水印,暂不支持Excel文件,如果浏览器不支持PDF文件预览需要下载插件。文中currentUser.getUserid(),即为增加的水…...
【YOLO 项目实战】(12)红外/可见光多模态目标检测
欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】(10)YOLO8 环境配置与推理检测 【YOLO 项目实战】(11)YOLO8 数据集与模型训练 【YOLO 项目实战】(12)红外/可…...
csrf跨站请求伪造(portswigger)无防御措施
前言:基础csrf学习(没有任何防御措施) 内容来自portswigger,一个靶场练习,国外的网站,可能需要翻墙 要使 CSRF 攻击成为可能,必须满足三个关键条件: 相关操作。应用程序中存在攻击…...
究极炫酷3D立方体宇宙
演示动画:https://life.mdjsjd.me/2024/12/27/3d-cube-animation/ 一个使用Python和Pygame制作的炫酷3D立方体动画效果。结合了多种视觉特效,包括: 动态旋转的3D立方体炫彩渐变的颜色系统星空背景粒子效果动态残影拖尾效果深度透视投影 主要特性 动态变换: 立方…...
node.js之---集群(Cluster)模块
为什么会有集群(Cluster)模块? 集群(Cluster)模块的作用 如何使用集群(Cluster)模块? 为什么会有集群(Cluster)模块 Node.js 是基于 单线程事件驱动 模型的…...
PTA数据结构作业四
7-10 判断两点之间是否存在路径 本题要求输出两个顶点之间是否存在路径 输入格式: 输入包括两部分,第一部分是邻接矩阵表示方法中对应1的两个顶点,用0 0 表示结束 第二部分是两个顶点,例如 Vi和Vj 输出格式: 如果Vi和Vj存在路径,输出1;否则输出0 输入样例: 0 1 1 0…...
Spring-kafka快速Demo示例
使用Spring-Kafka快速发送/接受Kafka消息示例代码,项目结构是最基础的SpringBoot结构,提前安装好Kafka,确保Kafka已经正确启动 pom.xml,根据个人情况更换springboot、java版本等 <?xml version"1.0" encoding&qu…...
Java开发工具-Jar命令
Java开发工具-Jar 1、jar命令全平台使用 2、jar命令的作用 为类和资源创建存档,并从存档中操作或恢复单个类或资源 3、摘要 jar [OPTION …] [ [–release VERSION] [-C dir] files] … 4、jar命令描述 jar命令通常作为用于压缩与解压的工具,基于ZIP或Z…...
flux文生图模型实践
flux文生图模型实践 flyfish https://github.com/black-forest-labs/flux Black Forest Labs发布FLUX.1 Tools,这是一套模型全家桶,旨在为FLUX.1基础文本转图像模型添加控制和可操纵性,从而实现对真实图像和生成图像的修改和重新创建。FLU…...
Lecture 19
冯诺依曼模型 (The von Neumann Model) 核心概念: 1. 冯诺依曼模型的基本结构: • 该模型描述了现代计算机的基本结构,包含以下关键组件: • 输入设备 (Input device): • 用于从用户向计算机传递信息,…...
学习EDK2显示图片
原本想看看Logo是怎么显示的,但是发现可以通过EDK显示Logo的方式显示图片,因为我发现它并没有解码函数,就是写个Driver,代码会有点乱,我后面会整理后修改的。 在MdeModulePkg下,我们可以找到Logo此文件夹。 Logo.ibf中…...
MYSQL如何重置root密码
如果您从未为MySQL分配root密码,则服务器根本不需要以root身份连接的密码。但是,这是不安全的。建议一定要设置root密码。 如果您知道root密码并想要更改它,推荐使用ALTER USER user IDENTIFIED BY auth_string; 如果您之前分配了root密码但…...