ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

十二条备份记录走完全流程:鸿蒙备份导出种子数据与样例

十二条备份记录走完全流程:鸿蒙备份导出种子数据与样例 实例数据备份导出Backup技术双表种子、导出内容样例一、种子数据的设计目标实例 10 的种子数据要撑起「终端控制台 备份记录」页面设计目标12 条数据源记录backup_source 表有内容可导出——资产清单叙事华为手机、蓝牙耳机、运动鞋…4 条备份日志backup_log 有历史可展示——最近的 4 次备份json/csv 交替数据源叙事12 条「家庭资产」记录数码/服饰/食品/家居/美妆/图书六类导出 JSON 内容有可读性日志覆盖两种格式json 与 csv 各 2 条列表图标 交替。二、12 条数据源记录#名称分类金额备注时间偏移1华为 Mate 60 Pro数码6999旗舰手机30 天前2无线蓝牙耳机数码299降噪款28 天前3运动跑鞋服饰699缓震系列26 天前4羽绒服服饰1299加厚款24 天前5坚果礼盒食品159春节采购22 天前6进口巧克力食品89伴手礼20 天前7懒人沙发家居499客厅用18 天前8香薰蜡烛家居69助眠16 天前9保湿面霜美妆219秋冬款14 天前10口红美妆199经典色号12 天前11编程入门指南图书89技术书10 天前12科幻经典全集图书129收藏版8 天前数据源叙事一份「家庭资产清单」——从旗舰手机到科幻小说六类 12 件金额从 69 到 6999 跨度大。这份数据导出成 JSON 后内容有真实感不是 aaa/bbb 占位符恢复导入后能直观对比「备份前后的数据一致性」。三、4 条备份日志#文件名大小格式时间偏移1backup_a.json2048json7 天前2backup_b.csv1536csv5 天前3backup_c.json2100json3 天前4backup_d.csv1600csv1 天前日志设计json/csv 交替、大小 1.5~2.1KB接近 12 条数据的真实导出体积、时间覆盖最近 7 天——备份记录列表有「 」的图标交替时间显示有层次。四、代码实现双表种子constnowDate.now();constday86400000;// 1. 数据源 12 条constsourceSeed:SourceSeed[][/* 见第二节表格 */];for(constsofsourceSeed){constvalues:relationalStore.ValuesBucket{name:s.name,category:s.category,amount:s.amount,note:s.note,created_time:now-s.daysAgo*day,};awaitstore.insert(BackupDao.SOURCE_TABLE,values);}// 2. 备份日志 4 条constlogSeed:BackupSeed[][/* 见第三节表格 */];for(constsoflogSeed){constvalues:relationalStore.ValuesBucket{file_name:s.fileName,size:s.size,source_table:BackupDao.SOURCE_TABLE,backup_time:s.backupTime,type:s.type,};awaitstore.insert(BackupDao.TABLE,values);}hilog.info(DOMAIN,TAG,已填充数据源 12 条 备份日志 4 条种子数据);幂等判断与前面实例同款——查 backup_source 的 COUNT非空即返回。根表判断数据源表代表「种子已注入」。五、导出内容的真实样例12 条数据源导出成 JSON 的实际内容节选前 3 条[{id:1,name:华为 Mate 60 Pro,category:数码,amount:6999,note:旗舰手机,createdTime:1750000000000},{id:2,name:无线蓝牙耳机,category:数码,amount:299,note:降噪款,createdTime:1750000000000},{id:3,name:运动跑鞋,category:服饰,amount:699,note:缓震系列,createdTime:1750000000000}]导出成 CSV 的实际内容含表头id,name,category,amount,note,created_time 1,华为 Mate 60 Pro,数码,6999,旗舰手机,1750000000000 2,无线蓝牙耳机,数码,299,降噪款,1750000000000 3,运动跑鞋,服饰,699,缓震系列,1750000000000两种格式的对比演示JSON 结构清晰花括号嵌套、类型保留CSV 表格友好Excel 双击即开。读者点「导出 JSON」后用 Device File Explorer 打开沙箱文件看到的就是上面的内容。六、注入后的页面效果预测区块预期效果标题栏「数据源 12 条 · 备份 4 份」终端初始日志「 备份系统已就绪等待指令…」备份记录4 行backup_a.json2.0 KB、backup_b.csv1.5 KB…操作演示点「导出 JSON」→ 终端「✓ 已生成 backup_xxx.json约 2.1 KB」→ 记录列表变 5 行演示脚本进入页面 → 终端显示就绪 → 点「查看数据源」→ 终端逐行打印「[1] 华为 Mate 60 Pro | 数码 | ¥6999…」→ 点「导出 JSON」→ 「✓ 已生成 backup_xxx.json」→ 点「导出 CSV」→ 再生成一个 .csv → 点「♻️ 恢复导入」→ 「✓ 恢复完成共导入 12 条记录」→ 备份记录列表滚动增长。一条完整的「导出-恢复」演示路径。七、验证方法hilog 日志搜BackupDao看到「已填充数据源 12 条 备份日志 4 条种子数据」页面显示标题统计「12 条 / 4 份」、备份记录 4 行数据库直查SELECTCOUNT(*)FROMbackup_source;-- 12SELECTCOUNT(*)FROMbackup_log;-- 4SELECTtype,COUNT(*)FROMbackup_logGROUPBYtype;-- csv:2 json:2文件验证导出 JSON 后Device File Explorer 找到沙箱backup_xxx.json内容与第五节样例结构一致。八、FAQQ1种子里的备份文件backup_a.json 等在沙箱里真实存在吗A不存在——种子只在数据库里插了日志记录没有创建真实文件。页面删除这些备份时会尝试 unlink 文件文件不存在被 catch 吞掉日志「删除文件失败(可能不存在)」。种子日志是「模拟历史」真实备份doBackup才会创建真实文件。Q2为什么选「家庭资产」作为数据源叙事A备份场景的演示需要「值得备份的数据」——资产清单手机、沙发、书籍比随机数据更有「身家性命」的代入感。金额字段69~6999也让 CSV 导出有真实的数字列。Q3恢复导入后数据源的 id 会变化吗A会——恢复是「清空 重插」AUTOINCREMENT 生成新 id从 1 开始或继续递增。id 不保留是快照恢复的正常现象内容一致即可除非业务要求 id 稳定那需要显式插入 id 列。Q4CSV 里 created_time 是毫秒时间戳人能看懂吗A看不懂1750000000000但它是「机器可读」的原始值——CSV 给表格工具用时间列保留原始时间戳让排序/筛选可用。给人看的友好时间应在展示层转换。导出保留原始值展示层负责格式化。Q5备份日志的时间戳和文件名里的时间戳一致吗A种子数据里不完全一致backup_a.json 是模拟文件名真实备份doBackup两者一致文件名 backup_时间戳。种子模拟历史不必严格自洽真实流程必须自洽。九、文章小结本篇文章展示了实例 10 的种子数据12 条资产清单 4 条备份日志json/csv 交替。核心是「数据源叙事」值得备份的资产「日志模拟」历史备份记录让终端页面一开屏就有内容可导出、有历史可查看。导出内容的真实样例JSON/CSV为演示提供了「数据长什么样」的直观参照。下一篇10-5是实例 10 的收官文章展示 BackupPage 全量代码与运行效果。十、备份日志种子数据深度复盘10.1 四条备份日志种子全表备份日志的种子数据在此给出完整明细——备份名、数据源范围、备份时间、文件大小四要素齐备#备份名数据源范围备份时间文件大小格式1backup_a.jsonbackup_source 全部 12 条7 天前2048 Bjson2backup_b.csvbackup_source 全部 12 条5 天前1536 Bcsv3backup_c.jsonbackup_source 全部 12 条3 天前2100 Bjson4backup_d.csvbackup_source 全部 12 条1 天前1600 Bcsv四要素的设计逻辑备份名带扩展名——前端按扩展名选择列表图标/数据源范围固定为「全表 12 条」——备份的语义就是「整体快照」时间用「相对今天」生成now - daysAgo * day保证每次安装应用演示时备份记录都「新鲜」文件大小取「接近真实导出体积」的整数列表格式化后显示为 1.5 KB / 2.0 KB。10.2 种子设计复盘范围与时间分布数据源范围四条日志全部指向backup_sourceBackupDao.SOURCE_TABLE常量没有出现「导出时数据源为空」的边界情况——种子日志 种子数据源的「备份痕迹」两者必须配套注入否则列表会出现「有备份记录但内容对不上」的穿帮。时间分布复盘四个时间偏移是 7 / 5 / 3 / 1 天前——奇数间隔。为什么不用 4/3/2/1 这种等差序列因为真实用户的备份行为是「想起来才备份」等间隔是理想化的均匀节奏而 7/5/3/1 模拟了「上上周备份过、上周补了一次、前天又备份、昨天刚备完」的逐渐加密节奏——列表时间列显示「7 天前 / 5 天前 / 3 天前 / 1 天前」层次感比等间隔更真实。大小差异复盘json 两条2048 / 2100 B比 csv 两条1536 / 1600 B大约 30%——这是两种格式的固有差异JSON 每个字段都要写字段名:键 冒号 引号CSV 只有值本身用逗号分隔。同样的 12 条数据JSON 表达力强但体积大CSV 紧凑但可读性弱——种子的大小数字本身就演示了这个 trade-off。10.3 导出文件内容样例JSON 结构逐字段拆解这里给出「一条完整记录」的 JSON 结构与数据库列的对应关系[{id:1,name:华为 Mate 60 Pro,category:数码,amount:6999,note:旗舰手机,createdTime:1750000000000},{id:2,name:无线蓝牙耳机,category:数码,amount:299,note:降噪款,createdTime:1750000000000},{id:3,name:运动跑鞋,category:服饰,amount:699,note:缓震系列,createdTime:1750000000000}]字段映射name / category / amount / note与 backup_source 四列一一对应createdTime是created_time的驼峰化导出时把下划线键转成驼峰符合 JSON 惯例id保留原主键——导出的 JSON 是数据库行的直接投影恢复导入时按字段名重新组装 insert。类型保留amount是数字6999 不带引号、createdTime是数字时间戳、字符串都带引号——JSON 的「类型自描述」让它比 CSV 更适合作「可再解析的备份载体」。CSV 则把所有值都当文本恢复时需要parseInt还原类型。10.4 注入后的备份列表效果预测种子注入完成后备份记录列表的四行预期渲染效果行图标文件名格式化大小相对时间1backup_a.json2.0 KB7 天前2backup_b.csv1.5 KB5 天前3backup_c.json2.1 KB3 天前4backup_d.csv1.6 KB1 天前列表交互预测点击任意一行弹出操作菜单删除 / 查看内容点删除走「日志 文件」双删除——种子日志的文件并不存在删除时 catch 记录「删除文件失败(可能不存在)」但日志记录本身被删掉列表从 4 行变 3 行。种子日志的「删除容错」正是真实文件可能被手动清掉的兜底设计——双删除任何一步失败都不影响另一步。10.5 验证方法终端验证进入页面终端区显示「 备份系统已就绪等待指令…」备份记录区 4 行数据库直查DevEco 的 DB Inspector 或自查 SQLSELECTCOUNT(*)FROMbackup_source;-- 12SELECTCOUNT(*)FROMbackup_log;-- 4SELECTtype,COUNT(*)FROMbackup_logGROUPBYtype;-- csv:2 json:2SELECTfile_name,size,backup_timeFROMbackup_logORDERBYbackup_timeDESC;-- 4 行时间从近到远文件验证点「导出 JSON」后Device File Explorer 打开沙箱backup_xxx.json对照 10.3 的结构检查字段名与类型hilog 验证搜BackupDao日志「已填充数据源 12 条 备份日志 4 条种子数据」出现一次——幂等判断保证二次启动不重复注入。10.6 FAQQ1为什么备份日志种子只有 4 条而数据源有 12 条A备份日志是「操作历史」12 条会让页面显得臃肿4 条一屏内的滚动列表既展示了 json/csv 交替的图标效果又给「导出新增一条」留出增长空间——演示时备份记录从 4 行变 5 行、变 6 行滚动的过程本身就是演示内容。Q2种子的 backup_time 和 JSON 里记录的 createdTime 是一回事吗A不是。backup_time 是「备份动作发生的时间」日志字段createdTime 是「数据源记录被创建的时间」业务字段。种子日志的 backup_time 注入时刻往前推 7/5/3/1 天数据源的 createdTime 注入时刻往前推 30~8 天。两张表的时间语义不同不能混用。Q3恢复导入之后备份日志会变多还是变少A不变——恢复只操作 backup_source清空 重插backup_log 原样保留。所以恢复后备份记录列表还是 4 行或加上恢复前新导出的记录只是数据源 12 条的 id 被重建。备份日志是「审计轨迹」恢复不动历史。Q42048 B 这个大小是怎么定的A手工按真实导出估算——12 条记录每条 JSON 约 160~180 字节键名 值 引号合计约 2.0 KBCSV 每行约 120~130 字节合计约 1.5 KB。种子大小取「接近但不精确」的整数列表显示 2.0 KB / 1.5 KB 直观可信。真实备份doBackup会写实际字节数种子只是模拟。
返回列表