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

ClickHouse 表引擎深度解析:ReplacingMergeTree、PARTITION、PRIMARY KEY、ORDER BY 详解 - 若

ClickHouse 表引擎深度解析:ReplacingMergeTree、PARTITION、PRIMARY KEY、ORDER BY 详解

前言

ClickHouse 作为高性能的列式数据库,其表引擎设计是其核心优势之一。ReplacingMergeTree 是处理重复数据的利器,而 PARTITIONPRIMARY KEYORDER BY 等配置直接影响查询性能和数据组织方式。本文将通过实际案例深入解析这些概念。

1. ReplacingMergeTree 引擎详解

1.1 基本概念

ReplacingMergeTree 是 ClickHouse 专门用于处理重复数据的引擎,它会在后台异步合并相同主键的记录。

CREATE TABLE example_table (id UInt64,name String,created_at DateTime64(3),updated_at DateTime64(3)
) ENGINE = ReplacingMergeTree(updated_at)
PRIMARY KEY (id)
ORDER BY (id, created_at);

1.2 工作原理

去重机制

  • 相同主键的记录会被合并
  • 保留版本字段值最大的记录
  • 合并是异步进行的,不是立即生效

版本字段作用

-- 示例数据
INSERT INTO example_table VALUES (1, 'Alice', '2024-01-01 10:00:00', '2024-01-01 10:00:00');
INSERT INTO example_table VALUES (1, 'Alice Updated', '2024-01-01 10:00:00', '2024-01-01 11:00:00');-- 最终结果:保留 updated_at 最大的记录
-- (1, 'Alice Updated', '2024-01-01 10:00:00', '2024-01-01 11:00:00')

1.3 实际应用场景

区块任务管理系统

CREATE TABLE block_tasks (start_block UInt64,end_block UInt64,status String,created_at DateTime64(3),updated_at DateTime64(3),assigned_at Nullable(DateTime64(3)),completed_at Nullable(DateTime64(3))
) ENGINE = ReplacingMergeTree(updated_at)
PRIMARY KEY (start_block, end_block)
ORDER BY (start_block, end_block)
PARTITION BY toYYYYMM(toDateTime(created_at));

业务场景

  • 避免重复处理相同区块范围
  • 任务状态更新时保留最新状态
  • 支持任务重试和故障恢复

2. PARTITION 分区策略

2.1 分区的作用

分区是 ClickHouse 数据组织的基本单位,影响:

  • 查询性能:只扫描相关分区
  • 存储管理:按分区进行数据管理
  • 并行处理:不同分区可以并行处理

2.2 常用分区策略

按时间分区

-- 按月分区
PARTITION BY toYYYYMM(toDateTime(created_at))-- 按天分区
PARTITION BY toDate(created_at)-- 按小时分区(适合高频数据)
PARTITION BY toStartOfHour(created_at)

按业务字段分区

-- 按状态分区
PARTITION BY status-- 按区块范围分区
PARTITION BY intDiv(start_block, 1000000)  -- 每100万个区块一个分区

2.3 分区选择原则

分区策略 适用场景 优点 缺点
按月分区 一般业务数据 平衡性能和存储 分区可能过大
按天分区 高频数据 查询性能好 分区数量多
按小时分区 实时数据 查询极快 分区过多
按业务分区 数据分布不均 针对性强 需要业务理解

3. PRIMARY KEY 主键设计

3.1 ClickHouse 主键特点

重要概念

  • ClickHouse 的主键不是传统意义上的唯一约束
  • 主键主要用于数据排序和查询优化
  • 主键字段必须是 ORDER BY 的前缀

3.2 主键设计原则

单字段主键

-- 用户表
CREATE TABLE users (user_id UInt64,name String,email String
) ENGINE = MergeTree()
PRIMARY KEY (user_id)
ORDER BY (user_id, created_at);

复合主键

-- 区块任务表
CREATE TABLE block_tasks (start_block UInt64,end_block UInt64,status String
) ENGINE = ReplacingMergeTree(updated_at)
PRIMARY KEY (start_block, end_block)
ORDER BY (start_block, end_block);

3.3 主键选择策略

高基数字段优先

-- 好的主键:高基数,查询频繁
PRIMARY KEY (user_id)           -- 用户ID,唯一且查询频繁
PRIMARY KEY (order_id)          -- 订单ID,唯一且查询频繁-- 不好的主键:低基数,查询少
PRIMARY KEY (status)            -- 状态字段,基数低
PRIMARY KEY (created_date)      -- 日期字段,基数低

4. ORDER BY 排序键设计

4.1 ORDER BY 的作用

  • 数据物理排序:决定数据在磁盘上的存储顺序
  • 查询性能优化:支持范围查询和排序查询
  • 压缩效率:相似数据聚集,提高压缩比

4.2 排序键设计模式

时间序列数据

-- 日志表
CREATE TABLE logs (timestamp DateTime64(3),level String,message String,user_id UInt64
) ENGINE = MergeTree()
PRIMARY KEY (timestamp)
ORDER BY (timestamp, level, user_id);

业务数据

-- 订单表
CREATE TABLE orders (order_id UInt64,user_id UInt64,status String,amount Decimal(10,2),created_at DateTime64(3)
) ENGINE = MergeTree()
PRIMARY KEY (order_id)
ORDER BY (user_id, created_at, order_id);

4.3 排序键优化技巧

查询模式分析

-- 常见查询模式
SELECT * FROM orders WHERE user_id = 123 ORDER BY created_at DESC;
SELECT * FROM orders WHERE user_id = 123 AND created_at >= '2024-01-01';-- 对应的排序键设计
ORDER BY (user_id, created_at, order_id)  -- 支持上述查询

字段顺序原则

  1. 查询频率:高频查询字段在前
  2. 基数大小:高基数字段在前
  3. 查询模式:支持范围查询的字段在前

5. 完整配置示例

5.1 区块数据表

CREATE TABLE blocks (block_number UInt64,block_hash String,parent_hash String,timestamp UInt64,gas_limit UInt64,gas_used UInt64,created_at DateTime64(3)
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(toDateTime(timestamp))
PRIMARY KEY (block_number)
ORDER BY (block_number, timestamp, block_hash);

设计说明

  • 引擎MergeTree - 区块数据不会重复
  • 分区:按月分区 - 平衡查询性能和存储
  • 主键block_number - 区块号唯一且查询频繁
  • 排序(block_number, timestamp, block_hash) - 支持多种查询模式

5.2 交易数据表

CREATE TABLE transactions (tx_hash String,block_number UInt64,from_address String,to_address String,value Decimal(20,0),gas_price UInt64,gas_used UInt64,timestamp UInt64,created_at DateTime64(3)
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(toDateTime(timestamp))
PRIMARY KEY (tx_hash)
ORDER BY (tx_hash, block_number, timestamp, from_address, to_address);

设计说明

  • 引擎MergeTree - 交易哈希唯一
  • 分区:按月分区 - 按时间查询频繁
  • 主键tx_hash - 交易哈希唯一
  • 排序:支持按交易哈希、区块号、地址等查询

5.3 任务管理表

CREATE TABLE block_tasks (start_block UInt64,end_block UInt64,status String,assigned_at Nullable(DateTime64(3)),completed_at Nullable(DateTime64(3)),created_at DateTime64(3),updated_at DateTime64(3)
) ENGINE = ReplacingMergeTree(updated_at)
PARTITION BY toYYYYMM(toDateTime(created_at))
PRIMARY KEY (start_block, end_block)
ORDER BY (start_block, end_block);

设计说明

  • 引擎ReplacingMergeTree(updated_at) - 处理重复任务,保留最新状态
  • 分区:按月分区 - 按创建时间分区
  • 主键(start_block, end_block) - 区块范围唯一
  • 排序(start_block, end_block) - 支持按区块范围查询

6. 性能优化建议

6.1 查询优化

使用 FINAL 关键字

-- 强制去重查询
SELECT * FROM block_tasks FINAL 
WHERE start_block = 1000 AND end_block = 1100;

分区裁剪

-- 利用分区裁剪
SELECT * FROM blocks 
WHERE timestamp >= '2024-01-01' AND timestamp < '2024-02-01';
-- 只扫描 2024年1月 的分区

6.2 维护操作

定期合并

-- 手动触发合并
OPTIMIZE TABLE block_tasks FINAL;

分区管理

-- 删除旧分区
ALTER TABLE blocks DROP PARTITION '202301';-- 移动分区
ALTER TABLE blocks MOVE PARTITION '202401' TO DISK 'cold_storage';

7. 常见问题和解决方案

7.1 重复数据问题

问题ReplacingMergeTree 去重不及时
解决

-- 查询时使用 FINAL
SELECT * FROM table FINAL WHERE condition;-- 或者应用层去重
SELECT * FROM table WHERE condition 
ORDER BY version_column DESC LIMIT 1;

7.2 查询性能问题

问题:查询慢
解决

  • 检查分区裁剪是否生效
  • 优化 ORDER BY 字段顺序
  • 使用合适的索引

7.3 存储空间问题

问题:存储空间过大
解决

  • 定期执行 OPTIMIZE TABLE FINAL
  • 删除不需要的分区
  • 使用压缩算法

8. 总结

ClickHouse 的表引擎配置是一个系统工程,需要综合考虑:

  1. ReplacingMergeTree:适合需要处理重复数据的场景
  2. PARTITION:根据查询模式选择合适的分区策略
  3. PRIMARY KEY:选择高基数、查询频繁的字段
  4. ORDER BY:根据查询模式优化字段顺序

正确的配置能够显著提升查询性能,减少存储空间,提高系统整体效率。在实际应用中,需要根据具体的业务场景和查询模式进行调优。

相关文章:

ClickHouse 表引擎深度解析:ReplacingMergeTree、PARTITION、PRIMARY KEY、ORDER BY 详解 - 若

ClickHouse 表引擎深度解析:ReplacingMergeTree、PARTITION、PRIMARY KEY、ORDER BY 详解 前言 ClickHouse 作为高性能的列式数据库,其表引擎设计是其核心优势之一。ReplacingMergeTree 是处理重复数据的利器,而 PARTITION、PRIMARY KEY、ORDER BY 等配置直接影响查询性能和…...

UOS统信服务器操作系统V20(1070)安装mysql8.4.5(建议安装glibc2.28版本)

环境:OS:UOS Server 20 统信服务器操作系统V20(1070)mysql:8.4.5 glib.2.17 操作系统下载https://www.chinauos.com/resource/download-server查看系统glibc版本[root@localhost yum.repos.d]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 Free Software Foundation, …...

web5(phps源码泄露)

访问index.phps,会自动下载index.php文件 点击查看即可得到flag...

web3(自带网络工具包查看数据)

查看源码什么也没有扫目录也什么都没有只能说信息收集能力还欠佳, 我们可以先尝试使用浏览器自带的网络工具查看一下数据包。...

web17(备份的sql文件泄露)

用常见的数据库工具打开即可...

web11(通过Dns检查查询Flag)

:::info 223.5.5.5测试的解析结果是否具有代表性?(来自阿里云官网)具备一定的代表性,在国内客户端使用223.5.5.5有一定的用户群体,但是该测试结果并不能代表全部用户;如果223.5.5.5测试已经生效,但是您本地仍然不能访问,那么可以侧面反映至少使用223.5.5.5的Local DNS用户…...

ctfshow_web11

ctf.show_web11简单的代码审计,这段代码定义了一个名为replaceSpecialChar的函数,该函数接受一个字符串$strParam作为参数。函数内部使用了正则表达式$regex来匹配SQL语句中的一些关键字,包括select、from、where、join、sleep、and、空格\s、union和逗号,。preg_replace($r…...

ctfshow_web13

ctf.show_web13今天也算是碰到一个新类型的文件上传类的题目(与文件包含结合了可以说)首先尝试了直接传一句话木马,全都被ban了,算是没招了就扫了下目录,进去看一眼,好像页面没回显什么东西,再试试看upload.php.bak(这里看备份文件算是一种新思路,说不定过滤了什么东西…...

ctfshow_web9

ctf.show_web9尝试爆破无果,应该不是弱口令爆破题,那么我们就扫一下目录进去看看访问该目录后会自动下载一个php文件,打开看看可以看出这是一个sql注入漏洞,通过post传参一个paasword的变量值。经过md5加密后被用来与用户名匹配 md5($pass, true) 返回的是 MD5 哈希的二进制…...

锁屏界面无法通过任意键弹出开机密码

长按ctrl+alt+delete弹出...

应急响应-日志分析 - voasem

web服务器日志在很多时候,我们经常需要分析网站的日志,以此来查看网站运行的各种情况。比如说如果网站被攻击,我们可以通过查看日志来溯源攻击者。 Apache 日志目录:/Apache/logs/logs目录下有两个文件,一个是 access.log ,就是用户的访问日志。还有一个是 error.log,这…...

ctfshow web 10

ctfshow web 10打开题目长这样,点击取消会自动下载indexs.php文件,打开查看源码 <?php$flag="";function replaceSpecialChar($strParam){$regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";return preg_replace($regex,"",$s…...

【ACM出版】第四届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2025)

第四届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2025)定于2025年9月26-28日在中国-北京举行。【高录用快见刊、检索:审稿录用速度快】 【录用信息完整:含ISSN号,DOI,封面目录】 第四届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2025) The 4th Inter…...

SMA的射频连接器

SMA的射频连接器射频相关的器件和应用设备经常会用到各种各样的射频连接器,这里将介绍一部分常用的连接器。上图是不同型号的连接器的使用频率,这里仅供参考,因为随着工艺和科技的发展,各个型号的连接器使用频率范围可能会有所变化。SMA连接器SMA型射频同轴连接器是Bendix公…...

什么是Elasticsearch?它与其他搜索引擎相比有什么优势?

一、Elasticsearch 是什么? Elasticsearch(简称 ES) 是一个基于 Apache Lucene 的开源分布式搜索和分析引擎,用 Java 开发,设计用于云计算中,能够实现实时数据搜索、分析和存储。它具有高扩展性、高可用性和分布式特性,广泛应用于日志分析、全文搜索、实时数据统计等场景…...

pdf.js-2.3.0国内下载地址

https://npmmirror.com/package/pdfjs-dist?version=2.3.200...

opencv学习记录2

腐蚀操作 #设置核 kernel = np.ones((3,3),np.uint8) erosion = cv2.erode(img,kernel,iterations=1)膨胀 dige_dilate = cv2.dilate(src,kernel,iterations=1)开运算,闭运算,梯度运算 膨胀-腐蚀 开运算原理: 图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后…...

get请求图片文件转为base64编码

public static String convertImageToBase64(String url) throws IOException {String urls = url.replaceAll("192.168.10.242", "192.192.192.192");// 创建HTTP客户端try (CloseableHttpClient httpClient = HttpClients.createDefault();// 发送GET请求…...

BMS与威纶通人机界面通信问题

BMS和威纶通人机界面通信 接口:485 协议:modbus-rtu 波特率:115200bps 问题:电脑模拟人机界面和BMS连接时,显示正常,使用人机界面实物和BMS连接时,无反应;排除BMS的modbus协议本身问题 排查思路: 1)确认人机界面有没有下发读取指令; 用485工具连接电脑和人机界面,用…...

Blazor全栈是个陷阱

前言 大家好,我是曦远~ 最近有个项目急着上线 大概就是接受一堆客户端连接上报数据,然后在界面上展示数据和简单的控制 这种场景感觉 Blazor 还挺合适的,折腾之心蠢蠢欲动 于是掏出了 Blazor 开搞 现在 .NET9 的 Blazor 已经进化了,像 Next.js 那样可以把 server 和 client…...

大型语言模型安全实践:Copilot安全防护经验总结

本文通过实际测试案例深入分析Microsoft Copilot在企业环境中的安全风险,揭示LLM集成带来的数据泄露隐患,并提供基于零信任和RBAC的防护方案,帮助企业构建安全的人工智能应用环境。禁锢Copilot:LLM安全实践的经验教训 任何使用Microsoft产品的人可能都知道,Copilot现已自动…...

一些编程语言的发展史

计算机语言的发展史 C语言的命名由来 C语言,作为一种广泛使用的编程语言,其命名背后有着一段历史。C语言的前身是B语言,而B语言又是基于BCPL语言发展而来。BCPL(Basic Combined Programming Language)是由剑桥大学的Martin Richards在1967年为了简化CPL语言而创建的。接着…...

mysql生成uuid,3种实用方法详解

你知道MySQL中有几种生成唯一标识符的方法吗?作为数据库开发者,我们经常需要为数据记录生成全局唯一的ID。与自增ID相比,UUID具有全局唯一性和分布式友好的特性,特别适合微服务架构下的数据库设计。 UUID基础概念 RFC4122标准定义了UUID(通用唯一识别码),它是一个128位的数…...

vmware ubuntu共享文件夹

sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other,uid=1000,gid=1000 开机自动挂载 编辑/etc/fstab文件,添加以下行(需确保共享文件夹名称正确): .host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_othe…...

【10章】n8n+AI工作流:从入门到企业级AI应用实战

【10章】n8n+AI工作流:从入门到企业级AI应用实战 网 盘 地址:……/s/14l-lQhw9M2TuBny5O4Ru8A 提取码:0hm4 在数字时代的浪潮中,自动化已成为提升效率的关键驱动力。当灵活的n8n工作流平台与强大的人工智能相遇,一场生产力革命正悄然发生。这种融合不仅重新定义了工作流…...

CodeGPT AI代码狂潮来袭!个人完全免费使用谷歌Gemini大模型 超越DeepSeek几乎是地表最强

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注CodeGPT是什么 CodeGPT是一款基于AI人工智能的编程辅助插件,它就像一个贴心的编程小助手,能帮你更高…...

Android 安卓 困难处理记录 腾讯IM和厂商离线推送难题 点击离线推送无法唤醒APP启动页但某些Service服务和Application被启动

Android 安卓 困难处理记录 腾讯IM和厂商离线推送难题 点击离线推送无法唤醒APP启动页但某些Service服务和Application被启动pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…...

9.18

1...

Codeforces Round 1051 (Div 2)

cf1051 Div2 ABCD1D2E题解Problem - A. All Lengths Subtraction 思路: 我们希望 n 和 n - 1 相邻,n - 1, n 和 n - 2 相邻 ... 不断往外扩展 所以我们可以维护 l 和 r 表示当前扩展到了哪里 通过判断下一个数是否和 l 或者 r 相邻,判断 YES/NO 核心代码: void solve() {in…...

Python numba jit加速计算

安装pip install numba使用示例import timefrom numba import jit# 原始函数 def python_sum(n):total = 0for i in range(n):total += ireturn total# Numba 加速版本 @jit(nopython=True) def numba_sum(n):total = 0for i in range(n):total += ireturn total# 性能测试 n =…...

人机协作开发新体验:花两天时间与Cursor共同打造一个微信小程序

前言 在过去的几天里,我完成了一个完整的微信小程序项目——双色球机选应用。 这个项目的独特之处在于,所有的代码编写工作都是由 Cursor 完成的,而我主要负责需求分析、功能规划和调试测试。项目概述 应用功能 我开发的是一款双色球机选微信小程序,主要功能包括:开奖信息…...

OEC-Turbo刷群晖Armbian流程记录

记录OEC-Turbo的刷机流程,为以后反复折腾做参考。 设备版本:OEC L2.0,不清楚1.0和2.0的区别 系统:Windows 11 准备工具瑞芯微驱动 瑞芯微烧录工具 Loader文件 固件 镊子 Type-C数据线工具下载链接:https://pan.quark.cn/s/a719af4c2816 安装驱动下载:01-瑞芯微驱动\Drive…...

01_网络分层模型

一、OSI 七层网络模型 所谓七层就是基于 URL 等应用层信息的负载均衡,四层就是基于 IP + 端口的负载均衡,同样的还有基于二层 MAC 地址,三层 IP 地址的负载均衡。 而 OSI(Open System Interconnection,开放式通信互联) 是由 ISO(International Organization for Standardiz…...

SaaS 是什么?一文带你看懂 SaaS 与传统软件的区别

SaaS 发音类似于「萨斯」,是 Software as a Service 的缩写,直译过来就是「软件即服务」。你可以这样理解: 在 SaaS 模式下,软件变得和水电气很相似,你只需要每月缴纳固定的费用即可享受服务。再举个比较具体的例子: 如果是在10年前,我想画设计图,需要使用 Photoshop,…...

FreeCAD-即时入门-全-

FreeCAD 即时入门(全)原文:zh.annas-archive.org/md5/ba46ce5f33da4fa68df84701f1baaf8a 译者:飞龙 协议:CC BY-NC-SA 4.0前言 FreeCAD 是一个面向工程世界的通用建模工具。与为动画师和艺术家设计的其他建模工具(如 Blender 或 Maya)不同,FreeCAD 对参数化和基于特征的…...

UOS统信服务器操作系统V20(1070)安装mysql8.0.41(建议安装glibc2.28版本)

环境:OS:UOS Server 20 统信服务器操作系统V20(1070)mysql:8.0.41 glib.2.17 操作系统下载https://www.chinauos.com/resource/download-server查看系统glibc版本[root@localhost yum.repos.d]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 Free Software Foundation,…...

MyEMS:重新定义人与能源的关系 —— 一场藏在数据里的能源管理革命

能源,这个推动现代文明运转却始终隐形的主角,正通过数字技术与我们建立全新的对话方式。MyEMS作为开源能源管理系统,正在悄然引领这场变革——它不仅改变我们管理能源的方式,更在重新定义人与能源之间的关系。 从被动消费者到主动管理者 传统能源使用中,人类扮演着被动消费…...

刀齿磨损智能检测APP

...

TJOI2007--线段

题目传送门代码点击查看代码 #include<bits/stdc++.h> using namespace std; const int N=2e4+10; int n; int l[N],r[N],len[N]; int dp[N][2]; //dp[i][0]表示停留在本行左端点 //那么就要到右端点在再回到左端点 //dp[i][1]表示停留到本行右端点 //就从本行左端点到右…...

ceph集群的部署

需要准备三台虚机,下载好cephadm包 安装命令:ceph bootstarp --mon-ip=192.168.10.3 --allow-fqdn-hostname 像这样把下列命令对应要求填写命令,就可以安装ceph --allow-fqdn-hostname :允许使用主机作为域名访问mgr --initial-dashboard-user :指定dashboard的用户名 --ini…...

充电桩测试:守护绿色出行的安全密码

在新能源汽车蓬勃发展的时代浪潮下,充电桩作为核心配套设施,其质量与安全性至关重要。每一次稳定的充电过程背后,都离不开严谨细致的测试工作。那么,在充电桩测试中究竟需要注意哪些关键点呢? 电气性能是首要考量因素。电压和电流的稳定性犹如人的脉搏跳动般关键,必须精准…...

如何写好一个缺陷报告?让开发无法拒绝修复的10个要素

记住,测试人员与开发人员不是对立关系,而是协作共赢的伙伴。我们共同的目标是交付高质量的产品,为用户创造价值。当你用专业、细致、合作的态度对待每一个缺陷时,开发人员会更加重视你的报告,团队协作也会更加顺畅高效。在软件开发的世界里,测试人员和开发人员之间的关系…...

不重启、不重写、不停机:SLS 软删除如何实现真正的“无感数据急救”?

SLS 全新推出的「软删除」功能,以接近索引查询的性能,解决了数据应急删除与脏数据治理的痛点。2 分钟掌握这一数据管理神器。作者:屈岳(尧道) 引言 日志服务 SLS 作为云原生观测与分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台服务。在常规场景中…...

C#记录类型与集合的深度解析:从默认实现到自定义比较器

本文深入探讨C#记录类型与不可变集合在实际应用中的挑战,包括默认相等性实现的局限性、自定义比较器的需求、引用相等性的应用场景,以及Visual Studio工具支持方面的不足,并提出了具体的语言和工具改进建议。记录与集合 这篇文章在某种程度上是我在使用选举网站中的记录和集…...

安徽京准:NTP时间服务器助力网络数据安全稳定

安徽京准:NTP时间服务器助力网络数据安全稳定 安徽京准:NTP时间服务器助力网络数据安全稳定安徽京准:NTP时间服务器助力网络数据安全稳定 京准电钟官微——ahjzsz NTP时间服务器确实是保障网络数据安全与稳定的重要基石。它通过提供高精度、高可靠、高安全的时间同步服务,为…...

UOS统信服务器操作系统V20(1070)安装mysql5.7.42

环境:OS:UOS Server 20 统信服务器操作系统V20(1070)mysql:5.7.42 操作系统下载https://www.chinauos.com/resource/download-server查看系统glibc版本[root@localhost yum.repos.d]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 Free Software Foundation, Inc.This …...

响应式问题

今天遇到一个问题,组件已经设计为响应式,但是在移动端字体太小,多次调试无果,最终发现原因就在于我在main.js入口文件中引用了如下函数/*** 设置根元素的字体大小,以实现页面的自适应布局。* @param {number} bs - 基准字体大小,默认值为 16* @param {number} width - 设…...

Python 函数缓存

作用缓存不同参数组合的计算结果,命中缓存可以直接返回结果。使用示例import time from functools import lru_cache@lru_cache(maxsize=128) # 指定128个不同参数组合的调用结果,lru策略,设置为None表示无上限 def test(step: int, turns: int) -> int:total = 0for _ i…...

乐蜂直播购物商城小程序介绍

一、概述总结 乐蜂直播购物商城小程序系统,是一款依托微擎系统交付的直播电商解决方案。微擎系统是基于 PHP 开发的开源应用生态系统,可快速搭建微信公众号、小程序等应用,同时支持 Web 系统开发与部署,乐蜂直播购物商城小程序系统借助这一基础,实现了微信小程序内直播带货…...

基于C#实现基恩士PLC通信

一、通信协议选择 基恩士PLC支持多种通信协议,推荐优先采用以下两种方案:TCP/IP Socket通信(通用性强,适用于以太网接口设备) Modbus TCP协议(标准工业协议,兼容性强)二、Socket通信实现(基于TCP/IP) 1. 基础通信类设计 using System.Net.Sockets; using System.Text…...