ArkData——数据的坚盾(2) 原创

因为活着就一定行
发布于 2024-11-28 10:33
浏览
0收藏

咱们设想一下,如果你的手机突然停止工作,所有珍贵的联系人信息、精心安排的日程瞬间消失无踪,那种失落感和不便难以言喻。这是 ArkData 解决的问题所在。它不仅仅是一款安全工具,更像是一位守护者,确保无论面对何种挑战——无论是硬件故障导致的数据丢失、存储空间告急还是意外断电等情况——你的宝贵数据都能得到妥善保护。通过提供包括自动备份与恢复功能、先进的数据库加密技术、智能的数据分类分级管理以及采用E类高强度加密算法来增强安全性等强大特性,ArkData旨在成为用户数字生活最可靠的后盾,让每个人都能安心享受科技带来的便利而不必担心重要资料的安全。

备份与恢复:数据的时光机

  • 备份 就是给数据来个快照,万一数据出问题了,就能用这个快照恢复原貌。
  • 恢复 就是把快照里的数据再变回现实,让一切如同未曾发生。

数据库加密:数据的保险箱

当数据库里存了一些不能让别人知道的秘密,比如密码或者财务数据,就可以用数据库加密这个保险箱把它们锁起来,只有知道密码的人才能打开。

数据分类分级:数据的保镖

数据在不同设备之间传输时,ArkData会根据数据的重要性和设备的安全性来决定哪些数据能过,哪些数据不能过,这就像是给数据配了个保镖。

E类加密数据库:数据的终极防护

E类数据库就像是个超级保险箱,就算手机被锁屏了,它也能保护里面的敏感信息。如果满足一定条件,比如多次输错密码,它就会自我销毁,保护数据不被泄露。

数据的守护秘籍

在开始修炼这些秘籍之前,我们得先了解一些基本概念。

数据库备份与恢复

  • 数据库备份 就像是给数据库拍个快照,随时都能用这个快照恢复数据库。
  • 数据库恢复 就是把备份的数据拿出来,恢复到数据库中。

数据库加密

数据库加密就是给数据库加个锁,只有正确的钥匙才能打开。

数据库分类分级

这就像是给数据贴上标签,根据标签和设备的安全性来决定数据的去留。

数据的守护行动

键值型数据库的守护

备份数据

首先,我们需要一个数据库管理器,就像是我们的数据库指挥官,它会帮助我们管理所有的数据库操作。

// 导入必要的模块
import { distributedKVStore } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';

// 创建KVManager和KVStore
let dbManager: distributedKVStore.KVManager;
let dbStore: distributedKVStore.SingleKVStore | undefined;

try {
     dbManager = distributedKVStore.createKVManager({ context: getContext(), bundleName: 'com.example.datamanagertest' });
     console.log('KVManager创建成功。');
     const storeOptions: distributedKVStore.Options = {
       createIfMissing: true,
       encrypt: true,
       backup: false,
       autoSync: false,
       kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION,
       securityLevel: distributedKVStore.SecurityLevel.S1
     };
     dbManager.getKVStore<distributedKVStore.SingleKVStore>('storeID', storeOptions, (err, store) => {
       if (err) {
         console.error(`获取KVStore失败。代码:${err.code}, 消息:${err.message}`);
         return;
       }
       console.log('获取KVStore成功。');
       dbStore = store;
     });
} catch (e) {
     let error = e as BusinessError;
     console.error(`创建KVManager失败。代码:${error.code}, 消息:${error.message}`);
}

插入数据

接下来,我们可以往数据库里存点东西,比如一些重要的信息。

const testKey = 'test_key';
const testValue = 'test_value';

try {
     dbStore?.put(testKey, testValue, (err) => {
       if (err !== undefined) {
         console.error(`插入数据失败。代码:${err.code}, 消息:${err.message}`);
         return;
       }
       console.log('数据插入成功。');
     });
} catch (e) {
     let error = e as BusinessError;
     console.error(`发生意外错误。代码:${error.code}, 消息:${error.message}`);
}

备份数据

然后,我们可以给数据库做个备份,以防万一。

const backupFileName = 'backup001';

try {
     dbStore?.backup(backupFileName, (err) => {
       if (err) {
         console.error(`备份数据失败。代码:${err.code}, 消息:${err.message}`);
       } else {
         console.log('数据备份成功。');
       }
     });
} catch (e) {
     let error = e as BusinessError;
     console.error(`发生意外错误。代码:${error.code}, 消息:${error.message}`);
}

删除数据

如果有些数据不再需要,我们可以把它们删掉。

try {
     dbStore?.delete(testKey, (err) => {
       if (err !== undefined) {
         console.error(`删除数据失败。代码:${err.code}, 消息:${err.message}`);
         return;
       }
       console.log('数据删除成功。');
     });
} catch (e) {
     let error = e as BusinessError;
     console.error(`发生意外错误。代码:${error.code}, 消息:${error.message}`);
}

恢复数据

如果数据被误删或者损坏,我们可以用备份来恢复数据。

const backupFileName = 'backup001';

try {
     dbStore?.restore(backupFileName, (err) => {
       if (err) {
         console.error(`恢复数据失败。代码:${err.code}, 消息:${err.message}`);
       } else {
         console.log('数据恢复成功。');
       }
     });
} catch (e) {
     let error = e as BusinessError;
     console.error(`发生意外错误。代码:${error.code}, 消息:${error.message}`);
}

删除备份

如果备份占用了太多空间,我们可以删掉它们。

const filesToDelete = ['backup001'];

try {
     dbStore?.deleteBackup(filesToDelete).then((data) => {
       console.log(`成功删除备份。文件名: ${data[0]}, 结果: ${data[1]}.`);
     }).catch((err: BusinessError) => {
       console.error(`删除备份失败。代码:${err.code}, 消息:${err.message}`);
     });
} catch (e) {
     let error = e as BusinessError;
     console.error(`发生意外错误。代码:${error.code}, 消息:${error.message}`);
}

关系型数据库的守护

手动备份

数据库操作或者存储过程中,有可能会因为各种原因发生非预期的数据库损坏等异常情况,可以根据需要使用关系型数据库的备份能力,以便在数据库损坏时,可靠高效地恢复数据保证业务数据正常使用。

import { relationalStore } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo } from '@kit.CoreFileKit';

let relationalDB: relationalStore.RdbStore | undefined;

const dbConfig: relationalStore.StoreConfig = {
  name: 'relationalDB.db',
  securityLevel: relationalStore.SecurityLevel.S3,
  allowRebuild: true
};

relationalStore.getRdbStore(getContext(), dbConfig, (err, rdbStore) => {
  relationalDB = rdbStore;
  if (err) {
    console.error(`Failed to get RdbStore. Code:${err.code},message:${err.message}`);
    return;
  }
  console.log('Succeeded in getting RdbStore.');
  (relationalDB as relationalStore.RdbStore).backup("relationalDBBackup.db", (err: BusinessError) => {
    if (err) {
      console.error(`Failed to backup RdbStore. Code:${err.code}, message:${err.message}`);
      return;
    }
    console.log(`Succeeded in backing up RdbStore.`);
  });
});

数据库损坏重建

在创建或使用关系型数据库的过程中,如果抛出14800011异常错误码说明数据库发生损坏,此时需要重建数据库并恢复数据。

// 假设数据库损坏,需要重建
if (err.code === 14800011) {
  console.error('数据库损坏,需要重建');
  // 重建数据库逻辑
}

数据恢复

针对数据库损坏的情况,在数据库重建成功后,需要用提前备份好的数据进行数据恢复。

let backupPath = getContext().databaseDir + '/backup/relationalDBBackup.db';

try {
  if (!fileIo.access(backupPath)) {
    console.log("备份文件不存在");
    return;
  }
  (relationalDB as relationalStore.RdbStore).restore(backupPath);
  console.log('数据恢复成功');
} catch (e

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
收藏
回复
举报
回复
    相关推荐