鸿蒙开发入坑篇(九):本地数据库 (RDB) 深度解析

可以体验下鸿蒙Ai:CodeArts Doer代码智能体

🔗 项目地址https://github.com/briefness/HarmonyDemo
更新说明 :本文将介绍 RDB 的 API,以及 SQLite 底层的 B-Tree 索引WAL 机制。

一、理论基础:数据库为什么快?

1.1 B-Tree 索引

为什么在百万条数据中查询 ID 只需要几毫秒?

因为 RDB (基于 SQLite) 使用 B-Tree 结构存储索引。
key < 50
key >= 50
1-25
26-49
50-75
76-100
根节点
子节点 A
子节点 B
数据块 1
数据块 2
数据块 3
数据块 4

  • 它是一种平衡树结构。
  • 查找时间复杂度为 O(log N)
  • 最佳实践 : 经常作为查询条件的字段(如 userId, createTime),建议创建 Index。

1.2 WAL (Write-Ahead Logging)

SQLite 默认开启 WAL 模式。

  • 原理 : 修改数据时,不直接改原文件 db,而是先追加写入日志文件 db-wal
  • 优势: 读写完全并发。写操作不会阻塞读操作 (No Locking)。
  • 这保证了后台数据同步时不阻塞 UI 读取。

WAL 文件 原始 DB 后台线程 (写) UI 线程 (读) WAL 文件 原始 DB 后台线程 (写) UI 线程 (读) 写入快 (顺序 IO) 读取不被阻塞 1. 追加新页 2. 读取旧页 3. 检查点回写 (空闲时)

二、核心概念:谓词 (Predicates)

RdbPredicates 是 SQL WHERE 子句的封装。

typescript 复制代码
// SELECT * FROM TASK WHERE ID = 5 AND DONE = 1
let predicates = new relationalStore.RdbPredicates('TASK');
predicates.equalTo('ID', 5).and().equalTo('DONE', 1);

三、核心 API 流程

3.1 初始化 (init)

typescript 复制代码
const store = await relationalStore.getRdbStore(context, {
  name: 'TaskStore.db',
  securityLevel: relationalStore.SecurityLevel.S1 // 数据安全等级,S1-S4
});

3.2 游标 (ResultSet)

查询返回的 ResultSet 是一个游标,指向数据行的前一行

  • 注意 : ResultSet 持有资源,使用完毕必须 close(),以免耗尽连接池。

四、常见问题

  1. 异步 : RDB 的 I/O 是异步的,必须 await
  2. Boolean 映射: SQLite 不支持 Boolean,通常使用 Integer (0/1)。
  3. 主键自增 : 推荐 ID INTEGER PRIMARY KEY AUTOINCREMENT

五、总结

掌握 RDB 是处理复杂业务数据的基础。

  • 理解 B-Tree,知道何时建索引。
  • 理解 WAL,知道为什么读写互不干扰。

下一篇,将探讨 状态管理 (State Management) V2 版本的 Proxy 机制

相关推荐
A.说学逗唱的Coke2 分钟前
【数据库专题】ClickHouse 深度实战:从列式存储原理到 PB 级海量日志与可观测性分析
数据库·clickhouse·硬件架构
超爱西西鸭4 分钟前
ArkTS延安精神学习应用:四版块 + 三组展开状态 + 大事记时间轴
学习·华为·harmonyos·鸿蒙
佳&弥20 分钟前
数据库提权
服务器·数据库·安全·web安全·网络安全
智购科技自动售货机工厂26 分钟前
2026自动售货机电机驱动芯片选型:从L298N到DRV8870的工程实践~YH
大数据·开发语言·数据库·人工智能·单片机·嵌入式硬件·scikit-learn
国科安芯35 分钟前
ASL3159S:把精密信号的“破音“挡在切换之外的 0.9Ω 开关
服务器·网络·数据库·架构·状态模式·抗辐射加固
大锅盖142 分钟前
ArkUI 深色能量风布局实战:健身运动行业·多场景训练助手·七 Tab 异构布局·Canvas 数据可视化全解析
华为·harmonyos
克里斯蒂亚诺更新1 小时前
win下如何将redis自启动
数据库·redis·缓存
青禾8371 小时前
MySQL 数据库完全指南:DDL、DML、DCL 与用户权限管理
数据库·oracle
tachibana21 小时前
大语言模型基础
数据库·人工智能·语言模型·自然语言处理·大模型·llm
小王C语言1 小时前
MySQL 事务:事务自动提交、查看/修改事务隔离级别、读未提交(RU)、读提交(RC)、可重复读(RR)、串行化
数据库·mysql