分布式数据服务主要实现对用户设备中应用程序的数据内容的分布式同步。当设备 1 上的应用 A 在分布式数据库中增、删、改数据后,设备2上的应用 A 也可以获取到该数据库变化。可在分布式图库、信息、通讯录、文件管理器等场景中使用。
HarmonyOS 系统中的分布式数据服务模块为开发者提供下面几种功能:
功能分类 | 接口名称 | 描述 |
---|---|---|
分布式数据库创建、打开、关闭和删除。 | isCreateIfMissing() | 数据库不存在时是否创建。 |
setCreateIfMissing(boolean isCreateIfMissing) | 数据库不存在时是否创建。 | |
isEncrypt() | 获取数据库是否加密。 | |
setEncrypt(boolean isEncrypt) | 设置数据库是否加密。 | |
getStoreType() | 获取分布式数据库的类型。 | |
setStoreType(KvStoreType storeType) | 设置分布式数据库的类型。 | |
KvStoreType.DEVICE_COLLABORATION | 设备协同分布式数据库类型。 | |
KvStoreType.SINGLE_VERSION | 单版本分布式数据库类型。 | |
getKvStore(Options options, String storeId) | 根据Options配置创建和打开标识符为 storeId 的分布式数据库。 | |
closeKvStore(KvStore kvStore) | 关闭分布式数据库。 | |
deleteKvStore(String storeId) | 删除分布式数据库。 | |
分布式数据增、删、改、查。 | getStoreId() | 根据配置构造帐号键值数据库管理类实例。 |
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) | 插入和更新数据。 | |
delete(String key)deleteBatch(List<String> keys) | 删除数据。 | |
getInt(String key)getFloat(String key)getDouble(String key)getString(String key)getByteArray(String key)getEntries(String keyPrefix) | 查询数据。 | |
分布式数据谓词查询。 | 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() | 对于Schema数据库谓词查询数据。 |
订阅分布式数据变化。 | subscribe(SubscribeType subscribeType, KvStoreObserver observer) | 订阅数据库中数据的变化。 |
分布式数据同步。 | sync(List<String> deviceIdList, SyncMode mode) | 在手动模式下,触发数据库同步。 |
以单版本分布式数据库为例,说明开发步骤。
以下为创建分布式数据库管理器的代码示例:
Context context;
...
KvManagerConfig config = new KvManagerConfig(context);
KvManager kvManager = KvManagerFactory.getInstance().createKvManager(config);
以下为创建单版本分布式数据库的代码示例:
Options CREATE = new Options();
CREATE.setCreateIfMissing(true).setEncrypt(false).setKvStoreType(KvStoreType.SINGLE_VERSION);
String storeID = "testApp";
SingleKvStore singleKvStore = kvManager.getKvStore(CREATE, storeID);
1. 客户端需要实现KvStoreObserver接口。
2. 构造并注册KvStoreObserver实例。
以下为订阅单版本分布式数据库所有(本地及远端)数据变化通知的代码示例:
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);
以下为将字符串类型键值数据写入单版本分布式数据库的代码示例:
String key = "todayWeather";
String value = "Sunny";
singleKvStore.putString(key, value);
以下为从单版本分布式数据库中查询字符串类型数据的代码示例:
String key = "todayWeather";String value = singleKvStore.getString(key);
1. 获取已连接的设备列表。
2. 选择同步方式进行数据同步。
以下为单版本分布式数据库进行数据同步的代码示例,其中同步方式为 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);
kvManager.closeKvStore(singleKvStore);
kvManager.deleteKvStore(storeID);
Apache Storm处理实时数据,并且输入通常来自消息排队系统。外部分布式消息系统将提供实时计算所需的输入。Spout将从消息系统读...
ComponentTreeObserver.WindowBoundListenerpublic static interface ComponentTreeObserver.WindowBoundListener当组件层次结构...
ListComponent.OnComponentBoundStatusChangeListenerpublic static interface ListComponent.OnComponentBoundStatusChangeList...
Text.TextSizeObserverpublic static interface Text.TextSizeObserver提供一个观察者来监听组件中文本大小的变化。每次文本大小...
ComponentProviderjava.lang.Object |---ohos.agp.components.ComponentProviderpublic class ComponentProviderextends Objecti...
Apache Pig教程Apache Pig是MapReduce的一个抽象,它是一个工具/平台,用于分析较大的数据集,并将它们表示为数据流。Pig通常与 ...
1.客户端将文件写入本地磁盘的 HDFS Client 文件中2.当临时文件大小达到一个 block 大小时,HDFS client 通知 NameNode,申请写...
WXSSWXSS(WeiXin Style Sheets)是一套样式语言,用于描述WXML的组件样式。WXSS用来决定WXML的组件应该怎么显示。为了适应广大的...
input基础库 1.0.0 开始支持,低版本需做兼容处理。输入框。该组件是原生组件,使用时请注意相关限制属性类型默认值必填说明最低...