跳至主要内容

博文

ClickHouse与MySQL的区别对比指南

ClickHouse 与 MySQL 对比指南 —— 写给有 MySQL 经验的用户 一、先说结论:两者根本不是同一类数据库 理解 ClickHouse 最容易踩的坑,就是把它当成"性能更强的 MySQL"。实际上两者的设计目标完全不同: 维度 MySQL ClickHouse 定位 OLTP(联机事务处理) OLAP(联机分析处理) 典型场景 下单、支付、用户信息增删改查 日志分析、报表、BI、时序数据、用户行为分析 存储方式 行式存储(row-based) 列式存储(column-based) 单次查询数据量 少量行,高频次 大量行,低频次但计算量大 事务 完整 ACID 事务 不支持传统事务,写入近似"追加" 单条数据修改 高效(UPDATE/DELETE 直接改) 低效,官方不推荐频繁做 一句话理解: MySQL 擅长"找到某一行/几行数据并精确修改",ClickHouse 擅长"扫描亿万行数据做聚合计算"。 二、使用方式与功能对比 2.1 建表语法差异 MySQL: CREATE TABLE orders ( id BIGINT AUTO_INCREMENT PRIMARY KEY , user_id BIGINT , amount DECIMAL ( 10 , 2 ), created_at DATETIME ) ENGINE = InnoDB ; ClickHouse: CREATE TABLE orders ( id UInt64, user_id UInt64, amount Decimal ( 10 , 2 ), created_at DateTime ) ENGINE = MergeTree() ORDER BY (user_id, created_at) PARTITION BY toYYYYMM(created_at); 几个关键差异点: 没有 AUTO_INCREMENT :ClickHouse 没有自增主键的概念,通常用雪花算法、UUID 或业务自带的唯一键。 ...
最新博文

PostgreSQL与MySQL的主要区别和架构介绍

PostgreSQL 入门指南:写给熟悉 MySQL 的开发者 本文面向已经掌握 MySQL 的读者,目的是快速建立 PostgreSQL 的知识框架,内容分四部分:基础用法差异、内部架构对比、索引机制对比、数据存储与流动过程。 一、基础用法差异 1.1 连接与客户端 MySQL PostgreSQL 命令行客户端 mysql -u root -p psql -U postgres -d mydb 默认端口 3306 5432 认证配置 mysql.user 表 pg_hba.conf ,与角色系统分离 1.2 数据类型差异 用途 MySQL PostgreSQL 自增主键 AUTO_INCREMENT GENERATED ALWAYS AS IDENTITY (新写法)或 SERIAL (旧写法,底层是 SEQUENCE) 布尔值 常用 TINYINT(1) 模拟 原生 BOOLEAN JSON JSON JSON 和 JSONB (二进制存储、可建索引,通常首选) 数组 不支持,需用逗号拼接字符串或 JSON 原生 ARRAY 类型,如 INT[] 枚举 ENUM('a','b') 需 CREATE TYPE ... AS ENUM ,或改用 CHECK 约束 UUID CHAR(36) 或 BINARY(16) 原生 UUID 类型 1.3 标识符大小写规则(重要易错点) MySQL:表名大小写敏感性取决于操作系统(Linux 敏感、Windows 不敏感),列名一般不敏感。 PostgreSQL: 所有未加双引号的标识符都会被自动转成小写 。 SELECT * FROM MyTable 等价于 select * from mytable 。如果建表时用双引号保留了大小写(如 "MyTable" ),之后每次引用都必须加双引号,否则会报"关系不存在"的错误。 字符串必须用单引号;双引号在 PostgreSQL 中专门用于标识符,不能像 MySQL 那样偶尔"双引号当字符串用"。 1.4 自增主键写法对...

Elasticsearch从入门到精通指南

Elasticsearch 从入门到精通 面向有编程基础的读者。全文以「概念 → 用法 → 原理 → 进阶」的顺序展开,代码示例均为 Elasticsearch 9.x(截至 2026 年中的稳定版本,特性以 Retriever API / ES|QL 为主)。 目录 Elasticsearch 是什么 核心概念 快速上手:REST API 基础操作 Mapping 与字段类型 查询 DSL 基础 聚合(Aggregations) 集群架构深入 底层数据结构 相关性打分与 Rank 排序 向量搜索(Vector Search) 混合搜索与 Retriever 框架 生产实践与性能调优 学习路径建议 1. Elasticsearch 是什么 Elasticsearch(简称 ES)是一个基于 Apache Lucene 构建的分布式搜索与分析引擎。理解它,最好从三个关键词入手: 搜索引擎 :底层是倒排索引,擅长全文检索、相关性排序。 分布式系统 :数据自动分片(shard)并可跨节点复制,具备水平扩展和高可用能力。 近实时(Near Real-Time)分析引擎 :不仅能搜索,还能做聚合统计,因此常被用作日志分析(ELK/Elastic Stack)、可观测性、向量检索/RAG 的后端。 一句话总结: ES = 分布式的 Lucene + REST API + 集群管理能力 。Lucene 负责单机上的索引与检索算法,ES 负责把多台机器上的多个 Lucene 实例组织成一个逻辑整体,并提供 JSON/REST 的开发者友好接口。 2. 核心概念 概念 类比(关系型数据库) 说明 Index(索引) Database / Table 具有相同 mapping 的文档集合 Document(文档) Row 一条 JSON 数据,是 ES 中最小的可搜索单元 Field(字段) Column 文档中的一个键值对 Mapping Schema 定义字段类型、分词方式等 Shard(分片) 分区(Partition) 索引被水平切分成的 Lucene 实例,是并行与扩展的基本单位 Replica(副本) 冗余备份 分片的复制,用于容灾和读...

MongoDB快速入门:MySQL用户指南

MongoDB 从入门到精通 —— 写给有 MySQL 基础的你 目录 先建立心智模型:术语对照表 存储引擎的本质区别 数据结构的本质区别:BSON 与文档模型 安装与连接 CRUD 操作对照速查 查询操作符大全 索引 聚合框架(替代 JOIN / GROUP BY) 数据建模:内嵌 vs 引用 事务与一致性 高可用与扩展:副本集与分片 性能优化与最佳实践 常用工具 学习路径建议 1. 先建立心智模型:术语对照表 MySQL 的知识不会浪费,几乎每个概念在 MongoDB 里都有对应物,只是实现方式不同。 MySQL(关系型) MongoDB(文档型) 说明 Database Database 概念一致 Table Collection(集合) 一组文档的容器,无固定 schema Row(行) Document(文档) 一条 BSON 格式的记录 Column(列) Field(字段) 文档内的键值对 Primary Key _id 字段 MongoDB 自动生成 ObjectId 作为主键 Index Index 概念一致,用法高度相似 JOIN $lookup (聚合阶段)或应用层多次查询 MongoDB 更推荐"反范式内嵌"来避免 JOIN Schema(强约束) Schema-less / 动态 Schema 同一集合里的文档字段可以不同(但 不代表不需要设计 ) GROUP BY Aggregation Pipeline 的 $group 表达能力更强,是"流水线"式处理 事务(InnoDB 默认支持) 多文档事务(4.0+ 支持,但设计上应尽量避免依赖) 理念不同:MongoDB 鼓励原子性的单文档操作 外键约束 无原生外键(应用层保证一致性) 这是最大的思维转变点之一 mysql CLI mongosh 官方交互式 Shell,语法是 JavaScript 关键心态转变 :MySQL 设计时先想"如何范式化、避免冗余";MongoDB 设计时先想 "这个数据在应用中是如何被读取的,如何组织能...

Kafka架构和消息流转详解

一、Kafka是什么 一句话:Kafka是一个 分布式的、基于日志(log)的消息系统 。它的核心思想很简单——把消息像写日志一样"追加"到磁盘文件里,消费者按顺序"读"这个文件,仅此而已。这个简单模型是它高吞吐的根本原因。 二、核心架构组件 在讲数据流之前,先认识几个名词: Producer(生产者) :发消息的一方,比如你的业务代码 Broker :Kafka的服务器节点,多个Broker组成一个 Cluster(集群) Topic(主题) :消息的分类,比如"订单创建"topic Partition(分区) :每个Topic会被切成多个分区,分区是Kafka 并行处理和存储的最小单位 Replica(副本) :每个分区有多个副本分布在不同Broker上,其中一个是 Leader (负责读写),其余是 Follower (只同步数据,不对外服务) Consumer(消费者) / Consumer Group(消费组) :消费消息的一方,同一个组内的消费者共同"瓜分"一个Topic的所有分区 Controller :集群里选出的一个特殊Broker,负责管理分区Leader选举等元数据工作(以前靠ZooKeeper协调,新版本Kafka用内置的KRaft协议取代了ZooKeeper)## 三、数据从Producer到Broker再到Consumer的完整过程 Producer发送消息 :业务代码调用 send() ,消息先进入客户端本地的一个内存缓冲区( RecordAccumulator ),并不是发一条就立刻走网络 选择分区 :如果你指定了key,Kafka默认对key做hash来决定发到哪个分区(保证同key的消息永远进同一个分区,从而保证顺序);没指定key则轮询或用粘性分区策略 批量发送 :客户端把同一分区的多条消息打包成一个batch,达到大小或时间阈值后一起发给对应分区的 Leader Broker (这是Kafka高吞吐的关键之一——减少网络往返) Leader写入日志 :Leader收到消息后,以 顺序追加 的方式写入本地磁盘的log文件,并分配一个递增的 offset 副本同步 :Follower副本主动从Leader拉取新消息...

MySQL架构与数据管理学习指南

MySQL 架构、数据管理与数据流动学习文档 面向对象:已经会写 SELECT / INSERT 等基本语句,但想真正理解"一条 SQL 语句进去之后,MySQL 内部到底发生了什么"的开发者。 阅读方式建议:不必从头背诵,遇到工作中的实际问题(比如"为什么这条查询这么慢""为什么加了索引还是全表扫描")时,回来对照相应章节。 目录 MySQL 整体架构总览 一条 SQL 语句的完整生命周期 INSERT / SELECT 基础回顾(从语法到底层) InnoDB 存储引擎深度剖析 索引原理(B+树、聚簇索引、联合索引) 复杂查询案例解析(GROUP BY / JOIN / HAVING / LIMIT / ORDER BY) 数据流动全景图(总结) 诊断与优化工具 延伸学习路线 第一章:MySQL 整体架构总览 MySQL 的架构可以分为两大块: Server 层 (所有存储引擎共用)和 存储引擎层 (可插拔,最常用的是 InnoDB)。 ┌─────────────────────────┐ │ 客户端 / 应用 │ └────────────┬─────────────┘ │ TCP / Socket ┌────────────▼─────────────┐ │ 连接器 (Connectors) │ ← 建立连接、权限校验、维持长连接 └────────────┬─────────────┘ ┌─────────────────────────────┼─────────────────────────────┐ │ Server 层 │ ...