一种存取数据的方法
【技术领域】
[0001]本发明涉及数据通信,特别涉及一种在移动信息系统中存取数据的方法。
【背景技术】
[0002]电子病历系统为医护人员提供一个能够获取患者信息,将患者门诊、住院信息完全集成的,全面了解患者的综合医疗信息的平台,可更加有效地辅助医疗工作的开展。随着移动终端的应用,新形势下的移动医疗为医疗行业的智能化、自动化工作的开展提供了可能,也是对现行固定医疗的一种完善与补充。然而,移动医疗涉及到了移动终端与主服务器端的数据同步。因此,如何解决服务器端存储的数据与移动终端的数据副本的数据一致性就成为目前系统无缝扩展亟待解决的问题。目前主流的数据同步解决方案中,数据同步的扫描与分发工作由服务器端处理,无法充分利用硬件性能优越的移动终端,由此增加了服务器的压力,并且智能终端与服务器端的耦合程度复杂,增强数据同步的不灵活。
[0003]因此,针对相关技术中所存在的上述问题,目前尚未提出有效的解决方案。
【发明内容】
[0004]为解决上述现有技术所存在的问题,本发明提出了一种存取数据的方法,用于在移动终端与服务器之间实现数据同步,包括:
[0005]移动终端利用散列运算捕获数据变化,
[0006]基于所述数据变化,移动终端发起数据同步过程。
[0007]优选地,所述移动终端和服务器均包括通信模块与数据同步应用模块,其中,
[0008]移动终端的通信模块用于散列指纹信息的封装与解析、格式转换、数据传递;移动终端的数据同步应用模块负责同步数据的捕获、信息比对、变化数据的存储与读取等;
[0009]服务器端的通信模块用于散列指纹信息的封装与解析、格式转换、数据传递。服务器的数据同步应用模块负责同步数据的捕获、变化数据的存储与读取,而不提供变化数据的比对。
[0010]优选地,所述散列运算包括根据数据文件及消息计算相应的散列文件及散列消息,所述散列文件由文件头与文件内容两部分组成,其中文件内容由不同的散列消息组成,文件头由四个组成部分,分别是文件名映射数组、散列文件的大小、文件内容的起始偏移量、文件内容的当前偏移量;散列消息是对本地数据库中捕获的变化数据的封装,它由消息头和消息内容两部分组成,消息头是同步文件的文件名对应的散列映射,消息内容是同步文件的文件内容对应的散列映射,消息头由5个部分组成,分别是文件名映射、下一个消息的起始偏移量、消息状态标记字段、消息内容标记字段、消息内容偏移量,所述消息内容由3个部分组成,分别是总长度、文件全路径以及文件内容的散列映射。
[0011]优选地,所述每个文件的文件名映射为不同的散列值,不同的散列值存储在相应的映射数组中,同一散列值文件以链表形式组织起来,所述文件的文件名信息块包含两个指针,一个是指向下一文件的文件名信息块指针,另一个指针指向自身文件内容信息块,散列映射文件中第一个文件的起始指针用于查找信息块链表的起始位置,散列映射文件中最后一个文件的结束指针用于在插入下一个文件信息块时进行定位,不同文件通过散列映射数组快速找到链表的入口地址,同一入口地址下的文件以链表形式组织起来。
[0012]优选地,所述散列计算进一步包括:
[0013]步骤1:捕获发生变化的文件File,其文件名为File_Name,文件内容为File_Content,生成该文件对应的消息Mf ;
[0014]步骤2:构造散列映射数组Mapping_Array,其大小为N,选择散列函数:
[0015]Hash (key) = key MOD P,其中 P < N ;
[0016]步骤3:选取P为质数或者不包含20的质因数的合数;
[0017]步骤4:对文件名与文件内容取模运算,得到文件名的模值为FNK,文件内容的模值为FCK,即
[0018]FNK = File_Name Mod P ;
[0019]FCK = File_ContentMod P ;
[0020]步骤5:查找映射数组 Mapping_Array。即 Mapping_Array [FNK] =FNK
[0021]步骤6:判断Mapping_Array[FNK]的数组链表长度,若为无后继节点,添加消息节点,并将散列文件大小加I操作;第一个文件的起始指针和最后一个文件的结束指针均指向该文件对应的消息Mf。
[0022]步骤7:若Mapping_Array[FNK]后继节点非空,添加消息节点,并将散列文件大小加I操作;最后一个文件的结束指针指向该文件对应的消息Mf的后继节点。
[0023]本发明相比现有技术,具有以下优点:
[0024]本发明以散列数据计算为核心,具有高度的可行性和高效性,数据同步过程中在移动终端用户的参与下,有效地解决移动终端与服务器端的数据不一致问题。
【附图说明】
[0025]图1是根据本发明实施例的存取数据的方法的流程图。
【具体实施方式】
[0026]下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
[0027]本发明提出一种新的数据同步方法,由移动终端发起数据同步过程。图1是根据本发明实施例的存取数据的方法流程图。如图1所示,实施本发明的具体步骤如下:
[0028]本发明的数据同步结构由两部分组成,分别是移动终端和服务器FSC。
[0029](I)移动终端MU。它由通信模块与数据同步应用模块两部分组成,移动终端的通信模块负责散列指纹信息的封装与解析、格式转换、数据传递等。移动终端的数据同步应用模块负责同步数据的捕获、信息比对、变化数据的存储与读取等。
[0030](2)服务器FSC。它由数据同步应用模块与通信模块两部分组成,服务器的通信模块负责散列指纹信息的封装与解析、格式转换、数据传递等。服务器的数据同步应用模块负责同步数据的捕获、变化数据的存储与读取等,与移动终端的主要区别是不提供变化数据的比对。
[0031]基于散列的数据同步方法:
[0032]本发明采用了散列方法作为数据同步方法,该模型的优势在于将数据同步的工作交由移动终端负责,所以设计上首先要解决的问题是移动终端如何借助散列方法捕获数据变化,其次是解决如何同步的问题。在解决这两个问题之前我们需要定义散列文件及散列消息的格式。
[0033]散列文件由文件头与文件内容两部分组成,其中文件内容由不同的散列消息组成。散列文件头由四个组成部分,分别是文件名映射数组、散列文件的大小、文件内容的起始偏移量、文件内容的当前偏移量。散列消息是对本地数据库中捕获的变化数据的封装。它由消息头和消息内容两部分组成。消息头是同步文件的文件名对应的散列映射,消息内容是同步文件的文件内容对应的散列映射。消息头由5个部分组成,分别是文件名映射、下一个消息的起始偏移量、消息状态标记字段、消息内容标记字段、消息内容偏移量。消息内容由3个部分组成,分别是总长度、文件全路径以及文件内容的散列映射。
[0034]每个文件的文件名映射为不同的散列值,不同的散列值存储在相应的映射数组中,同一散列值文件以链表形式组织起来。
[0035]第η个文件的文件名信息块包含两个指针,一个是指向下一文件的文件名信息块指针,另一个指针指向自身文件内容信息块。散列映射文件中第一个文件的起始指针,方便快速查找信息块链表的起始位置,散列映射文件中最后一个文件的结束指针是在插入下一个文件信息块时快速定位。不同文件通过散列映射数组快速找到链表的入口地址,同一入口地址下的文件以链表形式组织起来。
[0036]散列同步方法具体的过程描述如下:
[0037]步骤1:设某个发生变化的文件File,其文件名为File_Name,文件内容为File_Content,生成该文件对应的消息Mf ;
[0038]步骤2:构造散列映射数组Mapping_Array,其大小为N,选择散列函数:
[0039]散列(key)= key MOD P,其中 P 彡 N ;
[0040]步骤3:选取合适的P值,由经验得知,一般情况下可以选择P为质数或者不包含20的质因数的合数;
[0041]步骤4:对文件名与文件内容取模运算,设文件名的模值为FNK,文件内容的模值为 FCK0
[0042]FNK = File_Name Mod P ;
[0043]FCK = File_ContentMod P ;
[0044]步骤5:查找映射数组 Mapping_Array。即 Mapping_Array [FNK] =FNK
[0045]步骤6:判断Mapping_Array[FNK]的数组链表长度,若为无后继节点,添加消息节点,并将散列文件大小加I操作;
[0046]第一个文件的起始指针和最后一个文件的结束指针均指向该文件对应的消息Mf。
[0047]步骤7:若Mapping_Array[FNK]后继节点非空,添加消息节点,并将散列文件大小加I操作