写点什么

HarmonyOS NEXT 中级开发笔记:基于 HarmonyOS Design 的图片生成应用数据库设计实践

作者:bianchengyishu
  • 2025-03-31
    广东
  • 本文字数:1540 字

    阅读完需:约 5 分钟

最近在尝试将一款图片生成应用适配到 HarmonyOS NEXT 平台,记录下数据库模块的开发过程。HarmonyOS Design 的设计理念强调简洁高效,这对数据层设计提出了更高要求。

数据库选型与设计

根据 HarmonyOS NEXT 的 API12 规范,我们选择使用轻量级的关系型数据库 @ohos.data.relationalStore。图片生成应用主要需要存储两类数据:用户生成记录和模型配置参数。

typescript

// 数据库初始化import relationalStore from '@ohos.data.relationalStore';
const STORE_CONFIG = { name: 'ImageGenDB.db', securityLevel: relationalStore.SecurityLevel.S1};
let rdbStore;async function initDB() { try { rdbStore = await relationalStore.getRdbStore(globalThis.context, STORE_CONFIG); await rdbStore.executeSql(` CREATE TABLE IF NOT EXISTS generation_records ( id INTEGER PRIMARY KEY AUTOINCREMENT, prompt TEXT NOT NULL, negative_prompt TEXT, style_id INTEGER, generate_time DATETIME DEFAULT (datetime('now','localtime')), image_uri TEXT, FOREIGN KEY (style_id) REFERENCES style_params(id) )`);
await rdbStore.executeSql(` CREATE TABLE IF NOT EXISTS style_params ( id INTEGER PRIMARY KEY AUTOINCREMENT, style_name TEXT UNIQUE, cfg_scale REAL DEFAULT 7.0, steps INTEGER DEFAULT 30, sampler TEXT DEFAULT 'euler_a' )`); } catch (err) { console.error(`DB init failed: ${err}`); }}
复制代码

数据操作封装

遵循 HarmonyOS Design 的流畅性原则,我们对常用操作进行了封装:

typescript

// 插入生成记录async function insertGeneration(prompt: string, imageUri: string, styleId?: number) {  const valueBucket = {    'prompt': prompt,    'image_uri': imageUri,    'style_id': styleId || null  };  try {    const insertId = await rdbStore.insert('generation_records', valueBucket);    return insertId;  } catch (err) {    console.error(`Insert failed: ${err}`);    return -1;  }}
// 分页查询历史记录async function queryHistory(page: number, pageSize: number = 10) { const offset = (page - 1) * pageSize; const predicates = new relationalStore.RdbPredicates('generation_records'); predicates.orderByDesc('generate_time') .offset(offset) .limit(pageSize); try { const result = await rdbStore.query(predicates, ['id', 'prompt', 'image_uri', 'generate_time']); return result; } catch (err) { console.error(`Query failed: ${err}`); return []; }}
复制代码

性能优化考虑

1. 图片 URI 采用相对路径存储,实际文件通过 @ohos.file.fs 管理

2. 高频查询字段建立了索引

3. 批量操作使用事务处理

typescript

async function batchInsertStyles(styles: Array<Object>) {  await rdbStore.beginTransaction();  try {    for (const style of styles) {      await rdbStore.insert('style_params', style);    }    await rdbStore.commit();  } catch (err) {    await rdbStore.rollback();    console.error(`Batch insert failed: ${err}`);  }}
复制代码

总结

在 HarmonyOS NEXT 上开发数据库模块,需要特别注意 API12 的变更点,比如权限管理和后台任务限制。HarmonyOS Design 提倡的简洁性也体现在数据层设计上 - 避免过度抽象,保持合理的范式级别。下一步需要测试大数据量下的性能表现,并考虑是否需要引入缓存层。

 

用户头像

还未添加个人签名 2025-03-23 加入

还未添加个人简介

评论

发布
暂无评论
HarmonyOS NEXT 中级开发笔记:基于HarmonyOS Design的图片生成应用数据库设计实践_HarmonyOS NEXT_bianchengyishu_InfoQ写作社区