鸿蒙开发入坑篇(九):本地数据库 (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 机制

相关推荐
风哥2号3 分钟前
数据库教程FGMT21‑Oracle RAC+DG生产实战(1):Oracle19c/26ai for RHEL8/9安装配置+补丁
数据库·oracle
海鸥-w8 分钟前
事务四大特性
数据库
旺仔不是程序员12 分钟前
致命索引失效:索引列运算与函数索引不匹配
数据库·后端·面试
Htr_22 分钟前
Cortex 使用指南:开源 API 知识层
前端·数据库·人工智能·重构·计算机外设
颜颜yan_26 分钟前
Git Cola 鸿蒙 PC 版适配全记录:从 Qt 桌面工具到 ArkTS 原生应用
git·qt·harmonyos
Roadinforest1 小时前
NoSQL的最终一致性:真的可靠吗?
数据库·nosql
敲代码的嘎仔1 小时前
用 Redis 合并写 + DelayQueue 延迟检测,把视频播放进度写库频率降到 1/60
java·开发语言·数据库·redis·缓存·音视频·高并发
承渊政道1 小时前
Python IDLE鸿蒙PC适配全记录:用 ArkUI 重建编辑、运行、Shell 与基础调试闭环
python·microsoft·harmonyos·鸿蒙系统·pc端
User_芊芊君子2 小时前
RapidSVN 鸿蒙 PC 适配全记录:用 ArkUI 重建工作台,打通本地 SVN 操作闭环
华为·svn·harmonyos
lqj_本人2 小时前
WinMerge 鸿蒙 PC 适配全记录:以 Qt 重建桌面外壳,打通文件与文件夹差异闭环
qt·华为·harmonyos