重新认识 键值型数据库、文档型数据库、搜索引擎数据库、列式数据库(四)

键值型数据库

键值型数据库通过 Key-Value 键值的方式来存储数据,其中 Key 和 Value 可以是简单的对象,也可以是复杂的对象。Key 作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,缺点是无法像关系型数据库一样使用条件过滤(比如 WHERE),如果你不知道去哪里找数据,就要遍历所有的键,这就会消耗大量的计算。

键值型数据库典型的使用场景是作为内存缓存。Redis 是最流行的键值型数据库。

文档型数据库

此类 数据库可存放并获取文档,可以是XML、JSON等格式。在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。MongoDB 是最流行的文档型数据库。此外,还有CouchDB等。

搜索引擎数据库

虽然关系型数据库采用了索引提升检索效率,但是针对全文索引效率却较低。搜索引擎 数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。核心原理是“倒排索引”。

典型产品:Solr、Elasticsearch、Splunk 等。

列式数据库

列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQL Server 等数据库都是采用的行式存储(Row-based),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的 I/O,适合于分布式文件系统,不足在于功能相对有限。典型产品:HBase等。


深度本质解析:列式存储 & 宽列数据库(HBase 为代表)

先纠正一个高频误区: 很多人把 HBase 简单叫「列式数据库」,严格区分两类:

  1. 纯列式存储(OLAP 分析):ClickHouse、Hive、Parquet,按字段横向切分,面向批量统计分析;
  2. 宽列存储 / 列族数据库(NoSQL):HBase、Cassandra,按行 + 列族纵向分区,属于分布式 KV 衍生,面向海量随机读写;

HBase 属于宽列数据库(Column-Family Store),是分布式有序 KV 的极致扩展,和传统列式 OLAP 完全不是一套设计。

下面先把四类数据库基础模型再升级到五类,建立全局视角:

  1. Redis:内存单值 KV
  2. MongoDB:文档库(JSON 结构化单记录)
  3. MySQL:关系型二维行式存储
  4. ES:文档搜索引擎(倒排索引)
  5. HBase:分布式有序宽列 / 列族存储(海量离线、万亿级稀疏数据)

一、HBase 底层数学本质:有序多维 KV 映射

1. 核心五层定位键(唯一确定一个单元格)

RowKey(行键) + ColumnFamily(列族) + ColumnQualifier(列名) + Timestamp(版本) → Cell(单元格值)

你可以理解为:四维复合主键定位一个最小数据单元 对比 Redis key→value 一维 KV,HBase 是多维有序 KV。

举个直观例子:

RowKey = user_1001
ColumnFamily = info
ColumnQualifier = name
Timestamp = 1750000000
Cell Value = "张三"

2. 最关键特性:全局按 RowKey 有序排序

Redis 哈希表无序;Mongo/MySQL 主键有序但单机容量有限; HBase 所有行数据全局按 RowKey 字典序有序排列,底层基于 HDFS 持久化,天然支持范围扫描 scan startRow ~ endRow

3. 稀疏存储天然优势(宽列核心价值)

传统行数据库(MySQL/Mongo)每行要预留全部字段空间,字段缺失也占用存储; HBase 一行可以有百万级不同列,不存在的列完全不占用磁盘,完美适配稀疏数据:

  • 用户海量标签、行为日志、埋点、设备多维度指标、时序数据。

二、HBase 核心抽象概念,对标其他数据库

HBase 概念MySQL 类比Redis 类比含义
Table 表Table 表全局 hash 表一张大宽表,万亿行无上限
RowKey 行键主键 PRIMARY KEYRedis Key行唯一标识,全局有序,分片路由依据
ColumnFamily 列族分组字段独立 Hash 结构列的分组,物理存储隔离,必须建表提前定义
Column Qualifier 列字段 ColumnHash 的 field动态新增,无需提前定义,每行可完全不同
Cell 单元格单元格 (行 + 列)HSET 单条 field-value最小存储单元,自带多版本时间戳
Timestamp 时间戳无原生多版本同一行列保留多版本数据,自动过期
Region 分区分表 / 分片Redis Cluster slot表横向拆分分片,按 RowKey 区间划分

核心灵魂:列族物理隔离

同一个 RowKey 下,不同列族的数据存在完全不同的物理文件。 举例: info 列族存用户基础信息(name/age)、log 列族存行为埋点(几十万个动态列) 读取 info 时不会加载海量 log 列数据,IO 隔离,大幅减少磁盘读取量。 这是「列族」和普通列式最本质区别。

三、HBase 完整底层存储架构(从写入到磁盘)

HBase 构建在两大基础之上:

  • HDFS:分布式持久化磁盘,高可靠、无限扩容
  • Zookeeper:元数据管理、Region 分片分配、集群协调

1. 写入流程:LSM-Tree 结构(重中之重)

HBase、RocksDB、LevelDB 统一使用 LSM 树(日志合并树),和 MySQL B + 树、ES 倒排、Redis 哈希完全区分。 LSM 核心设计思想:牺牲少量读性能,换取超高写入吞吐。 分层结构:

  1. MemStore(内存有序缓冲区) 写入先放内存有序跳表,RowKey 有序,内存满后刷入磁盘生成 HFile。
  2. HFile(磁盘有序只读文件) 持久化文件,有序、不可修改,类似 ES 的 Segment; 更新 / 删除不会修改旧文件,仅写入带时间戳的新版本 / 删除标记。
  3. WAL 预写日志 写入 MemStore 前先写日志,宕机不丢数据,类似 MySQL Redo。
  4. 后台 Compaction 合并 大量小 HFile 后台合并,清理过期版本、删除标记,减少查询时文件扫描数量。
LSM vs B + 树核心差异
  • B + 树:更新原地覆盖磁盘页,随机写多,写入吞吐低;查询快;适合在线业务库 MySQL。
  • LSM 树:全部顺序写,无随机磁盘修改,百万级写入吞吐;查询需要遍历多文件,读放大;适合海量日志、离线宽表 HBase。

2. 物理文件存储结构 HFile

每个列族独立生成 HFile,文件内部有序: RowKey 升序 → 同一行内列族有序 → 列名有序 → 多版本时间戳倒序。 文件自带索引块,支持 RowKey 快速随机查 Get、区间 Scan。

3. 分布式分片:Region 区间分片

一张大表按 RowKey 切割多个 Region,每个 Region 由一台 RegionServer 管理:

  • 分片规则:区间分片(0~1000,1000~2000),不同于 Redis/Mongo 哈希分片; 优势:支持大范围连续扫描,非常适合时序、有序流水数据; 劣势:RowKey 设计不当会出现热点 Region(大量数据集中一个分片)。

四、HBase 四大独有底层能力(其他数据库无法替代)

1. 天然多版本并发控制(基于 Timestamp)

每一个 Cell 自带时间戳,同一行同一列自动保存多份历史数据:

  • 查询可指定读取某一历史版本;
  • 支持设置 TTL,旧版本自动过期清理; 埋点、时序数据、变更记录场景刚需。

2. 极致稀疏宽表,动态无限列

建表只需要定义列族,列可以写入时随意新增,一行可以拥有几十万不同列; 对于用户行为、设备指标、实时埋点这种「每行字段完全不一样」的数据,存储压缩率远高于 MySQL/Mongo。

3. 万亿级海量数据存储,无限横向扩容

依托 HDFS 分布式存储,单表轻松支撑千亿行、PB 级数据; MySQL 分库分表到一定量级成本极高,Redis 受内存成本限制,Mongo 单集群存储上限远低于 HBase。

4. 高吞吐实时写入,适配海量日志

LSM 顺序写架构,每秒百万条写入无压力,适合实时数据流、Flink/Spark 实时数仓落地存储层。

五、区分:HBase 宽列存储 VS ClickHouse 纯列式 OLAP

很多人混淆两者,底层模型完全不同:

1. HBase(宽列 / 列族 NoSQL,OLTP 实时读写

  • 拆分维度:按行区间分 Region,列族物理隔离
  • 读写场景:随机单行 Get、区间 Scan、实时写入;
  • 索引:仅 RowKey 有序主键,无二级索引;
  • 存储引擎:LSM-Tree;
  • 适用:实时埋点、时序设备数据、海量用户宽表、离线大表存储。

2. ClickHouse(纯列式 OLAP 分析库

  • 拆分维度:按字段横向切割,同一字段全部数据放一块;
  • 读写场景:批量导入、海量聚合统计、报表分析;
  • 短板:单行随机查询极慢,不适合实时更新;
  • 存储引擎:列式压缩、分块存储;
  • 适用:离线日志统计、大盘多维分析、数仓查询。

六、五大存储模型完整本质横向对比(Redis / Mongo / MySQL / ES / HBase)

数据库核心底层结构数据模型读写优势核心短板核心场景
Redis内存哈希表一维 KV 黑盒内存精准查询极致快无法过滤内部字段、内存成本高缓存、分布式锁、计数器
MongoDBB 树正排单文档 JSON灵活嵌套、多维字段查询海量全文检索弱、超大文档更新差业务可变结构数据、中小量存储
MySQLB + 树行存二维强 Schema 关系表多表 JOIN、完整 ACID 事务海量写入、稀疏宽表、模糊检索差核心业务、订单、金融事务主库
Elasticsearch倒排索引 + 正排分词文档全文检索、相关性打分、多维聚合更新写放大、无强事务商品搜索、全文检索、日志检索
HBaseLSM-Tree 宽列列族有序多维 KV 宽表万亿级海量存储、高吞吐写入、有序区间扫描、稀疏数据无二级索引、复杂查询弱、运维重海量埋点、时序数据、超大宽表离线存储

七、HBase 天生优缺点(全部源于 LSM + 列族有序 KV 模型)

核心优势

  1. 支持 PB 级、万亿行超大规模数据,分布式无限扩容;
  2. LSM 顺序写入,超高吞吐,适配实时数据流;
  3. 行有序,支持高效区间扫描,完美适配时序数据;
  4. 稀疏宽表,动态列,多版本原生支持;
  5. 基于 HDFS,数据多副本,极高存储可靠性。

固有短板(模型无法根治)

  1. 仅 RowKey 主键查询高效,无成熟二级索引,按普通字段过滤必须全表 Scan;
  2. 读放大:查询需要合并多个 HFile,复杂查询性能一般;
  3. 不支持事务、JOIN、复杂聚合,计算能力弱,依赖 Spark/Flink 计算引擎;
  4. 运维复杂,依赖 HDFS、Zookeeper,集群维护成本高;
  5. 单行随机查询延迟高于 Mongo/Redis,不适合低延迟在线业务。

八、三层认知升华,吃透宽列存储本质

第一层(表层认知)

HBase 是大数据组件,存海量日志,一张表能存万亿行,支持很多动态列。

第二层(开发中层)

底层 LSM 树,数据有序存在 HDFS,按 RowKey 区间分片 Region;列族物理隔离,支持多版本、TTL;适合实时数据流落地,不适合在线复杂查询。

第三层(底层本质认知)

  1. HBase 本质是分布式有序多维 KV 存储,是一维 Redis KV 的扩展,通过 RowKey + 列族 + 列名扩展出宽表能力;
  2. LSM 树是它的核心取舍:放弃实时随机更新性能,换取海量数据高吞吐写入与磁盘持久化;
  3. 选型判断标准:
    • 数据量亿级以上、稀疏多列、大量顺序写入、需要按主键区间遍历 → HBase 最优;
    • 低延迟在线查询、多字段筛选、事务业务 → MySQL/Mongo;
    • 全文检索、模糊搜索 → ES;
    • 热点高速缓存 → Redis;
    • 离线批量统计分析 → ClickHouse/Hive。

补充完整互联网分层存储全景

一套大数据全链路分层各司其职:

  1. MySQL:核心在线业务交易库
  2. Redis:热点高速缓存
  3. MongoDB:中等量级灵活结构业务数据
  4. ES:全文检索、日志检索
  5. HBase:海量实时埋点、时序宽表存储
  6. ClickHouse/Hive:离线数据仓库、多维统计分析
内容概要:本研究针对微电网在遭受拒绝服务(DoS)攻击时面临的功率分配不均与电能质量问题,提出了一种兼顾功率精确均分与电压频率质量恢复的抗攻击混合动态事件触发二次控制策略。该策略通过设计新型混合动态事件触发机制,有效减少控制器与分布式单元间的网络通信负担,同时增强系统对DoS攻击的鲁棒性。研究构建了完整的微电网二次控制框架,整合了分布式协同控制算法与事件触发通信机制,在保证系统稳定性的同时,实现了对频率、电压偏差的快速调节和有功/无功功率的精确分配。通过Simulink平台进行仿真实验,验证了所提方法在遭受DoS攻击及正常运行工况下均能有效维持微电网的稳定运行与高质量电能输出。; 适合人群:具备电力系统自动化、分布式控制或微电网相关基础知识,从事新能源、智能电网领域研究的研发人员及高年级研究生。; 使用场景及目标:① 解决微电网在通信受限及网络攻击场景下的协同控制难题;② 实现微电网在异常工况下功率均分与电能质量的双重优化;③ 为设计高安全性、高可靠性的智能微电网控制系统提供理论依据与仿真验证方案。; 阅读建议:本资源侧重于控制策略的设计与仿真验证,建议读者结合微电网基础理论与Simulink仿真技术,深入理解事件触发机制与抗DoS攻击控制算法的实现细节,并动手复现仿真案例以加深对系统动态性能与鲁棒性的认识。
内容概要:本文围绕《【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)》展开,系统阐述了采用粒子群优化算法(PSO)对风能与水力发电系统进行联合优化调度的研究方法与技术路径。研究聚焦于构建多能源互补协调的优化模型,详细论述了目标函数的设计、系统约束条件的处理、算法求解流程及收敛性分析,并通过Matlab编程实现了完整的仿真验证过程,有效提升了可再生能源系统的运行效率与稳定性。该工作属于电力系统智能优化领域,强调对高水平期刊论文的高精度复现,兼具理论深度与工程实用性,适用于科研复现、学术研究与教学参考。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源优化调度、智能算法应用的工程技术人员。; 使用场景及目标:①用于复现《太阳能学报》等高水平期刊中关于风-水电联合调度的EI/SCI论文;②掌握粒子群算法在多源协同优化中的建模、编码与求解关键技术;③辅助完成学位论文、科研项目申报或学术竞赛中的仿真建模任务; 阅读建议:建议结合文中提供的网盘资源下载完整代码与文档资料,按照目录结构循序渐进学习,重点关注算法实现细节、电力系统建模逻辑与参数设置方法,同时可延伸学习灰狼优化算法、YALMIP工具包等先进优化技术,以全面提升科研仿真与创新能力。
内容概要:本文聚焦“基于源网荷储一体化的配电网协同优化研究”,提出一种面向高渗透率电动汽车接入场景的双层优化模型,并采用Matlab实现完整的仿真与求解。研究系统整合电源、电网、负荷与储能大环节,构建多时段、多约束条件下的协同调度框架,涵盖电动汽车有序充电、V2G(车网互动)技术、分布式能源并网、无功优化及储能协同配置等关键要素。通过引入二阶锥松弛或凸规划方法对非线性模型进行线性化处理,有效提升优化求解效率与收敛性。同时,结合熵权法与模糊综合评价方法,建立多维度的配电网承载能力量化评估体系,实现对系统运行状态的科学评判。文中配套提供完整Matlab代码,具有较强的可复现性与工程应用价值,适用于科研仿真与实际项目开发。; 适合人群:具备电力系统分析基础和Matlab编程能力,从事新能源接入、智能配电网、综合能源系统优化等方向的研究生、科研人员及电力行业工程技术开发者。; 使用场景及目标:①用于高比例可再生能源与大规模电动汽车接入背景下配电网承载能力的量化评估;②实现源-网-荷-储多主体参与的协同优化调度建模与仿真分析;③支撑硕博学位论文撰写、高水平期刊论文结果复现及科研项目的算法验证与系统开发。; 阅读建议:建议结合文中提供的Matlab代码与相关参考文献同步研习,重点关注双层优化架构的设计逻辑、二阶锥松弛的数学处理技巧以及多指标综合评价体系的构建流程,建议动手调试代码以深入掌握模型实现细节与算法运行机制。
源码链接: https://pan.quark.cn/s/a4b39357ea24 DMA(直接内存访问)是计算机系统中一种关键的数据传输机制,它使得特定的硬件子系统得以直接对系统内存进行读写操作,无需CPU的介入。这种机制对于提高I/O操作的效能具有极其重要的作用,特别是在网络设备、存储设备等驱动程序的编写过程中占据着核心地位。Cache(缓存)则是一种用于暂存频繁访问的数据和指令的存储结构,其目的是减少处理器对主存储器的访问次数,进而增强系统的整体性能。然而,DMA和Cache之间存在着一致性的挑战,特别是在部分嵌入式系统中,DMA操作可能绕过Cache机制,从而引发数据不一致的情况,这就需要采取一系列策略来维护Cache的一致性。 在DMA的运作模式中,主要存在两种Cache一致性问题:流式DMA(streaming DMA)与一致性DMA(coherent DMA)。流式DMA通常应用于需要大量数据传输的场景,它不关注Cache的一致性,因此传输速度较快,但要求软件开发者自行管理数据的一致性。而一致性DMA则保证了在DMA传输期间,数据在Cache与主内存之间保持同步,通常适用于对一致性要求较高的应用场景。 在Linux内核中,为了有效管理DMA操作,提供了一系列接口函数。其中,一致性DMA接口负责维护数据的一致性,而流式DMA接口则提供了更快的传输速度,但要求开发者自行解决数据一致性的问题。开发者在选用这些接口时,必须依据硬件平台的特点和性能需求,选择合适的DMA模式。 Cache一致性的解决方案通常取决于硬件平台的属性。在某些先进的处理器架构中,Cache对程序员而言是透明的,即处理器与Cache控制器之间的交互对程序员不可见,从而简化了编程的复...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值