- 从 rollback journal 到 WAL 的并发模型讲起,整理 journal_mode、synchronous、busy_timeout 与 checkpoint 的配置要点,并总结备份、长事务、网络文件系统等常见坑,附一份可直接使用的 SQLite 配置模板。 从 rollback journal 到 WAL 的并发模型讲起,整理 journal_mode、synchronous、busy_timeout 与 checkpoint 的配置要点,并总结备份、长事务、网络文件系统等常见坑,附一份可直接使用的 SQLite 配置模板。
- 摘要手里服务一多,备份最容易长成两种极端:要么每台机器一个整机打包,恢复时全有或全无;要么全靠“我记得要备”,出事才想起来。我现在的做法是按服务分路备份:四个服务、四条备份链路,各自只备自己恢复时真正需要的东西,全部每天凌晨跑一次,同一份包写到两家对象存储,14 天保留,成功静默、失败才告警。这篇文章记录这四条链路分别在备什么、怎么保证拷出来的数据库是一致的、以及双写和保留期背后的取舍。一、... 摘要手里服务一多,备份最容易长成两种极端:要么每台机器一个整机打包,恢复时全有或全无;要么全靠“我记得要备”,出事才想起来。我现在的做法是按服务分路备份:四个服务、四条备份链路,各自只备自己恢复时真正需要的东西,全部每天凌晨跑一次,同一份包写到两家对象存储,14 天保留,成功静默、失败才告警。这篇文章记录这四条链路分别在备什么、怎么保证拷出来的数据库是一致的、以及双写和保留期背后的取舍。一、...
- 定时任务散落在多台机器,失败时只能翻日志,想知道“最近一周失败率有没有升高”很费劲。把每次执行写入 SQLite,单文件、零运维,足够支撑中小规模趋势查询。但上线前要把写入语义、索引和保留策略定清楚, 定时任务散落在多台机器,失败时只能翻日志,想知道“最近一周失败率有没有升高”很费劲。把每次执行写入 SQLite,单文件、零运维,足够支撑中小规模趋势查询。但上线前要把写入语义、索引和保留策略定清楚,
- 同一张表,两种写法,主键看起来都是整数自增,跑起来却完全是两回事。一个是 ROWID 本身,另一个只是建在 ROWID 之上的唯一索引。分不清这两者,插数据时主键冲突的报错、NULL 自动编号、查主键走不走索引,都会变得没法解释。 现象:写法只差一个词,行为差了一大截复现用内存库就行,不用建文件:CREATE TABLE a(id INTEGER PRIMARY KEY, name TEXT... 同一张表,两种写法,主键看起来都是整数自增,跑起来却完全是两回事。一个是 ROWID 本身,另一个只是建在 ROWID 之上的唯一索引。分不清这两者,插数据时主键冲突的报错、NULL 自动编号、查主键走不走索引,都会变得没法解释。 现象:写法只差一个词,行为差了一大截复现用内存库就行,不用建文件:CREATE TABLE a(id INTEGER PRIMARY KEY, name TEXT...
- 把多次写入放进同一个 with 块,不一定能保证异常时全部撤回。本文用 Python 标准库的四组本地合成实验,说明 sqlite3 的兼容事务模式与 executescript 如何改变提交边界,并给出一个可运行的批量写入例子。 把多次写入放进同一个 with 块,不一定能保证异常时全部撤回。本文用 Python 标准库的四组本地合成实验,说明 sqlite3 的兼容事务模式与 executescript 如何改变提交边界,并给出一个可运行的批量写入例子。
- 建表语句里写了 FOREIGN KEY,插入一条明显违规的数据,SQLite 却一声不吭收下了。删父表记录,子表孤儿数据还安稳躺着。约束写在表结构里,却像不存在一样。这个问题不挑版本,新手老手都踩过,根源不在建表语句,而在连接上。 现象:建表写了外键,违规数据照样入库复现用内存库就行,不用建文件:PRAGMA foreign_keys;CREATE TABLE author(id INTEG... 建表语句里写了 FOREIGN KEY,插入一条明显违规的数据,SQLite 却一声不吭收下了。删父表记录,子表孤儿数据还安稳躺着。约束写在表结构里,却像不存在一样。这个问题不挑版本,新手老手都踩过,根源不在建表语句,而在连接上。 现象:建表写了外键,违规数据照样入库复现用内存库就行,不用建文件:PRAGMA foreign_keys;CREATE TABLE author(id INTEG...
- 手持机恢复网络后仍显示调拨失败,后台可能已经建单。本文用 .NET 8 和 SQLite 复现提交后回包丢失,说明何时沿原操作重试、何时按回执查单、何时转人工复核。 手持机恢复网络后仍显示调拨失败,后台可能已经建单。本文用 .NET 8 和 SQLite 复现提交后回包丢失,说明何时沿原操作重试、何时按回执查单、何时转人工复核。
- 查询从几毫秒变成几秒,第一反应往往是“加个索引”。但索引加错位置,不仅没用,还会拖慢写入。动手之前,先让 SQLite 自己说出它打算怎么执行这条 SQL:EXPLAIN QUERY PLAN。先复现慢查询假设有一张订单表,数据量上了十万级:CREATE TABLE orders ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL... 查询从几毫秒变成几秒,第一反应往往是“加个索引”。但索引加错位置,不仅没用,还会拖慢写入。动手之前,先让 SQLite 自己说出它打算怎么执行这条 SQL:EXPLAIN QUERY PLAN。先复现慢查询假设有一张订单表,数据量上了十万级:CREATE TABLE orders ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL...
- WAL 模式到底解决了什么、并发上限在哪、以及那些「必须换数据库」的真实阈值。 WAL 模式到底解决了什么、并发上限在哪、以及那些「必须换数据库」的真实阈值。
- 一张用户表,name 列上建了索引,查 WHERE name LIKE '张%' 很快,改成 WHERE name LIKE '%张%' 就突然变慢,数据量一上来能差出几十倍。SQL 只改了一个百分号的位置,索引却像不存在了一样。这篇笔记用本地 :memory: 数据库把这个现象复现出来,定位到 LIKE 能不能走索引的三条硬条件,再给出每种写法的修法,全部命令都可以直接复制验证。 现象:前... 一张用户表,name 列上建了索引,查 WHERE name LIKE '张%' 很快,改成 WHERE name LIKE '%张%' 就突然变慢,数据量一上来能差出几十倍。SQL 只改了一个百分号的位置,索引却像不存在了一样。这篇笔记用本地 :memory: 数据库把这个现象复现出来,定位到 LIKE 能不能走索引的三条硬条件,再给出每种写法的修法,全部命令都可以直接复制验证。 现象:前...
- 很多刚上手后端或数据分析的朋友,一提到「数据库」就想到装 MySQL、配账号、建连接池,其实如果数据量不大、只有单机访问,SQLite 往往是更合适的选择:它不是「简化版数据库」,而是一个嵌入式的完整关系数据库,整个库就是磁盘上的一个文件, 很多刚上手后端或数据分析的朋友,一提到「数据库」就想到装 MySQL、配账号、建连接池,其实如果数据量不大、只有单机访问,SQLite 往往是更合适的选择:它不是「简化版数据库」,而是一个嵌入式的完整关系数据库,整个库就是磁盘上的一个文件,
- 在 SQLite 中,表里写了 REFERENCES,不代表每个连接都会执行外键检查。连接上的设置不同,同一张表就可能同时接受和拒绝无效引用。还有一个容易忽略的地方:事务中执行 PRAGMA foreign_keys = ON 不会报错,但也不会改变设置。如果 SQLite 编译时没有包含外键支持,或者读回的设置不是 1,则不能依赖外键约束。下面用两个连接演示这个区别。实测环境为 Windo... 在 SQLite 中,表里写了 REFERENCES,不代表每个连接都会执行外键检查。连接上的设置不同,同一张表就可能同时接受和拒绝无效引用。还有一个容易忽略的地方:事务中执行 PRAGMA foreign_keys = ON 不会报错,但也不会改变设置。如果 SQLite 编译时没有包含外键支持,或者读回的设置不是 1,则不能依赖外键约束。下面用两个连接演示这个区别。实测环境为 Windo...
- 一、场景:先说清约束,再谈方案这篇文章的背景是一类很常见的单机边缘设备:门店收银终端、车间巡检平板、野外采集仪。它们平时可能只有间歇网络,甚至一整天都离线,但业务不能停:开单、巡检、采样都必须先落到本地,等网络恢复后再同步到云端。这类系统有三个硬约束。第一,写入不能丢,断电、闪退、磁盘写满都不能让已经确认的业务凭空消失。第二,同步不能重复扣账、重复开单,网络抖动导致的重发必须被识别为同一笔... 一、场景:先说清约束,再谈方案这篇文章的背景是一类很常见的单机边缘设备:门店收银终端、车间巡检平板、野外采集仪。它们平时可能只有间歇网络,甚至一整天都离线,但业务不能停:开单、巡检、采样都必须先落到本地,等网络恢复后再同步到云端。这类系统有三个硬约束。第一,写入不能丢,断电、闪退、磁盘写满都不能让已经确认的业务凭空消失。第二,同步不能重复扣账、重复开单,网络抖动导致的重发必须被识别为同一笔...
- 在独立的 SQLite 练习库中模拟两次余额更新,观察事务提交和回滚,并理解实际应用中的错误处理。 在独立的 SQLite 练习库中模拟两次余额更新,观察事务提交和回滚,并理解实际应用中的错误处理。
- 同一张表,同一批名字,换一个 COLLATE,ORDER BY 的结果就变了。表里存着 apple、Banana、APPLE、banana、Cherry、cherry 这几个词,按默认排序跑一遍,再按 NOCASE 跑一遍,两份结果的第一行就不一样。数据没有改,SQL 除了 COLLATE 什么都没动,排序却像换了规则。这篇笔记用本地 :memory: 数据库把这个现象复现出来,定位到 BI... 同一张表,同一批名字,换一个 COLLATE,ORDER BY 的结果就变了。表里存着 apple、Banana、APPLE、banana、Cherry、cherry 这几个词,按默认排序跑一遍,再按 NOCASE 跑一遍,两份结果的第一行就不一样。数据没有改,SQL 除了 COLLATE 什么都没动,排序却像换了规则。这篇笔记用本地 :memory: 数据库把这个现象复现出来,定位到 BI...
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签