一种数据导入的方法

文档序号:6584261阅读:129来源:国知局
专利名称:一种数据导入的方法
技术领域
本发明涉及一种导入数据的方法,具体地说,是涉及一种小内存分步数据导入的
方法,尤其涉及一种嵌入式系统分步导入数据的方法,属于数据处理技术领域。
背景技术
随着嵌入式技术的发展和用户需求的增加,嵌入式系统越来越多地被应用在机顶 盒、高清播放器等多媒体设备上。在这些多媒体设备上,用户界面UI作为用户与设备交互 的接口,可以用来进行列表显示、播放音视频文件及图片等。在执行这些操作时,UI模块往 往需要大量的数据,这些数据是按照UI每次可显示的数据量一部分一部分地导入到UI模 块中,然后在UI上显示。图l是现有嵌入式系统数据导入方法的基本原理示意图,如图1 所示,现有将这些列表、音视频及图片等数据导入时采用下述过程当上层UI模块需要数 据时,直接从存储在硬盘等存储设备上的数据库中查找所有符合条件的数据,然后根据这 些数据一次性申请所需的内存空间,并将所有符合条件的数据一次性全部从数据库读取到 所申请的内存空间中。UI模块一次性返回符合要求的全部数据,然后按照UI每次可显示的 数据量从所述内存中一部分一部分地读取数据,并在UI上显示。这种数据导入的方法存在 下述缺点一方面,由于嵌入式系统的内存较小,一般在128M以下,如果数据库中符合条件 的数据量较大,就会占用大量的系统内存,容易造成内存不足,导致整个系统崩溃;另一方 面, 一次性导入大量数据需要花费较长的时间,从而导致系统响应速度缓慢,不能充分发挥 嵌入式系统快速响应的特点。

发明内容
本发明针对现有技术在导入大量数据时存在的占用内存大、消耗时间多的技术问 题,提供了一种数据导入的方法,通过创建数据抽象类作为数据导入管理的中间层,用于数 据的导入和内存的管理,实现了利用较小的内存空间将大量数据分批提供给UI模块来使 用的目的。 为解决上述技术问题,本发明采用以下技术方案予以实现
—种数据导入的方法,包括下述步骤 创建数据抽象类作为数据库的基类,为所述数据抽象类申请内存空间;
利用所述数据抽象类从数据库中读取数据至所述内存空间;
UI模块从所述内存空间中导入所需的数据; 其中,所述内存空间的大小根据UI模块每次可显示的数据量来确定。 根据本发明,所述内存空间的大小可以设定为UI模块每次可显示的数据量所占
据的空间的4-5倍。 根据本发明,在利用所述数据抽象类从数据库中读取数据至所述内存空间时,若 数据库中符合所述数据抽象类的数据不大于所述内存空间的存储量,则将所有符合所述数 据抽象类的数据全部读取至所述内存空间中;若数据库中符合所述数据抽象类的数据大于所述内存空间的存储量,则只读取所述内存空间所能存储的数据至所述内存空间中。
根据本发明,在创建数据抽象类之前,还包括UI模块启动、发出查询数据请求的 步骤。 根据本发明,在UI模块导入数据时,若所述内存空间中不存在UI模块所需的数 据,则更新所述内存空间中的数据。 根据本发明,更新所述内存空间中的数据可按照下述过程实现
判断所述内存空间是否还存在未写入数据的空闲区域; 在所述内存空间存在未写入数据的空闲区域时,利用所述数据抽象类从数据库中 读取UI模块所需的数据至所述空闲区域; 在所述内存空间不存在未写入数据的空闲区域时,擦除所述内存空间中较旧的数 据,然后利用所述数据抽象类从数据库中读取UI模块所需的数据并添加至所述内存空间。
根据本发明,在上述更新内存空间的过程中,若擦除所述内存空间中较旧的数据 失败,则数据抽象类只维护现有内存空间中的正确数据,而丢弃擦除失败的数据,并且发出 错误通知给UI模块。 进一步地,擦除所述内存空间中较旧的数据以更新内存空间的方法为 若UI模块所需的数据相对于所述内存空间中已存储的数据是向上移动的,则擦
除所述内存空间中后半部分的数据,并将所述内存空间中存储的前半部分的数据移动到内
存空间的后半部分中,然后将从数据库中读取的UI模块所需的数据添加到所述内存空间
的前半部分中; 若UI模块所需的数据相对于所述内存空间中已存储的数据是向下移动的,则擦 除所述内存空间中前半部分的数据,并将所述内存空间中存储的后半部分的数据移动到内 存空间的前半部分中,然后将从数据库中读取的UI模块所需的数据添加到所述内存空间 的后半部分中。 根据本发明,若UI模块停止数据请求,则销毁所创建的数据抽象类,释放相应的 内存空间。 根据本发明,所述数据抽象类可以用C++容器封装。 与现有技术相比,本发明的优点和积极效果是本发明在不改变原有系统架构的 基础上,通过创建数据抽象类维护一小块内存空间,在上层UI模块需要数据库中的具体数 据时,直接从数据抽象类维护的小块内存空间中导入数据;若导入失败,再去操作数据库, 更新小块内存空间数据,满足UI模块的需求,实现将大量数据分批导入以供UI模块来使用 的目的。在更新数据时,不需要重新申请内存空间,只需将原内存空间中的数据擦除重写即 可,因此,在很大程度上降低了内存的占用,提高了系统的稳定性。由于UI模块所需的数据 前后联系性比较大、空间跳跃性较小,从理论上保证了使用较小的内存空间保存的局部数 据能够满足大多数的数据需求,有效避免了传统方法一次性申请内存空间、一次性导入数 据而导致内存骤降、占用大量CPU时间的问题。且由于数据抽象类只维护一小块内存空间, 不会进行其他内存的相关操作,进一步提高了系统响应速度。


图1是现有嵌入式系统数据导入方法的基本原理示意 图2是本发明所述数据导入方法的基本原理示意图;
图3是本发明所述数据导入方法一个实施例的工作流程图;
图4是图2实施例中的内存空间管理的具体示意图。
具体实施例方式
下面结合附图对本发明作进一步详细的说明。 本发明针对现有技术中嵌入式系统等具有小内存的系统的UI模块访问数据库中 的大量数据时占用内存大、消耗时间多这一不足,提出了一种高效、节省内存的数据导入方 法。 如图2本发明所述数据导入方法的基本原理示意图所示,本发明在保持系统原有 架构不变的前提下,在数据导入时创建数据抽象类,作为系统内存与数据库之间的中间层。 该数据抽象类作为数据库的一个基类,在UI模块启动后,系统将会为该数据抽象类申请内 存空间,所述内存空间可根据UI模块每次显示的数据量来确定。在UI模块需要数据时, 向数据库查询所需的数据,而数据导入与内存的管理工作全部都封装在数据抽象类中。此 时,数据库将根据UI模块的需求,对数据抽象类所维护的内存空间进行相应的数据导入与 擦除等操作。若UI模块从数据抽象类维护的内存空间中成功查询到数据,则直接返回给UI 模块使用。若从该内存空间中找不到数据,则需要从数据库中读取UI所需的数据,来更新 内存空间。所述数据抽象类只维护一小块内存空间,不会进行其他内存的相关操作。
图3示出了本发明所述数据导入方法一个实施例的工作流程图,该实施例以内存 较小的嵌入式系统为例,其执行数据导入的具体步骤如下
S101 :数据导入流程开始。
S102 :系统UI模块启动,向数据库发出查询数据的请求。
S103 :创建数据抽象类,向系统申请内存空间。 该实施例的数据抽象类用0++容器来封装,所申请的内存空间设定为^模块每次 可显示的数据量所占据的空间的4-5倍,且将所述内存空间平均分配成两块,分别为内存 空间前半部分和内存空间后半部分,如图4中的内存空间管理的具体示意图所示。
之所以将所申请的内存空间仅设定为UI模块每次可显示的数据量所占据的空间 的4-5倍,其大小可能在几百K以下,即可满足UI模块对任何数据量的需求,理论依据是 由于UI模块所需的数据前后联系性比较大、空间跳跃性较小,以UI列表显示为例,列表所 需要的数据仅是相对于当前数据的上一个数据、下一个数据、上一页数据或后一页数据等, 如图4所示,UI模块所需的数据仅在图中的虚线框标示的范围内波动。因此,只需将内存 空间设定为UI模块每次可显示的数据量所占据的空间的4-5倍,即可满足UI列表的所有 操作需求,且不影响系统的响应时间。 S104 :利用所创建的数据抽象类从数据库读取UI所需的有效数据至所述内存空 间中。 在该步骤中,若数据库中符合所述数据抽象类的数据不大于所述内存空间的存储 量,则将所有符合所述数据抽象类的数据全部读取至所述内存空间中;若数据库中符合所 述数据抽象类的数据大于所述内存空间的存储量,则只读取所述内存空间所能存储的数据 至所述内存空间中。
S105 :将当前焦点数据导入至UI模块中。
若是首次导入数据,则当前焦点数据是内存空间中的第一个数据;若不是首次导
入数据,则当前焦点数据可能位于内存空间中的任一位置,如图4所示,当前焦点数据一部
分位于内存空间前半部分的下部,另一部分位于内存空间后半部分的上部。 S106:判断UI模块是否还有数据请求。若有,执行步骤S107;否则,转至步骤
S112。 S107 :在UI模块还有数据请求时,判断内存空间是否还存在UI模块所需的数据。 若判断结果为是,转至步骤S105,将新的当前焦点数据导入至UI模块中,供UI模块使用; 若判断结果为否,执行步骤S108。 S108 :在内存空间中不存在UI模块所需的数据时,需要更新内存空间中的数据。 首先判断内存空间是否还有未写入数据的空闲区域。若判断结果为是,转至步骤S104,利用 所创建的数据抽象类从数据库读取UI所需的有效数据至所述内存空间中的空闲区域,实 现内存空间数据的更新,满足UI模块的数据需求;若判断结果为否,执行步骤S109。
S 109 :在更新内存空间中的数据时,若内存空间不存在未写入数据的空闲区域, 需要擦除内存空间中较旧的数据。 擦除所述内存空间中较旧的数据以更新内存空间,可采用下述方法来进行
若UI模块所需的数据相对于所述内存空间中已存储的数据是向上移动的,则擦 除所述内存空间中后半部分的数据,并将所述内存空间中存储的前半部分的数据移动到内 存空间的后半部分中,然后将从数据库中读取的UI模块所需的数据添加到所述内存空间 的前半部分中; 若UI模块所需的数据相对于所述内存空间中已存储的数据是向下移动的,则擦 除所述内存空间中前半部分的数据,并将所述内存空间中存储的后半部分的数据移动到内 存空间的前半部分中,然后将从数据库中读取的UI模块所需的数据添加到所述内存空间 的后半部分中。 在更新UI模块所需的数据时,不需要重新申请存储空间,只需将数据抽象类所维 护的内存空间中的数据进行更新即可,从而在很大程度上降低了内存的占用,提高了系统 的稳定性。 S110 :判断内存空间较旧的数据是否擦除成功。若擦除成功,转至步骤S104,利用 所创建的数据抽象类从数据库读取UI所需的有效数据至所述内存空间中新擦除出的空闲 区域,实现内存空间数据的更新,满足UI模块的数据需求;若擦除不成功,执行步骤Slll。
Slll :若擦除内存空间失败,则数据抽象类只维护现有内存空间中的正确数据,而 丢弃擦除失败的数据,并且发出错误通知给UI模块,告知UI模块读取不到其所需的数据, 让UI模块进行相关的错误提示和容错处理。然后转至步骤S113。 S112:该步骤是由步骤S106转来,在UI模块没有数据请求时,结束数据导入,销毁 所创建的数据抽象类,释放内存空间以回归系统资源。然后,转至步骤S113。
S113 :数据导入流程结束。 上述实施例在不改变嵌入式系统原有系统架构的基础上,针对嵌入式系统的内存 小、响应速度快的特点,利用尽可能小的系统内存分批导入数据库中的大量数据,从而高效 地为UI模块提供所需的数据,降低了嵌入式系统的内存占用,减小了 UI模块和数据库之间的耦合度,满足了系统各模块间高内聚、低耦合的性能要求,提高了系统的整体性能。
当然,以上所述仅是本发明的一种优选实施方式而已,应当指出,对于本技术领域 的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改 进和润饰也应视为本发明的保护范围。
权利要求
一种数据导入的方法,其特征在于,包括下述步骤创建数据抽象类作为数据库的基类,为所述数据抽象类申请内存空间;利用所述数据抽象类从数据库中读取数据至所述内存空间;UI模块从所述内存空间中导入所需的数据;其中,所述内存空间的大小根据UI模块每次可显示的数据量来确定。
2. 根据权利要求1所述的数据导入的方法,其特征在于,所述内存空间的大小为UI模块每次可显示的数据量所占据的空间的4-5倍。
3. 根据权利要求2所述的数据导入的方法,其特征在于,在利用所述数据抽象类从数据库中读取数据至所述内存空间的步骤中,若数据库中符合所述数据抽象类的数据不大于所述内存空间的存储量,则将所有符合所述数据抽象类的数据全部读取至所述内存空间中;若数据库中符合所述数据抽象类的数据大于所述内存空间的存储量,则只读取所述内存空间所能存储的数据至所述内存空间中。
4. 根据权利要求1所述的数据导入的方法,其特征在于,在创建数据抽象类之前,还包括UI模块启动、发出查询数据请求的步骤。
5. 根据权利要求1至4中任一项所述的数据导入的方法,其特征在于,若所述内存空间中不存在UI模块所需的数据,则更新所述内存空间中的数据。
6. 根据权利要求5所述的数据导入的方法,其特征在于,更新所述内存空间中的数据的具体过程如下判断所述内存空间是否还存在未写入数据的空闲区域;在所述内存空间存在未写入数据的空闲区域时,利用所述数据抽象类从数据库中读取UI模块所需的数据至所述空闲区域;在所述内存空间不存在未写入数据的空闲区域时,擦除所述内存空间中较旧的数据,然后利用所述数据抽象类从数据库中读取UI模块所需的数据并添加至所述内存空间。
7. 根据权利要求6所述的数据导入的方法,其特征在于,若擦除所述内存空间中较旧的数据失败,则数据抽象类只维护现有内存空间中的正确数据,而丢弃擦除失败的数据,并且发出错误通知给UI模块。
8. 根据权利要求7所述的数据导入的方法,其特征在于,擦除所述内存空间中较旧的数据以更新内存空间的方法为若UI模块所需的数据相对于所述内存空间中已存储的数据是向上移动的,则擦除所述内存空间中后半部分的数据,并将所述内存空间中存储的前半部分的数据移动到内存空间的后半部分中,然后将从数据库中读取的UI模块所需的数据添加到所述内存空间的前半部分中;若UI模块所需的数据相对于所述内存空间中已存储的数据是向下移动的,则擦除所述内存空间中前半部分的数据,并将所述内存空间中存储的后半部分的数据移动到内存空间的前半部分中,然后将从数据库中读取的UI模块所需的数据添加到所述内存空间的后半部分中。
9. 根据权利要求1所述的数据导入的方法,其特征在于,若UI模块停止数据请求,则销毁所创建的数据抽象类,释放相应的内存空间。
10. 根据权利要求1所述的数据导入的方法,其特征在于,所述数据抽象类用容器封装。
全文摘要
本发明公开了一种数据导入的方法,包括下述步骤创建数据抽象类作为数据库的基类,为所述数据抽象类申请内存空间;利用所述数据抽象类从数据库中读取数据至所述内存空间;UI模块从所述内存空间中导入所需的数据;其中,所述内存空间的大小根据UI模块每次可显示的数据量来确定。本发明通过创建数据抽象类作为数据导入管理的中间层,用于数据的导入和内存的管理,实现了利用较小的内存空间将大量数据分批提供给UI模块来使用的目的。
文档编号G06F17/30GK101714165SQ20091023118
公开日2010年5月26日 申请日期2009年12月8日 优先权日2009年12月8日
发明者刘作珍 申请人:青岛海信宽带多媒体技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1