鴻蒙OS 分布式數(shù)據(jù)服務(wù)開(kāi)發(fā)指導(dǎo)

2020-09-18 17:49 更新

場(chǎng)景介紹

分布式數(shù)據(jù)服務(wù)主要實(shí)現(xiàn)對(duì)用戶設(shè)備中應(yīng)用程序的數(shù)據(jù)內(nèi)容的分布式同步。當(dāng)設(shè)備 1 上的應(yīng)用 A 在分布式數(shù)據(jù)庫(kù)中增、刪、改數(shù)據(jù)后,設(shè)備2上的應(yīng)用 A 也可以獲取到該數(shù)據(jù)庫(kù)變化??稍诜植际綀D庫(kù)、信息、通訊錄、文件管理器等場(chǎng)景中使用。

接口說(shuō)明

HarmonyOS 系統(tǒng)中的分布式數(shù)據(jù)服務(wù)模塊為開(kāi)發(fā)者提供下面幾種功能:

功能分類 接口名稱 描述
分布式數(shù)據(jù)庫(kù)創(chuàng)建、打開(kāi)、關(guān)閉和刪除。 isCreateIfMissing() 數(shù)據(jù)庫(kù)不存在時(shí)是否創(chuàng)建。
setCreateIfMissing(boolean isCreateIfMissing) 數(shù)據(jù)庫(kù)不存在時(shí)是否創(chuàng)建。
isEncrypt() 獲取數(shù)據(jù)庫(kù)是否加密。
setEncrypt(boolean isEncrypt) 設(shè)置數(shù)據(jù)庫(kù)是否加密。
getStoreType() 獲取分布式數(shù)據(jù)庫(kù)的類型。
setStoreType(KvStoreType storeType) 設(shè)置分布式數(shù)據(jù)庫(kù)的類型。
KvStoreType.DEVICE_COLLABORATION 設(shè)備協(xié)同分布式數(shù)據(jù)庫(kù)類型。
KvStoreType.SINGLE_VERSION 單版本分布式數(shù)據(jù)庫(kù)類型。
getKvStore(Options options, String storeId) 根據(jù)Options配置創(chuàng)建和打開(kāi)標(biāo)識(shí)符為 storeId 的分布式數(shù)據(jù)庫(kù)。
closeKvStore(KvStore kvStore) 關(guān)閉分布式數(shù)據(jù)庫(kù)。
deleteKvStore(String storeId) 刪除分布式數(shù)據(jù)庫(kù)。
分布式數(shù)據(jù)增、刪、改、查。 getStoreId() 根據(jù)配置構(gòu)造帳號(hào)鍵值數(shù)據(jù)庫(kù)管理類實(shí)例。
putBoolean(String key, boolean value)putInt(String key, int value)putFloat(String key, float value)putDouble(String key, double value)putString(String key, String value)putByteArray(String key, byte[] value)putBatch(List<Entry> entries) 插入和更新數(shù)據(jù)。
delete(String key)deleteBatch(List<String> keys) 刪除數(shù)據(jù)。
getInt(String key)getFloat(String key)getDouble(String key)getString(String key)getByteArray(String key)getEntries(String keyPrefix) 查詢數(shù)據(jù)。
分布式數(shù)據(jù)謂詞查詢。 select()reset()equalTo(String field, int value)equalTo(String field, long value)equalTo(String field, double value)equalTo(String field, String value)equalTo(String field, boolean value)notEqualTo(String field, int value)notEqualTog(String field, long value)notEqualTo(String field, boolean value)notEqualTo(String field, String value)notEqualTo(String field, double value)greaterThan(String field, int value)greaterThan(String field, long value)greaterThan(String field, double value)greaterThan(String field, String value)lessThan(String field, int value)lessThan(String field, long value)lessThan(String field, double value)lessThan(String field, String value)greaterThanOrEqualTo(String field, int value)greaterThanOrEqualTo(String field, long value)greaterThanOrEqualTo(String field, double value)greaterThanOrEqualTo(String field, String value)lessThanOrEqualTo(String field, int value)lessThanOrEqualTo(String field, long value)lessThanOrEqualTo(String field, double value)lessThanOrEqualTo(String field, String value)isNull(String field)orderByDesc(String field)orderByAsc(String field)limit(int number, int offset)like(String field, String value)unlike(String field, String value)inInt(String field, List<Integer> valueList)inLong(String field, List<Long> valueList)inDouble(String field, List<Double> valueList)inString(String field, List<String> valueList)notInInt(String field, List<Integer> valueList)notInLong(String field, List<Long> valueList)notInDouble(String field, List<Double> valueList)notInString(String field, List<String> valueList)and()or() 對(duì)于Schema數(shù)據(jù)庫(kù)謂詞查詢數(shù)據(jù)。
訂閱分布式數(shù)據(jù)變化。 subscribe(SubscribeType subscribeType, KvStoreObserver observer) 訂閱數(shù)據(jù)庫(kù)中數(shù)據(jù)的變化。
分布式數(shù)據(jù)同步。 sync(List<String> deviceIdList, SyncMode mode) 在手動(dòng)模式下,觸發(fā)數(shù)據(jù)庫(kù)同步。

開(kāi)發(fā)步驟

以單版本分布式數(shù)據(jù)庫(kù)為例,說(shuō)明開(kāi)發(fā)步驟。

  1. 根據(jù)配置構(gòu)造分布式數(shù)據(jù)庫(kù)管理類實(shí)例。

  1. 根據(jù)應(yīng)用上下文創(chuàng)建 KvManagerConfig 對(duì)象。
  2. 創(chuàng)建分布式數(shù)據(jù)庫(kù)管理器實(shí)例。

以下為創(chuàng)建分布式數(shù)據(jù)庫(kù)管理器的代碼示例:

   Context context;
   ...
   KvManagerConfig config = new KvManagerConfig(context);
   KvManager kvManager = KvManagerFactory.getInstance().createKvManager(config);

  1. 獲取/創(chuàng)建單版本分布式數(shù)據(jù)庫(kù)。

  1. 聲明需要?jiǎng)?chuàng)建的單版本分布式數(shù)據(jù)庫(kù) ID 描述。
  2. 創(chuàng)建單版本分布式數(shù)據(jù)庫(kù)。

以下為創(chuàng)建單版本分布式數(shù)據(jù)庫(kù)的代碼示例:

   Options CREATE = new Options();

    
   CREATE.setCreateIfMissing(true).setEncrypt(false).setKvStoreType(KvStoreType.SINGLE_VERSION);
   String storeID = "testApp";
   SingleKvStore singleKvStore = kvManager.getKvStore(CREATE, storeID);

  1. 訂閱分布式數(shù)據(jù)變化。

\1. 客戶端需要實(shí)現(xiàn)KvStoreObserver接口。

\2. 構(gòu)造并注冊(cè)KvStoreObserver實(shí)例。

以下為訂閱單版本分布式數(shù)據(jù)庫(kù)所有(本地及遠(yuǎn)端)數(shù)據(jù)變化通知的代碼示例:

   class KvStoreObserverClient implements KvStoreObserver() {
       @Override
       public void onChange(ChangeNotification notification) {
           List<Entry> insertEntries = notification.getInsertEntries();
           List<Entry> updateEntries = notification.getUpdateEntries();
           List<Entry> deleteEntries = notification.getDeleteEntries();
       }
   }

    
   KvStoreObserver kvStoreObserverClient = new KvStoreObserverClient();
   singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL, kvStoreObserverClient);

  1. 將數(shù)據(jù)寫(xiě)入單版本分布式數(shù)據(jù)庫(kù)。

  1. 構(gòu)造需要寫(xiě)入單版本分布式數(shù)據(jù)庫(kù)的 Key (鍵)和 Value (值)。
  2. 將鍵值數(shù)據(jù)寫(xiě)入單版本分布式數(shù)據(jù)庫(kù)。

以下為將字符串類型鍵值數(shù)據(jù)寫(xiě)入單版本分布式數(shù)據(jù)庫(kù)的代碼示例:

   String key = "todayWeather";
   String value = "Sunny";
   singleKvStore.putString(key, value);

  1. 查詢單版本分布式數(shù)據(jù)庫(kù)數(shù)據(jù)。

  1. 構(gòu)造需要從單版本分布式數(shù)據(jù)庫(kù)快照中查詢的 Key(鍵)。
  2. 從單版本分布式數(shù)據(jù)庫(kù)快照中獲取數(shù)據(jù)。

以下為從單版本分布式數(shù)據(jù)庫(kù)中查詢字符串類型數(shù)據(jù)的代碼示例:

   String key = "todayWeather";String value = singleKvStore.getString(key);

  1. 同步數(shù)據(jù)到其他設(shè)備。

\1. 獲取已連接的設(shè)備列表。

\2. 選擇同步方式進(jìn)行數(shù)據(jù)同步。

以下為單版本分布式數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)同步的代碼示例,其中同步方式為 PUSH_ONLY:

   List<DeviceInfo> deviceInfoList = kvManager.getConnectedDevicesInfo(DeviceFilterStrategy.NO_FILTER);
   List<String> deviceIdList = new ArrayList<>();
   for (DeviceInfo deviceInfo : deviceInfoList) {
       deviceIdList.add(deviceInfo.getId());
   }
   singleKvStore.sync(deviceIdList, SyncMode.PUSH_ONLY);

  1. 關(guān)閉單版本分布式數(shù)據(jù)庫(kù)。以下為關(guān)閉單版本分布式數(shù)據(jù)庫(kù)的代碼示例:

   kvManager.closeKvStore(singleKvStore);

  1. 刪除單版本分布式數(shù)據(jù)庫(kù)。以下為刪除單版本分布式數(shù)據(jù)庫(kù)的代碼示例:

   kvManager.deleteKvStore(storeID);
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)