移动终端的数据存储方法和装置
技术领域
本申请涉及存储技术领域,尤其涉及一种移动终端的数据存储方法和装置。
背景技术
随着科技的发展,越来越多的移动终端走进了人们的生活,比如:智能手机、平板电脑等。用户可以在移动终端中装载各种各样的应用程序,随之而来,需要存储在移动终端本地的数据也就越来越多。这些数据的格式多样化、结构变更频繁,严重影响移动终端的读写性能,同时也降低了应用程序开发和运行维护的效率。
发明内容
有鉴于此,本申请提供一种数据存储方法和装置。
具体地,本申请是通过如下技术方案实现的:
一种移动终端的数据存储方法,所述方法包括:
对将原始数据进行格式转换,以得到预设格式的第一数据;
创建所述第一数据的第一元数据;
根据缓存中保存的键值与元数据的对应关系判断数据库中是否存储有所述第一数据;
如果数据库中没有存储所述第一数据,则将所述第一数据、所述第一数据的第一元数据以及所述第一数据的键值保存到缓存中;
在满足预设的触发条件时,将缓存中尚未存储到数据库中的第一数据、第一数据的第一元数据以及第一数据的键值保存到数据库中。
可选的,所述根据缓存中保存的键值与元数据的对应关系判断数据库中是否存储有所述第一数据,包括:
根据所述第一数据的键值判断缓存中是否保存有所述键值对应的第二元数据;
如果缓存中没有保存所述键值对应的第二元数据,则确定数据库中没有存储所述第一数据。
可选的,还包括:
如果缓存中保存有所述键值对应的第二元数据,则判断所述第二元数据与所述第一元数据是否相同;
如果所述第二元数据与所述第一元数据不相同,则确定数据库中没有存储所述第一数据;
所述将所述第一数据、所述第一数据的第一元数据以及所述第一数据的键值保存到缓存中,包括:
将缓存中保存所述第一数据的键值对应的第二元数据更新为所述第一元数据,并保存所述第一数据。
可选的,所述判断所述第二元数据与所述第一元数据是否相同,包括:
判断所述第二元数据的哈希值与所述第一元数据的哈希值是否相同,如果相同,则确认所述第二元数据与所述第一元数据相同;如果不相同,则确认所述第二元数据与所述第一元数据不相同。
可选的,所述预设的触发条件包括:到达预设的时间周期以及缓存的数据量达到预设的阈值。
可选的,还包括:
在读取数据时,根据键值在缓存中查找是否保存有对应的第一数据;
当缓存中没有保存所述键值对应的第一数据时,根据缓存中保存的所述键值对应的元数据从数据库中获取所述键值对应的第一数据;
将所述第一数据转换为原始数据后返回读取结果。
一种移动终端的数据存储装置,所述装置包括:
第一转换单元,对原始数据进行格式转换,以得到预设格式的第一数据;
元数据创建单元,创建所述第一数据的第一元数据;
存储判断单元,根据缓存中保存的键值与元数据的对应关系判断数据库中是否存储有所述第一数据;
数据缓存单元,在数据库中没有存储所述第一数据时,将所述第一数据、所述第一数据的第一元数据以及所述第一数据的键值保存到缓存中;
数据存储单元,在满足预设的触发条件时,将缓存中尚未存储到数据库中的第一数据、第一数据的第一元数据以及第一数据的键值保存到数据库中。
可选的,所述存储判断单元,具体根据所述第一数据的键值判断缓存中是否保存有所述键值对应的第二元数据,如果缓存中没有保存所述键值对应的第二元数据,则确定数据库中没有存储所述第一数据。
可选的,所述存储判断单元,具体在缓存中保存有所述键值对应的第二元数据时,判断所述第二元数据与所述第一元数据是否相同,如果所述第二元数据与所述第一元数据不相同,则确定数据库中没有存储所述第一数据;
所述数据缓存单元,具体将缓存中保存所述第一数据的键值对应的第二元数据更新为所述第一元数据,并保存所述第一数据。
可选的,所述存储判断单元,具体判断所述第二元数据的哈希值与所述第一元数据的哈希值是否相同,如果相同,则确认所述第二元数据与所述第一元数据相同;如果不相同,则确认所述第二元数据与所述第一元数据不相同。
可选的,所述预设的触发条件包括:到达预设的时间周期以及缓存的数据量达到预设的阈值。
可选的,所述装置还包括:
第一读取单元,在读取数据时,根据键值在缓存中查找是否保存有对应的第一数据;
第二读取单元,当缓存中没有保存所述键值对应的第一数据时,根据缓存中保存的所述键值对应的元数据从数据库中获取所述键值对应的第一数据;
第二转换单元,将所述第一数据转换为原始数据后返回读取结果。
由以上描述可以看出,本申请可以将原始数据转换为预设格式的数据后存储到基于Key-Value的非关系型数据库中,能够消除数据的结构差异,提高数据的兼容性以及数据读写的效率。
附图说明
图1是本申请一示例性实施例示出的一种移动终端的数据存储方法的流程示意图。
图2是本申请一示例性实施例示出的一种确定数据库中是否存储有第一数据的流程示意图。
图3是根据一示例性实施例示出的一种移动终端的一结构示意图。
图4是本申请一示例性实施例示出的一种移动终端的数据存储装置的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
图1是本申请一示例性实施例示出的一种移动终端的数据存储方法的流程示意图。
请参考图1,所述数据存储方法可以应用在移动终端上,所述终端可以包括智能手机、平板电脑、PDA(Personal Digital Assistant,掌上电脑)等智能设备。所述数据存储方法可以包括以下步骤:
步骤101,对原始数据进行格式转换,以得到预设格式的第一数据。
在本实施例中,所述原始数据为需要存储在移动终端本地数据库中的数据,所述原始数据包括各个应用程序需要的缓存在本地的新闻、列表、资讯等数据。所述原始数据的格式可能为文本格式、XML格式等。
在本步骤中,移动终端在接收到需要存储的原始数据后,对所述原始数据进行格式转换,将其转换为预设格式的数据,所述预设格式可以由管理人员进行设置,比如:二进制、十进制等。在本申请中,为便于描述,将对原始数据进行格式转换后得到的数据称为第一数据。
步骤102,创建所述第一数据的第一元数据。
基于前述步骤101,移动终端在将所述原始数据转换为第一数据后,创建所述第一数据的元数据,在本申请中,将创建的所述第一数据的元数据称为第一元数据。
步骤103,根据缓存中保存的键值与元数据的对应关系判断数据库中是否存储有所述第一数据,如果数据库中没有存储所述第一数据,则执行步骤104。
在本实施例中,为提高读写效率,可以采用基于Key-Value进行存储的非关系型数据库作为移动终端的底层存储介质,所述非关系型数据库中包括有每条原始数据格式转换后的第一数据、第一元数据以及键值(Key)。移动终端的缓存中保存有所述非关系型数据库中每条第一元数据及其键值的对应关系。在本实施例中,为便于区分,将缓存中保存的所述第一元数据称为第二元数据。具体地,移动终端可以在重新启动后,将所述非关系型数据库(以下简称:数据库)中每条第一元数据及其键值的对应关系保存到缓存,比如:内存。移动终端也可以在接收到需要存储在数据库中的原始数据后,如果确定数据库中没有存储有进行格式转换后的所述原始数据,即数据库中没有存储所述原始数据的第一数据时,将所述原始数据对应的第一元数据及其键值保存到缓存,其具体的实现流程可以详见后续的描述。
在本步骤中,移动终端可以根据所述第一数据的键值以及缓存中保存的所述键值与元数据的对应关系判断数据库中是否已经存储有所述第一数据。其中,所述第一数据的键值也就是所述原始数据的键值。
请参考图2,在本申请一可选的实施方式中,确定数据中是否存储有第一数据可以包括以下步骤:
步骤1031,根据第一数据的键值判断缓存中是否保存有所述键值对应的第二元数据。如果缓存中保存有所述键值对应的第二元数据,则执行步骤1032,如果缓存中没有保存所述键值对应的第二元数据,则执行步骤1033。
步骤1032,判断所述第二元数据与所述第一元数据是否相同。如果所述第二元数据与所述第一元数据不相同,则执行步骤1033,如果所述第二元数据与所述第一元数据相同,则执行步骤1034。
基于前述步骤1031的判断结果,如果缓存中保存有所述键值对应的第二元数据,则说明底层的数据库中保存有所述键值对应的第一数据,但是无法得知该第一数据是否为最新版本的第一数据,所以在本步骤中,可以判断所述第二元数据与创建的第一元数据是否相同。
在本实施例中,可以通过比对所述第二元数据与所述第一元数据的每个字节以判断所述第二元数据与所述第一元数据是否相同。可选的,还可以通过判断所述第二元数据的哈希值与所述第一元数据的哈希值是否相同以判断所述第二元数据与所述第一元数据是否相同。具体地,所述第二元数据中包括有数据库中存储的对应第一数据的哈希值,在本步骤中,可以根据前述步骤101中转换后的第一数据计算所述第一数据的哈希值,以将该哈希值作为所述第一元数据的哈希值,然后比较计算得到的该哈希值与所述第二元数据中包含的哈希值是否相同,如果不相同,则确定所述第二元数据与所述第一元数据不相同,执行步骤1033;如果相同,则确定所述第二元数据与所述第一元数据相同,执行步骤1034。
步骤1033,确定数据库中没有存储所述第一数据。
在本实施例中,基于前述步骤1031的判断结果,如果缓存中没有保存所述键值对应的第二元数据,则可以确定数据库中没有存储所述第一数据。
基于前述步骤1032的判断结果,如果所述第二元数据与所述第一元数据不相同,则说明数据库中存储有相同键值的第一数据,但是该第一数据与前述步骤101中转换得到的第一数据不相同,所以导致二者的元数据不相同,这可能是因为数据中存储的所述第一数据不是最新的数据,需要进行更新,所以此时也可以确定数据库中没有存储前述步骤101中转换得到的所述第一数据。
步骤1034,确定数据库中已经存储所述第一数据。
基于前述步骤1032的判断结果,如果所述第二元数据与所述第一元数据相同,则说明数据库中存储有相同键值的第一数据,并且该第一数据与前述步骤101中转换得到的第一数据相同,此时不需要进行更新。移动终端可以删除前述步骤101中接收到的所述原始数据、转换后的第一数据以及前述步骤102中创建的所述第一元数据。
在本实施例中,可以根据缓存中保存的键值与元数据的对应关系确认数据库中是否已存储有接收到的原始数据,大大减少访问数据库所带来的系统消耗。
步骤104,将所述第一数据、所述第一数据的第一元数据以及所述第一数据的键值保存到缓存中。
基于前述步骤103的判断结果,如果数据库中没有存储所述第一数据,则需要将所述第一数据存储到数据库中。在本实施例中,可以先将所述第一数据、所述第一数据的第一元数据以及所述第一数据的键值保存到缓存中。
针对前述步骤103中数据库中没有存储所述第一数据的两种情况,在本步骤中可以采用以下两种实现方式:
方式一,缓存中没有保存第一数据的键值对应的第二元数据。在这种情况下,说明数据库中没有存储有步骤101中接收到的原始数据的第一数据,则移动终端可以先将所述第一数据、所述第一数据的第一元数据以及所述第一数据的键值保存到缓存中,并将其标注为未存储。其中,移动终端可以为所述第一数据、所述第一数据的第一元数据以及所述第一数据的键值这一整条数据设置用于标注存储状态的标识位,比如:标识位为0表示未存储,标识位为1表示已存储。移动终端也可以设置一个键值列表,将未存储到数据中的第一数据的键值存储到该键值列表中,当然,本领域技术人员也可以采用其他方式标注缓存中保存的数据是否已存储到数据库中,本申请对此不作特殊限制。
方式二,缓存中保存有第一数据的键值对应的第二元数据,但是所述第二元数据与所述第一数据的第一元数据不相同。在这种情况下,说明数据库中存储有相同键值的第一数据,但是该第一数据不是最新的第一数据,需要进行更新。移动终端可以将缓存中保存第一数据的键值对应的第二元数据更新为所述第一元数据,并保存所述第一数据,以使得针对一个键值,缓存中保存有一个最新的元数据。此外,与方式一相同,在这种方式中,也会将更新后的这条数据标注为未存储。
步骤105,在满足预设的触发条件时,将缓存中尚未存储到数据库中的第一数据、第一数据的第一元数据以及第一数据的键值保存到数据库中。
在本实施例中,移动终端可以在满足预设的触发条件时,将缓存中尚未存储到数据库中的第一数据、第一数据的第一元数据以及第一数据的键值保存到数据库中,也就是将缓存中标注为未存储的数据存储到数据库中。
在本实施例中,所述触发条件可以由管理人员进行设置,比如:所述触发条件可以是到达预设的时间周期,所述触发条件也可以是缓存的数据量达到预设的阈值,本申请对此不作特殊限制。
由以上描述可以看出,本申请可以将原始数据转换为预设格式的数据后存储到基于Key-Value的非关系型数据库中,能够消除数据的结构差异,提高数据的兼容性以及数据读写的效率。
在本申请另一实施例中,移动终端还可以将读频率较高的第一数据存储到缓存中,以提高读效率。因此,移动终端在接收到数据读取指令时,可以根据读取命令中携带的键值先在缓存中查找是否保存有对应的第一数据,当缓存中保存有对应的第一数据时,可以将缓存中的第一数据进行相反的格式转换,转换为原始数据后返回读取结果。当缓存中没有保存所述键值对应的第一数据时,可以先查找缓存中保存的所述键值对应的元数据(第二元数据),然后根据该元数据从数据库中获取所述键值对应的第一数据,然后将获取到的第一数据进行相反的格式转换,转换为原始数据后返回读取结果。
在本申请另一实施例中,移动终端在满足预设的条件时删除缓存中保存的第一数据,比如:可以定期删除缓存中保存的第一数据,也可以在第一数据的读频率小于阈值时删除缓存中保存的所述第一数据,本申请对此不作特殊限制。
此外,依据相关技术,本申请提供的数据存储方案还可以支持加密存储,比如:移动终端在将原始数据转换为预设格式的第一数据后,可以对所述第一数据进行加密处理后存储。相应的,移动终端在读取到第一数据后,对所述第一数据进行解密处理,然后再转换为原始数据返回读取结果。
与前述移动终端的数据存储方法的实施例相对应,本申请还提供了移动终端的数据存储装置的实施例。
本申请移动终端的数据存储装置的实施例可以应用在移动终端上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在移动终端的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本申请数据存储装置所在移动终端的一种硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的移动终端通常根据该移动终端的实际功能,还可以包括其他硬件,对此不再赘述。
请参考图4是本申请一示例性实施例示出的一种移动终端的数据存储装置的结构示意图。
请参考图4,所述移动终端的数据存储装置300可以包括:第一转换单元301、元数据创建单元302、存储判断单元303、数据缓存单元304、数据存储单元305、第一读取单元306、第二读取单元307以及第二转换单元308。
其中,所述第一转换单元301,对原始数据进行格式转换,以得到预设格式的第一数据;
所述元数据创建单元302,创建所述第一数据的第一元数据;
所述存储判断单元303,根据缓存中保存的键值与元数据的对应关系判断数据库中是否存储有所述第一数据;
所述数据缓存单元304,在数据库中没有存储所述第一数据时,将所述第一数据、所述第一数据的第一元数据以及所述第一数据的键值保存到缓存中;
所述数据存储单元305,在满足预设的触发条件时,将缓存中尚未存储到数据库中的第一数据、第一数据的第一元数据以及第一数据的键值保存到数据库中。
可选的,所述存储判断单元303,具体根据所述第一数据的键值判断缓存中是否保存有所述键值对应的第二元数据,如果缓存中没有保存所述键值对应的第二元数据,则确定数据库中没有存储所述第一数据。
可选的,所述存储判断单元303,具体在缓存中保存有所述键值对应的第二元数据时,判断所述第二元数据与所述第一元数据是否相同,如果所述第二元数据与所述第一元数据不相同,则确定数据库中没有存储所述第一数据;
所述数据缓存单元304,具体将缓存中保存所述第一数据的键值对应的第二元数据更新为所述第一元数据,并保存所述第一数据。
可选的,所述存储判断单元303,具体判断所述第二元数据的哈希值与所述第一元数据的哈希值是否相同,如果相同,则确认所述第二元数据与所述第一元数据相同;如果不相同,则确认所述第二元数据与所述第一元数据不相同。
可选的,所述预设的触发条件包括:到达预设的时间周期以及缓存的数据量达到预设的阈值。
所述第一读取单元306,在读取数据时,根据键值在缓存中查找是否保存有对应的第一数据;
所述第二读取单元307,当缓存中没有保存所述键值对应的第一数据时,根据缓存中保存的所述键值对应的元数据从数据库中获取所述键值对应的第一数据;
所述第二转换单元308,将所述第一数据转换为原始数据后返回读取结果。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。