HarmonyOS 应用开发中数据存储技术

292 阅读4分钟

一、轻量级键值存储

1. HarmonyOS

  • 技术名称:首选项(Preferences

  • 特点

    • 基于内存缓存 + 异步持久化(类似 Android 的 SharedPreferences)。
    • 单文件最大 16KB,适合高频小数据(如用户设置)。
    • 数据隔离在应用沙箱内。
  • API 示例

    let prefs = await dataPreferences.getPreferences(context, 'myPrefs');  
    await prefs.put('key', 'value');  
    

2. iOS

  • 技术名称UserDefaults

  • 特点

    • 基于 plist 文件存储键值对,支持基础数据类型。
    • 无严格大小限制,但大文件性能差。
    • 数据存储在应用沙箱的 Library/Preferences 目录。
  • API 示例

    UserDefaults.standard.set("value", forKey: "key")  
    UserDefaults.standard.synchronize() // 立即写入(iOS 12+ 已废弃)  
    

对比总结

特性HarmonyOS PreferencesiOS UserDefaults
存储引擎内存缓存 + 异步持久化plist 文件
性能高频读写优化小数据快,大数据慢
安全隔离沙箱隔离沙箱隔离
跨设备同步需结合分布式数据服务(DDS)需结合 iCloud(NSUbiquitousKeyValueStore)

二、文件存储

1. HarmonyOS

  • 技术实现

    • 通过 @ohos.file.fs API 操作沙箱目录(filesDircacheDir 等)。
    • 支持读写文本、二进制文件,需申请权限访问公共目录(如媒体库)。
  • 场景:用户生成的大文件(图片、日志)。

  • 代码示例

    let file = await fs.open(path, fs.OpenMode.READ_WRITE);  
    await fs.write(file.fd, buffer);  
    

2. iOS

  • 技术实现

    • 使用 FileManager 操作沙箱目录(DocumentsLibrary/Caches)。
    • 通过 UIDocument 封装复杂文件操作(版本控制、冲突处理)。
  • 场景:用户文档、缓存文件。

  • 代码示例

    let url = FileManager.default.urls(for: .documentDirectory, .userDomainMask).first!  
    let data = "Hello".data(using: .utf8)!  
    try data.write(to: url.appendingPathComponent("file.txt"))  
    

对比总结

特性HarmonyOS 文件存储iOS 文件存储
目录管理明确沙箱路径(filesDirFileManager 抽象路径
权限控制动态申请访问公共目录权限沙箱自动隔离,需权限访问相册等
加密支持需手动集成 cryptoFramework支持 Data Protection(硬件加密)

三、关系型数据库

1. HarmonyOS

  • 技术名称:关系型数据库(RDB)

  • 特点

    • 基于 SQLite,支持完整 SQL 语法。
    • 提供 RdbPredicates 链式查询构建器。
  • 代码示例

    const predicates = new dataRDB.RdbPredicates('user');  
    predicates.equalTo('name', 'Alice');  
    let resultSet = await rdbStore.query(predicates);  
    

2. iOS

  • 技术名称:Core Data / SQLite.swift

  • 特点

    • Core Data 是对象图管理框架,底层可选 SQLite、XML 等存储。
    • 直接使用 SQLite 需第三方库(如 SQLite.swift)。
  • 代码示例(Core Data):

    let request: NSFetchRequest<User> = User.fetchRequest()  
    request.predicate = NSPredicate(format: "name == %@", "Alice")  
    let users = try context.fetch(request)  
    

对比总结

特性HarmonyOS RDBiOS Core Data
ORM 支持需手动封装内置对象关系映射(ORM)
查询语法支持原生 SQL + 链式 API基于 NSPredicate
跨设备同步需结合分布式数据服务(DDS)需结合 CloudKit 或 iCloud

四、敏感数据加密存储

1. HarmonyOS

  • 技术名称:安全存储(Secure Storage)

  • 特点

    • 基于 TEE(可信执行环境)硬件加密。
    • 密钥由系统安全芯片管理,应用无法直接访问。
  • 代码示例

    // 加密数据  
    let cipher = cryptoFramework.createCipher('AES256|GCM|PKCS7');  
    await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key);  
    let encryptedData = await cipher.doFinal(data);  
    

2. iOS

  • 技术名称:Keychain Services

  • 特点

    • 基于 Secure Enclave 硬件加密。
    • 存储密码、证书等敏感信息,支持跨应用共享(配置 accessGroup)。
  • 代码示例

    let query: [String: Any] = [  
      kSecClass as String: kSecClassGenericPassword,  
      kSecAttrAccount as String: "user",  
      kSecValueData as String: "password".data(using: .utf8)!  
    ]  
    SecItemAdd(query as CFDictionary, nil)  
    

对比总结

特性HarmonyOS 安全存储iOS Keychain
加密级别TEE 硬件加密Secure Enclave 硬件加密
数据共享仅限同一应用支持跨应用(需配置权限)
管理方式系统托管密钥应用定义访问控制策略

五、分布式数据同步

1. HarmonyOS

  • 技术名称:分布式数据服务(DDS)

  • 特点

    • 基于分布式软总线自动发现设备,支持跨设备数据同步。
    • 提供冲突解决机制(如时间戳最新优先)。
  • 代码示例

    let kvStore = await kvManager.getKVStore('storeId', { autoSync: true });  
    await kvStore.put('key', 'value'); // 自动同步到其他设备  
    

2. iOS

  • 技术实现

    • 使用 CloudKit 或 NSUbiquitousKeyValueStore 实现 iCloud 同步。
    • 需用户登录 iCloud 账户,依赖网络状态。
  • 代码示例(CloudKit):

    let record = CKRecord(recordType: "User")  
    record["name"] = "Alice"  
    CKContainer.default().privateCloudDatabase.save(record) { _, _ in }  
    

对比总结

特性HarmonyOS DDSiOS iCloud 同步
同步机制局域网直连 + 自动发现设备依赖 iCloud 服务器中转
实时性低延迟(局域网内)依赖网络延迟
开发复杂度声明式 API,集成简单需处理网络错误、冲突解决

六、总结

1. 核心差异

  • 安全加密:HarmonyOS 依赖 TEE,iOS 依赖 Secure Enclave,两者均为硬件级安全。
  • 跨设备同步:HarmonyOS 强调局域网直连,iOS 依赖云端(iCloud)。
  • ORM 支持:iOS 的 Core Data 更成熟,HarmonyOS 需手动封装或使用 ORM 库。

2. 高频问题

  1. “鸿蒙的分布式数据服务与 iCloud 有何本质区别?”

    • :DDS 基于分布式软总线实现设备直连,适合低延迟局域网场景;iCloud 依赖云端,适合广域网但需网络连接。
  2. “如何为 iOS 和鸿蒙设计一个跨平台加密存储方案?”

    • :在鸿蒙使用 Secure Storage + cryptoFramework,在 iOS 使用 Keychain + CryptoKit,通过抽象层统一接口。
  3. “HarmonyOS 的 RDB 与 Core Data 的优劣对比?”

    • :RDB 更接近原生 SQLite,适合复杂查询;Core Data 提供高级对象管理,但学习曲线陡峭。