基于Web3D的异构数据存储及通信研究(2)

时间:2020-09-07 15:33:42 通信工程毕业论文 我要投稿

基于Web3D的异构数据存储及通信研究

  2.1.2 文件存储

  由于直接加载文件比从数据库中读取数据加载速度快,系统除在数据库中存储模型的二进制流数据,还在文件系统中存储模型文件。文件在系统中的存储层次与数据库中各主体的层次划分一致,系统依照数据库中存储的文件的网络路径对文件进行读写。

  2.2 一致性保持

  由于系统中的异构数据在数据库系统和文件系统中分别进行存储,需要对其进行一致性维护。

  数据一致性指关联数据之间的关系是否完整和正确,一方面指物理上的一致,即同一个事实的数据应该相同,如数据库中存储的几个表都涉及到同一个数据项,这些数据应该保持相同的值,另一方面,数据一致性指逻辑上的一致,即不同数据之间业务逻辑的一致。本系统主要对数据的物理一致性保持进行维护。

  由于数据库中存储异构数据主要的作用是数据备份,主要数据源是文件系统中的`数据,两者之间有较为明显的主从关系,系统采用基于主从的事务控制方法来维护数据的一致性。

  系统中异构数据的更新操作以事务的方式提交给系统,事务先对文件系统的文件进行更新操作,若操作成功则对其在数据库中进行备份,若备份失败则进行事务的回滚。以数据更新为例,其流程如图2:

  图2 数据更新流程图

  有些异常情况,如突然断电、数据库发生迁移、误删文件等会造成数据的不一致,这种情况依靠事务控制机制无法处理的。因此,系统针对这些异常情况产生的数据不一致进行了分类并对其进行一致性维护。

  (1)误删文件或数据库迁移造成文件系统中文件缺失。若系统依照路径查找文件失败,则按照数据库中存储的文件路径和BLOB数据对文件系统的数据进行恢复。

  (2)突然断电导致数据库中文件路径或BLOB数据未更新。若文件路径更新完毕,则依照存储的文件路径查找该文件,并以BLOB的格式存储在数据库中。若文件路径也未更新,则根据文件所对应实体(如展品或展馆)以及文件类型(音频或视频),根据文件系统存储的层级结构查找该文件并进行备份。

  3 数据通信

  由于该系统基于Unity进行开发,参观者要想使用浏览器对虚拟博物馆进行参观,首先需要安装Unity WebPlayer插件。但是由于安全沙盒的限制,Unity WebPalyer不能直接与数据库连接并且从数据库中读取数据。因此,本系统采用图3的方式实现客户端与数据库的通信。首先,客户端获取参观者在页面的请求,并将请求和数据通过http协议发送给服务端,服务端的php通过url获取用户的请求和数据,执行脚本进行数据库操作,最后,将结果数据组织为Json格式反馈给客户端,Unity WebPlayer读取并解析网页中的JSON数据,将其进行可视化并在客户端进行展示。

  图3 客户端与数据库通信方式

  本文以展品信息查询为例,展示Web环境下Unity的通信过程。从系统的整体结构(图1)可知,要执行展品信息的查询,首先触发客户端的查询功能模块,然后查询功能模块对查询请求进行分类处理,并提交给资源管理模块,资源管理模块对现有资源进行查询,如果没有则进一步向数据控制模块请求数据,下文将主要讲述数据控制模块从数据库中获取数据后将数据反馈给表示层进行显示的过程。

  3.1 数据控制模块

  数据控制模块主要根据不同的查询需求请求数据。要实现对展品信息的查询,数据控制模块根据表示层的请求,不仅需要从数据层获取展品的名称、编号、位置、鉴定特性等基本的属性信息,为了对展品进行多方面的展示,还需获取图片、音频、视频、模型等文件。   对于数据库中存储的文本信息,系统采用php脚本连接数据库并读取数据。由于JSON具有数据量小、易解析的特点,系统选用其作为数据控制模块和数据层的交换格式。系统将php脚本读取的属性数据按照JSON的格式要求进行组织并反馈给资源管理模块(如图4)。

  图4 展品属性数据(JSON格式)

  对于图片、模型等文件的获取,系统将其路径作为属性数据的一部分反馈给资源管理模块,客户端可直接从服务器端对发布的文件进行读取,而不受Unity WebPlayer对数据库的通信限制。

  3.2 资源管理模块

  资源管理模块接收表示层的查询请求,并对数据控制模块的数据进行管理。根据表示层的查询请求,资源管理模块首先判定请求的数据是否包含在场景的预置文件或者缓存中,有则直接反馈到表示层进行显示,如果没有,则向数据控制模块发送数据请求,并接收数据控制模块反馈的数据,当数据接收完毕,则反馈给表示层,对其进行进一步解析和显示。主要代码如下:

  if(!Resourses.Load(model)){

  WWW www = WWW.LoadFromCacheOrDownload(address,version);

  }

  3.3 展品展示模块

  由于展品的属性数据量小,而图片的数据量大,因此,资源管理模块接收到数据控制模块反馈的JSON数据之后,则通知展品展示模块首先对属性数据进行显示。由于JSON格式的数据在客户端容易解析,系统使用LitJSON先将JSON数据转换成对象,通过访问对象的属性值直接获取属性数据并在NGUI界面上显示(如图5)。

  对于图片、模型等信息,系统则根据经过JSON处理后得到的路径直接向服务端请求文件。采用属性信息和图片信息分开分布加载,不仅能够满足Web环境下的通信要求,而且属性数据的优先加载使用户体验得到提升。尽管采用了属性信息和图片信息分布加载的方式,但是由于图片、三维模型等文件和属性数据存在数量级的差异,系统采用异步加载的方式对模型进行加载。系统进行异步加载的主要代码如下:

  yield return bundle;

  yield return Instantiate(bundle.assetBundle.mainAsset);

  bundle.assetBundle.Unload(false);

  图5 展品查询结果

  4 结语

  依照参观者的参观习惯对博物馆的实体进行层次存储,不仅保证了数据的一致性,而且可有效减少单次加载数据量和加载时间。在Web环境下采用JSON格式进行数据交互,减少了传输的数据量,同时,采用分层次、异步加载的方式进行加载,使模型的加载能够在后台进行,减少了用户等待时间,极大地提升了用户的参观体验。由于地质博物馆的模型更为复杂和精细,数据量大,需要消耗更大的网络带宽和加载时间,因此,下一步的主要工作是对三维模型的数据量进行精简。