OpenHarmony移植案例与原理 - startup子系统之bootstrap_lite服务启动引导部件(1)
768
2022-05-29
分布式文件服务能够为用户设备中的应用程序提供多设备之间的文件共享能力,支持相同帐号下同一应用文件的跨设备访问,应用程序可以不感知文件所在的存储设备,能够在多个设备之间无缝获取文件。
分布式文件是指依赖于分布式文件系统,分散存储在多个用户设备上的文件,应用间的分布式文件目录互相隔离,不同应用的文件不能互相访问。
文件元数据是用于描述文件特征的数据,包含文件名,文件大小,创建、访问、修改时间等信息。
分布式文件服务采用无中心节点的设计,每个设备都存储一份全量的文件元数据和本设备上产生的分布式文件,元数据在多台设备间互相同步,当应用需要访问分布式文件时,分布式文件服务首先查询本设备上的文件元数据,获取文件所在的存储设备,然后对存储设备上的分布式文件服务发起文件访问请求,将文件内容读取到本地。
分布式文件服务运作如下图所示:
应用程序如需使用分布式文件服务完整功能,需要申请 ohos.permission.DISTRIBUTED_DATASYNC 权限。
多个设备需要登录相同华为帐号,然后打开多个设备的蓝牙,或将多个设备接入同一 WLAN 局域网,才能实现文件的分布式共享。
当多台设备对同一文件并发写操作时有数据冲突,后写会覆盖先写,应用需要主动保证时序控制并发流程。
应用访问分布式文件时,如果文件所在设备离线,文件不能访问。
网络情况差时,访问存储在远端的分布式文件时,可能会长时间不返回或返回失败,应用需要考虑这种场景的处理。
当两台设备有同名文件时,同步元数据时会产生冲突,冲突的解决策略:
本地跟远端冲突 ,远端文件被重命名,看到的同名文件是本地同名文件,远端文件被重命名;
远端多个设备冲突,以接入本设备 ID 为顺序,显示设备 ID 小的同名文件,其他文件被依次重命名;
如果组网场景,目录树下已经有远端文件,创建同名文件,提示文件已存在;
冲突文件显示 _conflict_dev 后依次加 id;
同名目录之间仅融合不存在冲突,文件和远端目录同名冲突,远端目录后缀加 _remote_directory。
应用可以通过分布式文件服务实现多个设备间的文件共享,设备1上的应用 A 创建了分布式文件 a,设备2上的应用 A 能够通过分布式文件服务读写设备1上的文件 a。
分布式文件兼容 POSIX 文件操作接口,应用使用 Context.getDistributedDir() 接口获取目录后,可以直接使用 libc 或 JDK 访问分布式文件。
分布式文件服务 API 接口功能:
应用可以通过 Context.getDistributedDir() 接口获取属于自己的分布式目录,然后通过 libc 或 JDK 接口,在该目录下创建、删除、读写文件或目录。
设备1上的应用 A 创建文件 hello.txt,并写入内容"Hello World"。
Context context; ... // context初始化 File distDir = context.getDistributedDir(); String filePath = distDir + File.separator + "hello.txt"; FileWriter fileWriter = new FileWriter(filePath, true); fileWriter.write("Hello World"); fileWriter.close();
1
2
3
4
5
6
7
设备 2 上的应用 A 通过 Context.getDistributedDir() 接口获取分布式目录。
设备 2 上的应用 A 读取文件 hello.txt。
FileReader fileReader = new FileReader(filePath); char[] buffer = new char[1024]; fileReader.read(buffer); fileReader.close(); System.out.println(buffer);
1
2
3
4
5
分布式 弹性文件服务 数据管理服务 DAS
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。