Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
DATA STORAGE METHOD AND DEVICE
Document Type and Number:
WIPO Patent Application WO/2013/131443
Kind Code:
A1
Abstract:
Disclosed are a data storage method and device. The method comprises: according to a preset configuration policy, configuring an extensible two-dimensional data cache array in a local sharing memory, the two-dimensional data cache array comprising a plurality of logical data blocks, each logical data block comprising a plurality of data sub-blocks used for storing data; and according to service logic requirements, storing data in a network storage device into corresponding data sub-blocks. The embodiments of the present invention can be applied to achieve the purpose of locally storing data, thereby being able to increase the efficiency of data storage and exchange. In addition, because a two-dimensional data cache array which stores data is extensible, the expandability of a data structure is increased, thereby being able to meet service logic requirements.

Inventors:
LIN AIMIN (CN)
TANG JIONG (CN)
WANG JUNSHUAI (CN)
Application Number:
PCT/CN2013/072042
Publication Date:
September 12, 2013
Filing Date:
March 01, 2013
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
TENCENT TECH SHENZHEN CO LTD (CN)
International Classes:
H04L29/08
Foreign References:
CN102035881A2011-04-27
CN1545033A2004-11-10
CN101398821A2009-04-01
Other References:
See also references of EP 2824893A4
Attorney, Agent or Firm:
DEQI INTELLECTUAL PROPERTY LAW CORPORATION (CN)
北京德琦知识产权代理有限公司 (CN)
Download PDF:
Claims:
权利要求书

1、 一种存储数据的方法, 其特征在于, 所述方法包括:

根据预设的配置策略在本地共享内存中配置可扩展的二维数据緩存 阵列, 所述二维数据緩存阵列包括多个逻辑数据块, 每个所述逻辑数据 块包括多个用于存储数据的子数据块;

根据业务逻辑需求, 将网络存储设备上的数据存储至所述数据对应 的子数据块中。

2、根据权利要求 1所述的方法, 其特征在于, 所述根据预设的配置 策略在本地共享内存中配置可扩展的二维数据緩存阵列之后, 还包括: 根据每个所述子数据块中存储的数据的情况, 为每个所述子数据块 设置数据状态, 所述数据状态为空闲状态、 加载状态、 正常状态、 修改 状态、 释放状态和定时释放状态中的一种。

3、根据权利要求 2所述的方法, 其特征在于, 所述根据业务逻辑需 求, 将网络存储设备上的数据存储至所述数据对应的子数据块中之后, 还包括: 根据业务逻辑, 修改所述子数据块中存储的数据, 并将修改后 的数据同步至所述网络存储设备。

4、根据权利要求 3所述的方法, 其特征在于, 所述将修改后的数据 同步至所述网络存储设备, 包括:

定时轮询每个所述子数据块的数据状态, 将所述数据状态为修改状 态的子数据块中的数据同步至所述网络存储设备。

5、根据权利要求 4所述的方法, 其特征在于, 所述将数据状态为修 改状态的子数据块中的数据同步至所述网络存储设备之后, 还包括: 将 所述数据状态为修改状态的子数据块的数据状态修改为正常状态。

6、根据权利要求 2所述的方法, 其特征在于, 所述根据业务逻辑需 求, 将网络存储设备上的数据存储至所述数据对应的子数据块中之后, 还包括:

根据业务逻辑将所述子数据块中的数据同步至所述网络存储设备, 并释放所述子数据块对应的共享内存。

7、根据权利要求 6所述的方法, 其特征在于, 所述根据业务逻辑将 所述子数据块中的数据同步至所述网络存储设备, 包括:

查询每个所述子数据块的数据状态, 并将所述数据状态为定时释放 状态的子数据块中的数据同步至所述网络存储设备。

8、根据权利要求 7所述的方法, 其特征在于, 所述将所述数据状态 为定时释放状态的子数据块中的数据同步至所述网络存储设备之后, 还 态。

9、根据权利要求 2所述的方法, 其特征在于, 所述根据业务逻辑需 求,将网络存储设备上的数据存储至所述数据对应的子数据块中, 包括: 在所有所述子数据块中选择数据状态为空闲状态的子数据块, 根据 业务逻辑需求, 将所述网络存储设备上的数据存储至选择的子数据块 中。

10、 根据权利要求 9所述的方法, 其特征在于, 所述将所述网络存 储设备上的数据存储至选择的子数据块中之后, 还包括:

将所述选择的子数据块的数据状态由空闲状态修改为加载状态, 并 在数据加载完毕后, 将所述选择的子数据块的数据状态由加载状态修改 为正常状态。

11、根据权利要求 1至 10中任一权利要求所述的方法,其特征在于, 所述根据预设的配置策略在本地共享内存中配置可扩展的二维数据緩 存阵列之后, 还包括: 建立所述二维数据緩存阵列与所述网络存储设备的映射关系表, 并 根据所述二维数据緩存阵列的子数据块中的数据变化更新所述映射关 系表, 所述映射关系表存储在所述网络存储设备上, 并记录了每个逻辑 数据块中的各个子数据块的数据存储情况; 其中, 所述二维数据緩存阵 列中的每个逻辑数据块对应一个所述映射关系表, 每个逻辑数据块中的 子数据块对应所述映射关系表中的一条记录。

12、 一种存储数据的装置, 其特征在于, 所述装置包括:

配置模块, 用于根据预设的配置策略在本地共享内存中配置可扩展 的二维数据緩存阵列, 所述二维数据緩存阵列包括多个逻辑数据块, 每 个所述逻辑数据块包括多个用于存储数据的子数据块;

加载模块, 用于根据业务逻辑需求, 将网络存储设备上的数据存储 至所述数据对应的子数据块中。

13、 根据权利要求 12所述的装置, 其特征在于, 所述装置还包括: 设置模块, 用于根据每个所述子数据块中存储的数据的情况, 为每 个所述子数据块设置数据状态, 所述数据状态为空闲状态、 加载状态、 正常状态、 修改状态、 释放状态和定时释放状态中的一种。

14、 根据权利要求 13所述的装置, 其特征在于, 所述装置还包括: 修改模块, 用于根据业务逻辑, 修改所述子数据块中存储的数据; 修改同步模块, 用于将所述修改模块修改后的数据同步至所述网络 存储设备。

15、根据权利要求 14所述的装置, 其特征在于, 所述修改同步模块 包括:

轮询单元, 用于定时轮询每个所述子数据块的数据状态;

修改同步单元, 用于将所述轮询单元轮询到的数据状态为修改状态 的子数据块中的数据同步至所述网络存储设备。 16、根据权利要求 15所述的装置,其特征在于,所述修改同步模块, 还包括: 状态修改单元, 用于将所述数据状态为修改状态的子数据块的 数据状态修改为正常状态。

17、 根据权利要求 13所述的装置, 其特征在于, 所述装置还包括: 释放同步模块, 用于根据业务逻辑将所述子数据块中的数据同步至 所述网络存储设备;

释放模块, 用于在所述释放同步模块根据业务逻辑将所述子数据块 中的数据同步至所述网络存储设备之后, 释放所述子数据块对应的共享 内存。

18、根据权利要求 17所述的装置,其特征在于,所述释放同步模块, 包括:

查询单元, 用于查询每个所述子数据块的数据状态;

释放同步单元, 用于将所述查询单元查询到的所述数据状态为定时 释放状态的子数据块中的数据同步至所述网络存储设备。

19、根据权利要求 18所述的装置,其特征在于,所述释放同步模块, 还包括: 状态修改为空闲状态。

20、 根据权利要求 13所述的装置, 其特征在于, 所述加载模块, 包 括:

选择单元, 用于在所有所述子数据块中选择数据状态为空闲状态的 子数据块;

加载单元, 用于根据业务逻辑需求, 将所述网络存储设备上的数据 存储至所述选择单元选择出的子数据块中。

21、 根据权利要求 20所述的装置, 其特征在于, 所述加载模块, 还 包括:

状态修改单元, 用于将所述选择出的子数据块的数据状态由空闲状 态修改为加载状态, 并在数据加载完毕后, 将所述选择出的子数据块的 数据状态由加载状态修改为正常状态。

22、 根据权利要求 12至 20中任一权利要求所述的装置, 其特征在 于, 所述装置还包括:

建立模块, 用于建立所述二维数据緩存阵列与所述网络存储设备的 映射关系表, 所述映射关系表存储在所述网络存储设备上, 并记录了每 个逻辑数据块中的各个子数据块的数据存储情况;

更新模块, 用于根据所述二维数据緩存阵列的子数据块中的数据变 化更新所述建立模块建立的映射关系表;

其中, 所述二维数据緩存阵列中的每个逻辑数据块对应一个所述映 射关系表, 每个逻辑数据块中的子数据块对应所述映射关系表中的一条 记录。

Description:
存储数据的方法及装置

技术领域

本发明涉及计算机技术领域,特别涉及一种存 储数据的方法及装置。 发明背景

随着游戏市场的蓬勃发展, 游戏的种类层出不穷, 参与游戏的人数 也逐渐从单人发展到多人。 随着人数的增多, 游戏产生的数据量也逐渐 加大, 业务逻辑也随之变得更为复杂。 如何高效地存储业务逻辑产生的 数据, 以向用户提供更好的服务, 成为了游戏厂家十分关注的问题。

在现有技术中, 在存储业务逻辑产生的数据时, 将业务逻辑产生的 数据通过网络传输到网络存储设备上, 并由该网络存储设备上的数据库 进行存储。 并且为了加快数据交互的速度, 该网络存储设备上建立了緩 存空间, 交互频率比较高的数据被存储在该緩存空间。

但是, 由于在游戏场景中, 随时都可能发生数据的更新, 无论将业 务逻辑产生的数据存储在网络存储设备的緩存 空间中还是存储在数据 库中, 均需要多次通过网络连接至网络存储设备, 而网络连接本身就会 导致存储效率的降低, 还将影响后续的数据交互效率; 同时, 如果数据 库中的数据结构固定, 可扩展性不高, 将无法满足业务逻辑要求数据结 构变更的需求。 发明内容

为了在提高数据存储效率的同时, 提高数据结构的可扩展性, 以满 足业务逻辑的需求, 本发明实施例提供了一种存储数据的方法及装 置。

一种存储数据的方法, 所述方法包括: 根据预设的配置策略在本地共享内存中配置可 扩展的二维数据緩存 阵列, 所述二维数据緩存阵列包括多个逻辑数据块, 每个所述逻辑数据 块包括多个用于存储数据的子数据块;

根据业务逻辑需求, 将网络存储设备上的数据存储至所述数据对应 的子数据块中。

一种存储数据的装置, 所述装置包括:

配置模块, 用于根据预设的配置策略在本地共享内存中配 置可扩展 的二维数据緩存阵列, 所述二维数据緩存阵列包括多个逻辑数据块, 每 个所述逻辑数据块包括多个用于存储数据的子 数据块;

加载模块, 用于根据业务逻辑需求, 将网络存储设备上的数据存储 至所述数据对应的子数据块中。

本发明实施例提供的技术方案的有益效果是:

通过根据预设的配置策略在本地共享内存中配 置可扩展的二维数据 緩存阵列, 并根据业务逻辑需求, 将网络存储设备上的数据存储至二维 数据緩存阵列的对应的子数据块中, 实现本地存储数据, 从而可以提高 数据存储及交互的效率, 且由于存储数据的二维数据緩存阵列为可扩展 的, 因而提高了数据结构的可扩展性, 从而能够满足业务逻辑的需求; 另外, 在子数据块中的数据修改后, 通过将修改后的数据同步至网络存 储设备, 进而实现本地共享内存与网络存储设备的数据 同步, 有效防止 数据丟失。 附图简要说明

为了更清楚地说明本发明实施例中的技术方案 , 下面将对实施例描 述中所需要使用的附图作筒单地介绍, 显而易见地, 下面描述中的附图 仅仅是本发明的一些实施例, 对于本领域普通技术人员来讲, 在不付出 创造性劳动的前提下, 还可以根据这些附图获得其他的附图。

图 1是本发明实施例提供的一种存储数据的方法 程图; 图 2是本发明实施例提供的一种数据存储系统的 构示意图; 图 3是本发明另一实施例提供的一种存储数据的 法流程图; 图 4是本发明实施例提供的一种数据状态转换图

图 5是本发明实施例提供的一种逻辑数据块的结 示意图; 图 6是本发明实施例提供的一种映射关系表示意 ;

图 7是本发明实施例提供的第一种存储数据的装 结构示意图; 图 8是本发明实施例提供的第二种存储数据的装 结构示意图; 图 9是本发明实施例提供的第三种存储数据的装 结构示意图; 图 10是本发明实施例提供的第四种存储数据的装 结构示意图; 图 11是本发明实施例提供的第五种存储数据的装 结构示意图; 图 12是本发明实施例提供的第六种存储数据的装 结构示意图; 图 13是本发明实施例提供的第七种存储数据的装 结构示意图。 实施本发明的方式 为使本发明的目的、 技术方案和优点更加清楚, 下面将结合附图对 本发明实施方式作进一步地详细描述。

本发明实施例提供了一种存储数据的方法, 参见图 1 , 该方法包括 如下步骤。

在步骤 101中, 根据预设的配置策略在本地共享内存中配置可 扩展 的二维数据緩存阵列, 该二维数据緩存阵列包括多个逻辑数据块, 每个 逻辑数据块包括多个用于存储数据的子数据块 。

在步骤 102中, 根据业务逻辑需求, 将网络存储设备上的数据存储 至对应的子数据块中。 进一步地, 根据预设的配置策略在本地共享内存中配置可 扩展的二 维数据緩存阵列之后, 还包括: 根据每个子数据块中存储数据的情况为 每个子数据块设置数据状态, 该数据状态为空闲状态、 加载状态、 正常 状态、 修改状态、 释放状态和定时释放状态中的一种。

进一步地, 根据业务逻辑需求, 将网络存储设备上的数据存储至对 应的子数据块中之后, 还包括: 修改与该业务逻辑对应的子数据块中的 数据, 并将修改后的数据同步至网络存储设备。 其中, 将修改后的数据 同步至网络存储设备, 包括: 定时轮询每个子数据块的数据状态, 将数 据状态为修改状态的子数据块中的数据同步至 网络存储设备。 进一步 地, 将数据状态为修改状态的子数据块中的数据同 步至网络存储设备之 后, 还包括: 将数据状态为修改状态的子数据块的数据状态 修改为正常 状态。

进一步地, 根据业务逻辑需求, 将网络存储设备上的数据存储至对 应的子数据块中之后, 还包括: 将与该业务逻辑对应的子数据块中的数 据同步至网络存储设备, 并释放该子数据块对应的共享内存。 其中, 根 据业务逻辑将对应的子数据块中的数据同步至 网络存储设备, 具体包 括: 查询每个子数据块的数据状态, 并将数据状态为定时释放状态的子 数据块中的数据同步至网络存储设备。 进一步地, 将数据状态为定时释 放状态的子数据块中的数据同步至网络存储设 备之后, 还包括: 将数据 状态为定时释放状态的子数据块的状态修改为 空闲状态。

其中, 根据业务逻辑需求, 将网络存储设备上的数据存储至对应的 子数据块中, 包括: 在所有子数据块中选择数据状态为空闲状态的 子数 据块, 根据业务逻辑需求, 将网络存储设备上的数据存储至选择的子数 据块中。 进一步地, 将网络存储设备上的数据存储至选择的子数据 块中 之后, 还包括: 将选择的子数据块的数据状态由空闲状态修改 为加载状 态, 并在数据加载完毕后, 将选择的子数据块的数据状态由加载状态修 改为正常状态。

进一步地, 根据预设的配置策略在本地共享内存中配置可 扩展的二 维数据緩存阵列之后, 还包括: 建立二维数据緩存阵列与网络存储设备 的映射关系表, 并根据二维数据緩存阵列的子数据块中的数据 变化更新 映射关系表, 映射关系表存储在网络存储设备上, 并记录了每个逻辑数 据块中的各个子数据块的数据存储情况; 其中, 二维数据緩存阵列中的 每个逻辑数据块对应一个映射关系表, 每个逻辑数据块中的子数据块对 应映射关系表中的一条记录。

本实施例提供的方法, 通过根据预设的配置策略在本地共享内存中 配置可扩展的二维数据緩存阵列, 并根据业务逻辑需求, 将网络存储设 备上的数据存储至二维数据緩存阵列的对应的 子数据块中, 实现本地存 储数据, 从而可以提高数据存储及交互的效率, 且由于存储数据的二维 数据緩存阵列为可扩展的, 因而提高了数据结构的可扩展性, 从而能够 满足业务逻辑的需求; 另外, 在子数据块中的数据修改后, 通过将修改 后的数据同步至网络存储设备, 进而实现本地共享内存与网络存储设备 的数据同步, 有效防止数据丟失。

本发明另一实施例提供了一种存储数据的方法 , 该方法通过在本地 共享内存中配置可扩展的二维数据緩存阵列, 对于随系统运行变化而持 续变化的数据, 不仅由网络存储设备进行存储, 还将其从网络存储设备 上存储至该二维数据緩存阵列的子数据块中, 从而实现数据的本地存储 及调用。 为了便于说明, 结合上述实施例的内容, 本实施例以图 2所示 的数据存储系统为例, 对本实施例提供的方法进行详细地举例说明。 参 见图 3 , 本实施例提供的方法包括如下步骤。

在步骤 301中, 根据预设的配置策略在本地共享内存中配置可 扩展 的二维数据緩存阵列, 该二维数据緩存阵列包括多个逻辑数据块, 每个 逻辑数据块包括多个用于存储数据的子数据块 。

其中, 预设的配置策略用于对二维数据緩存阵列中的 逻辑数据块个 数以及每个逻辑数据块中的子数据块个数和容 量进行配置, 从而实现对 数据结构扩展。 在本发明实施例中, 对数据结构的扩展包括对二维数据 緩存阵列中的逻辑数据块数量的增减变更, 以及对二维数据緩存阵列中 每个逻辑数据块的子数据块个数和容量的增减 变更。 具体实现时, 该配 置策略可根据实际情况设置。 例如, 根据业务逻辑对数据结构的需求设 置配置策略中配置的逻辑数据块个数以及子数 据块的个数和容量, 或采 用其他设置方式进行配置, 本实施例不对预设的配置策略中所配置的逻 辑数据块个数以及子数据块个数和容量进行限 定。 本地共享内存是指在 多任务处理器的计算机系统中, 可以被不同中央处理器访问的大容量内 存, 且该共享内存可直接读写, 以提高处理器的处理效率。

本步骤中, 可以结合图 2所示的数据存储系统的结构, 调用业务逻 辑进程和数据同步代理进程中先启动的一个进 程来在本地共享内存中 配置可扩展的二维数据緩存阵列。 例如, 如果业务逻辑进程较数据同步 代理进程先启动, 则由业务逻辑进程根据预设的配置策略在本地 共享内 存中配置可扩展的二维数据緩存阵列; 如果数据同步代理进程较业务逻 辑进程先启动, 则由数据同步代理进程根据预设的配置策略在 本地共享 内存中配置可扩展的二维数据緩存阵列。 无论哪个进程执行上述配置操 作, 都需要先根据预设的配置策略申请本地共享内 存, 之后再在申请的 本地共享内存中配置二维数据緩存阵列。 配置的二维数据緩存阵列包括 多个逻辑数据块, 每个逻辑数据块包括多个用于存储数据的子数 据块。 为了区别不同的逻辑数据块中的子数据块, 可采用坐标的形式对子数据 块进行标识。 如图 2所示, 以配置的二维数据緩存阵列中包括 N个逻辑 数据块、 每个逻辑数据块中包括 n个子数据块为例, 则可用二维数据坐 标( N, n )表示第 N个逻辑数据块中的第 n个子数据块。

进一步地, 无论以何种方式标识子数据块, 每个子数据块均可用于 存储数据, 且二维数据緩存阵列中的逻辑数据块按照逻辑 功能可分为动 态逻辑数据块和静态逻辑数据块, 动态逻辑数据块中的子数据块用于存 储动态数据, 静态逻辑数据块中的子数据块用于存储静态数 据。 其中, 动态数据包括可动态加载、 释放和同步的数据; 用于存储动态数据的子 数据块对应的共享内存空间可循环使用, 比如业务逻辑中的游戏玩家角 色数据, 角色的上下线就涉及数据的同步拉取和存储。 静态数据在一次 加载完成后始终不被释放, 常驻共享内存, 因而用于存储静态数据的子 数据块对应的共享内存空间无需释放, 且静态数据采用定时机制与网络 存储设备进行数据同步, 比如游戏中的市场交易大厅数据。 在本实施例 中不对逻辑数据块为动态逻辑数据块还是静态 逻辑数据块进行限定, 实 际应用中, 也可通过配置策略进行配置。

另外, 在配置得到二维数据緩存阵列后, 由于二维数据緩存阵列配 置在共享内存中, 其中的逻辑数据块和子数据块的地址均为共享 内存中 的物理地址, 而业务逻辑处理进程及数据同步代理进程中的 地址为逻辑 地址, 为了后续能够通过业务逻辑处理进程及数据同 步代理进程对配置 的二维数据緩存阵列中的数据进行操作, 配置该二维数据緩存阵列的进 程在配置结束后, 还需要将二维数据緩存阵列的内存空间映射到 自身进 程内存空间, 即实现物理地址到逻辑地址的转化。 对于未配置二维数据 緩存阵列的那个进程, 可在启动后将二维数据緩存阵列的内存空间映 射 到自身进程内存空间。

需要说明的是, 当二维数据緩存阵列被配置后, 在系统不断电、 内 存不被手动清除或破坏的情况下, 二维数据緩存阵列及其中的数据将保 持连续性和独立性。 也就是说, 一旦二维数据緩存阵列配置完成, 在系 统不断电、 内存仍然存在的情况下, 该二维数据緩存阵列的数据结构以 及其中的数据一直存在。 但如果系统断电、 内存被清除或是破坏, 需要 重新执行二维数据緩存阵列的配置过程。 对于业务逻辑进程与数据同步 代理进程, 无论系统是否断电、 内存是否被修改或破坏, 如果业务逻辑 进程或数据同步代理进程被重新启动, 均需要重新执行将物理地址转换 成逻辑地址的过程。

在步骤 302中, 根据每个子数据块中存储数据的情况, 为每个子数 据块设置数据状态, 其中, 数据状态为空闲状态、 加载状态、 正常状态、 修改状态、 释放状态和定时释放状态中的一种。

具体地, 在步骤 301中得到配置的二维数据緩存阵列之后, 为了明 确每个子数据块中存储数据的情况, 在本步骤中根据每个子数据块中存 储数据的情况, 为每个子数据块设置数据状态, 其中, 每个子数据块的 数据状态包括但不限于如下 6种数据状态:

1、 空闲 (free): 待分配数据;

2、 加载 (loading): 数据加载中;

3、 正常 (normal): 数据加载完毕;

4、 修改 (modify): 数据被修改;

5、 释放 (remove): 数据存储并释放中;

6、 定时释放 (tick_remove): 数据释放失败后, 将子数据块置为本状 态, 即可通过定时控制, 定时释放该数据, 直到数据释放成功。

在数据存储及更新的过程中, 子数据块的数据状态可在上述 6种状 态之间进行转化, 转化关系可如图 4所示。 对于二维数据緩存阵列中的 子数据块而言, 在二维数据緩存阵列初始配置完成时, 由于子数据块中 还未存储数据, 则其数据状态为空闲状态, 之后再根据数据存储的变化 情况及时更改数据状态。

在对每个子数据块设置完数据状态后, 完成了二维数据緩存阵列的 所有配置。 其中每个逻辑数据块可由逻辑数据块总头及子 数据块组成。 以图 5所示的逻辑数据块的结构为例, 逻辑数据块的总头为 4个字节, 用于存放该逻辑数据块中存储数据的长度, 每个子数据块由子数据块的 头结构及数据组成, 子数据块的头结构可如下所示:

header

Key //数据对应的键值 key

Ver 〃数据版本号

Time //数据修改时间

Status //数据的状态 其中, 数据在子数据块中的键值 key与该数据在网络存储设备中的 key是一致的, 也就是说, 无论数据是存储在本地共享内存中, 还是存 储在网络存储设备中, 每个数据对应的 key是不变的, 由此便于一个数 据在多个位置存储时的查找。 且在配置完二维数据緩存阵列后, 当一个 子数据块被分配了数据时, 则相应修改该子数据块头结构的 key, ver, time, status的值, 且该子数据块不会被再次分配, 除非该子数据块中的 数据被释放并且为 free状态; 当一个子数据块中的数据被释放时, 则相 应清除该子数据块的数据, 并修改该子数据块头结构的 key, ver, time, status的值。

进一步地, 由于二维数据緩存阵列中的子数据块用于存储 数据, 为 了保证本地共享内存中的数据与网络存储设备 上的数据保持同步, 本实 施例提供的方法在建立二维数据緩存阵列后, 还包括: 建立二维数据緩存阵列与网络存储设备的映射 关系表, 并根据二维 数据緩存阵列的子数据块中的数据变化更新映 射关系表。 该映射关系表 存储在网络存储设备上, 并记录了每个逻辑数据块中的各个子数据块的 数据存储情况。

在本实施例中, 二维数据緩存阵列中的每个逻辑数据块对应一 个映 射关系表, 每个逻辑数据块中的子数据块对应映射关系表 中的一条记 录。

具体地, 建立的映射关系表可如图 6所示, 二维数据緩存阵列中的 一个逻辑数据块对应存储在数据库中的一个映 射关系表, 该映射关系表 记录了该逻辑数据块的结构, 每个逻辑数据块中的子数据块对应映射关 系表中的一条记录, 而且每条记录的大小是固定的, 与逻辑数据块中的 子数据块的结构大小对应。 又由于子数据块中的数据有时会发生变化, 因而与该子数据块对应的映射关系表中的记录 也将对应更新, 即在建立 映射关系表之后, 需要根据二维数据緩存阵列的子数据块中的数 据变化 更新映射关系表。

至此, 通过上述步骤 301至步骤 302的配置操作, 为数据的本地存 储以及交互提供了配置保障。

在步骤 303中, 在所有子数据块中选择数据状态为空闲状态的 子数 据块, 根据业务逻辑需求, 将网络存储设备上的数据存储至选择出的子 数据块中。

在本步骤中, 为了避免每次都通过网络连接至网络存储设备 来存储 数据以及进行数据交互带来的效率低下的问题 , 本实施例提供的方法通 过将网络存储设备上的数据存储至本地共享内 存的二维数据緩存阵列 中, 从而实现数据的本地存储。 且在将网络存储设备上的数据存储至本 地共享内存时, 需要先确定空闲的内存, 由于每个子数据块中的数据存 储情况可由数据状态来标识, 因而在所有子数据块中选择数据状态为空 闲状态的子数据块, 再根据业务逻辑确定将网络存储设备上的哪些 数据 存储至选择出的空闲状态的子数据块中。 接下来, 结合图 2所示的数据 系统结构, 对该步骤的具体加载过程进行详细描述。

在图 2中, 由于业务逻辑进程和数据同步代理进程在二维 数据緩存 阵列配置阶段已实现了共享内存中的物理地址 到各自空间逻辑地址的 转化, 因而业务逻辑进程和数据同步代理进程可以获 知二维数据緩存阵 列中的各个子数据块的地址。 根据业务逻辑确定需要将网络存储设备上 的数据存储至本地共享内存时, 业务逻辑进程通过该业务逻辑进程所在 设备的数据接口在二维数据緩存阵列的所有子 数据块中选择数据状态 为空闲状态的子数据块, 即得到待加载数据的子数据块的坐标(N, n ), 之后再由该业务逻辑进程所在设备的数据接口 通过消息队列向数据同 步代理进程发送对应的数据加载消息, 该数据加载消息中除了携带选择 出的子数据块的坐标, 至少还携带操作类型以及待加载数据的标识, 以 使数据同步代理进程明确对哪个子数据块执行 何种操作。 由于该步骤是 加载数据的操作, 因此, 该数据加载消息中携带的操作类型为加载; 而 待加载数据的标识用于明确该待加载数据为网 络存储设备中的哪个数 据。 在本实施例中, 无论数据在网络存储设备上存储, 还是在本地共享 内存中存储, 均采用键值 key作为每个数据的标识。

数据同步代理进程接收到该数据加载消息后, 在线程池中选择一个 空闲线程, 由该空闲线程根据该数据加载消息中携带的待 加载数据的键 值 key从网络存储设备获取待加载的数据。 本实施例中, 网络存储设备 仍然以数据库来存储产生的所有数据。 为了提高数据存储及交互的效 率, 本实施例中预先对数据库中的数据调用频率进 行统计, 将数据按照 调用频率从高到低的顺序排序, 并预先将调用频率高的数据存储在緩存 空间中, 则使数据同步代理进程中的线程可直接从緩存 空间中读取待加 载的数据, 进而提高数据的读取效率。 当然, 在系统性能允许的情况下, 数据同步代理进程中的线程也可直接操作数据 库, 本实施例在此不作具 体限定。

数据同步代理进程中的线程在获取待加载数据 时, 先根据数据加载 消息中携带的待加载数据的键值 key在緩存空间中查找待加载数据, 如 果緩存空间中存在该待加载数据, 则通过緩存空间与数据同步代理进程 之间的数据同步接口将该待加载数据传送给数 据同步代理进程, 如果緩 存空间中不存在待加载数据, 则从数据库中查找该待加载数据, 并将该 待加载数据緩存在緩存空间中, 之后再通过緩存空间与数据同步代理进 程之间的数据同步接口将该待加载数据传送给 数据同步代理进程。 无论 是从緩存空间中直接查找到待加载数据, 还是从数据库中查找到待加载 数据, 数据同步代理进程在接收到待加载数据后, 通过数据同步代理进 程端的数据接口将该待加载数据写入对应的子 数据块中, 即数据加载消 息中携带的坐标所对应的子数据块中。 在数据加载过程中, 将该正在加 载数据的子数据块的数据状态由空闲状态修改 为加载状态, 并在加载完 成后, 再将数据状态由加载状态修改为正常状态。 至此, 将网络存储设 备上存储的数据加载到本地共享内存的操作结 束, 如果后续应用需要调 用该数据或对该数据进行其他操作, 即可在本地实现, 而无需再通过网 络连接至网络存储设备。 对于加载在本地共享内存中的数据, 如果由于 业务逻辑需要修改, 具体的修改流程详见如下步骤。

在步骤 304中, 根据业务逻辑修改子数据块中的数据。

在本步骤中, 由于存储在本地共享内存中的数据随系统运行 变化而 持续变化, 因而在后续数据交互过程中, 更新的可能性也比较大, 也因 为如此, 子数据块中存储的数据被修改的情况也将时常 发生, 本实施例 不对修改数据的触发条件进行限定。 例如, 业务逻辑中的游戏玩家角色 数据, 角色的上下线发生变化, 均可触发根据业务逻辑修改子数据块中 已存储的数据。 具体修改时, 业务逻辑进程可通过业务逻辑进程所在设 备的数据接口将修改后的数据直接替换对应的 子数据块中已存储的数 据,并在修改完成后,将该子数据块的状态由 正常状态修改为修改状态。

在步骤 305中, 定时轮询每个子数据块的数据状态, 将数据状态为 修改状态的子数据块中的数据同步至网络存储 设备。

具体地, 在二维数据緩存阵列的子数据块中的数据被修 改后, 为了 使本地共享内存与网络存储设备之间保持数据 同步, 进而有效防止数据 丟失, 在本实施例中, 由数据同步代理进程定时轮询每个子数据块的 数 据状态, 并将数据状态为修改状态的子数据块中的数据 同步至网络存储 设备。 在具体实现时, 数据同步代理进程通过数据同步代理进程所在 设 备的数据接口定时轮询每个子数据块的头结构 中的数据状态, 如果轮询 到子数据块的数据状态为修改状态, 即意味着该子数据块中的数据为修 改后的数据, 数据同步代理进程通过数据同步代理进程所在 设备的数据 接口从该子数据块中获取修改后的数据及键值 key, 并在线程池中选择 一个空闲的线程, 由该空闲的线程将该修改后的数据替换緩存空 间中与 该修改后的数据具有相同键值 key的数据, 之后网络存储设备可将緩存 空间中修改的数据即刻同步存储到数据库中, 也可定时检查緩存空间的 更新情况, 将一段时间内修改的数据一次性同步存储到数 据库中。

为了避免后续步骤将同一修改后的数据重复同 步至网络存储设备, 数据同步代理进程将数据状态为修改状态的子 数据块中的数据同步至 网络存储设备之后, 还将该数据状态为修改状态的子数据块的数据 状态 修改为正常状态的操作。

进一步地,当二维数据緩存阵列的子数据块中 的数据频繁地被修改, 需要频繁地将其同步至网络存储设备时, 如果数据同步代理进程来不及 响应, 就会出现数据同步超时的现象。 针对该种情况, 在本实施例中, 通过预设的配置策略来配置数据同步超时时间 , 并监控数据同步代理进 程进行数据同步的时间, 如果数据同步代理进程进行数据同步的时间超 过配置的数据同步超时时间, 则通过业务逻辑进程所在设备的数据接口 向业务逻辑进程返回数据业务超时状态码, 由业务逻辑决定是否重新进 行数据同步。

另外, 除了由于子数据块中的数据被修改而触发执行 数据同步操作 外, 根据业务逻辑, 可能二维数据緩存阵列的子数据块中的数据不 再随 系统运行变化而持续变化了, 但仍需持久化存储。 针对该种情况, 为了 实现持久化存储, 仍需要执行数据同步操作, 该种情况下的同步操作过 程详见如下步骤。

在步骤 306中, 根据业务逻辑, 将子数据块中的数据同步至网络存 储设备, 并释放该子数据块对应的共享内存。

本步骤中的同步操作与上述步骤 305中的同步操作的不同点在于, 上述步骤 305中的同步操作是在二维数据緩存阵列的子数 据块中的数据 被修改后, 为了保证本地共享内存与网络存储设备的数据 一致性而触发 的, 而本步骤中的同步操作是在根据业务逻辑判断 二维数据緩存阵列的 某个子数据块中的数据不再随系统运行变化而 持续变化, 但仍需要将其 持久化存储的情况下触发的。 且由于该步骤针对的数据是不再随系统运 行变化而持续变化的数据, 因而可释放该类数据占用的共享内存。

具体实现时,如图 2所示,在业务逻辑需要存储并释放内存空间 , 通过业务逻辑进程调用业务逻辑进程所在设备 的数据接口修改待释放 数据的子数据块的数据状态, 即将待释放数据的子数据块的数据状态由 正常状态修改为释放状态, 之后再由该数据接口通过消息队列向数据同 步代理进程发送数据同步释放消息 , 该数据同步释放消息中除了携带待 释放数据的子数据块的坐标, 至少还携带操作类型以及待释放数据的标 识, 以使数据同步代理进程明确对哪个子数据块执 行何种操作。 由于该 步骤是同步释放操作, 因此, 该数据同步释放消息中携带的操作类型为 释放; 而待释放数据的标识用于明确该待释放数据为 二维数据緩存阵列 的哪个子数据块中的数据。 在本实施例中, 无论数据在网络存储设备上 存储, 还是在本地共享内存中存储, 均采用键值 key作为每个数据的标 识。

数据同步代理进程接收到数据同步释放消息后 , 通过调用数据同步 代理进程所在设备的数据接口将该数据同步释 放消息中携带的坐标所 对应的子数据块中的数据取出, 并在线程池中选择一个空闲的线程, 由 该空闲的线程将取出的数据同步至网络存储设 备的数据库中, 由数据库 持久化存储该数据。

进一步地, 在数据同步代理进程执行数据同步释放的过程 中, 业务 逻辑进程所在的设备的数据接口定时检测数据 是否释放完毕, 如果检测 到该数据同步释放消息体中携带的坐标所对应 的子数据块中没有数据, 则判断释放完毕, 即该子数据块所占用的共享内存被释放, 因而将该子 数据块的数据状态由释放状态修改为空闲状态 , 则该子数据块可再次被 分配加载数据; 如果检测到该数据同步释放消息体中携带的坐 标所对应 的子数据块中还有数据, 则判断释放未结束, 但如果预设时间后释放还 未结束, 则可判断释放失败, 即该子数据块所占用的共享内存未被成功 释放, 因而将该子数据块的数据状态由释放状态修改 为定时释放状态。 其中, 关于预设时间的大小, 本实施例不做具体限定。

对于数据状态为定时释放的子数据块, 为了成功释放该子数据块占 用的共享内存, 在本实施例中, 由数据同步代理进程定时查询每个子数 据块的数据状态, 如果查询到存在数据状态为定时释放状态的子 数据 块, 则重新触发数据同步代理进程将其中的数据同 步至网络存储设备的 步骤, 且在业务逻辑进程所在设备的数据接口检测成 功释放该数据状态 为定时释放状态的子数据块中的数据之后, 将该子数据块的数据状态由 定时释放状态修改为空闲状态, 从而使该子数据块可再次被分配加载数 据。

根据本实施例提供的方法, 通过根据预设的配置策略在本地共享内 存中配置可扩展的二维数据緩存阵列, 并根据业务逻辑需求, 将网络存 储设备上的数据存储至二维数据緩存阵列的对 应的子数据块中, 实现本 地存储数据, 从而可以提高数据存储及交互的效率, 且由于存储数据的 二维数据緩存阵列为可扩展的, 因而提高了数据结构的可扩展性, 从而 能够满足业务逻辑的需求。 另外, 在子数据块中的数据修改后, 通过将 修改后的数据同步至网络存储设备, 进而实现本地共享内存与网络存储 设备的数据同步, 有效防止数据丟失。

本发明实施例还提供了一种存储数据的装置, 该装置用于执行上述 实施例所提供的存储数据的方法。 参见图 7, 该装置包括配置模块 701 和加载模块 702。

其中, 配置模块 701用于根据预设的配置策略在本地共享内存中 配 置可扩展的二维数据緩存阵列, 该二维数据緩存阵列包括多个逻辑数据 块, 每个逻辑数据块包括多个用于存储数据的子数 据块;

加载模块 702用于根据业务逻辑需求, 将网络存储设备上的数据存 储至对应的子数据块中。

其中, 本地共享内存是指在多任务处理器的计算机系 统中, 可以被 不同中央处理器访问的大容量内存, 且该共享内存可直接读写, 以提高 处理器的处理效率。 配置模块 701在本地共享内存中配置可扩展的二维 此处不再赘述。

参见图 8,该装置还可以包括设置模块 703。设置模块 703用于根据 每个子数据块中存储数据的情况,为每个子数 据块设置数据状态,其中, 数据状态为空闲状态、 加载状态、 正常状态、 修改状态、 释放状态和定 时释放状态中的一种。 该设置模块 703设置数据状态的具体方式详见上 述实施例中步骤 302的相关描述, 此处不再赘述。

参见图 9,该装置还可以包括修改模块 704和修改同步模块 705。其 中, 修改模块 704用于根据业务逻辑修改子数据块中的数据。 修改同步 模块 705用于将修改模块 704修改后的数据同步至网络存储设备。

参见图 10, 修改同步模块 705包括轮询单元 7051和修改同步单元 7052。 其中, 轮询单元 7051 用于定时轮询每个子数据块的数据状态。 修改同步单元 7052用于将轮询单元 7051轮询到的数据状态为修改状态 的子数据块中的数据同步至网络存储设备。进 一步地,修改同步模块 705 还包括状态修改单元 7053 ,用于将数据状态为修改状态的子数据块的数 据状态修改为正常状态。 其中, 该修改同步模块 705中的轮询单元 7051 轮询子数据块的数据状态的过程, 以及修改同步单元 7052修改数据的 过程详见上述实施例中步骤 304的相关描述, 此处不再赘述。

参见图 11 , 装置还可以包括释放同步模块 706和释放模块 707。 其中, 释放同步模块 706用于根据业务逻辑将对应的子数据块中的 数据同步至网络存储设备。 释放模块 707用于在释放同步模块 706根据 业务逻辑将对应的子数据块中的数据同步至网 络存储设备之后, 释放该 子数据块对应的共享内存。

进一步地, 参见图 11 , 释放同步模块 706包括查询单元 7061和释 放同步单元 7062。 其中, 查询单元 7061用于查询每个子数据块的数据 状态。 释放同步单元 7062用于将查询单元 7061查询到的数据状态为定 时释放状态的子数据块中的数据同步至网络存 储设备。 进一步地, 释放 同步模块 706还包括状态修改单元 7063 ,用于将数据状态为定时释放状 态的子数据块的状态修改为空闲状态。 其中, 查询单元 7061 查询数据 状态的过程, 以及释放同步单元 7062 实现定时释放同步的过程详见上 述实施例中步骤 305的相关描述, 此处不再赘述。

参见图 12, 加载模块 702包括选择单元 7021和加载单元 7022。 其 中, 选择单元 7021 用于在所有子数据块中选择数据状态为空闲状 态的 子数据块。 加载单元 7022用于根据业务逻辑需求, 将网络存储设备上 的数据存储至选择单元选择出的子数据块中。 进一步地, 加载模块 702 还包括状态修改单元 7023 ,用于将选择出的子数据块的数据状态由空闲 状态修改为加载状态, 并在数据加载完毕后, 将选择出的子数据块的数 据状态由加载状态修改为正常状态。 其中, 选择单元 7021 选择子数据 块的方式, 以及加载单元 7022加载数据的过程详见上述实施例中步骤 303的相关描述, 此处不再赘述。

参见图 13 , 该装置还包括建立模块 708和更新模块 709。 其中, 建 立模块 708用于建立二维数据緩存阵列与网络存储设备 的映射关系表, 映射关系表存储在网络存储设备上, 并记录了每个逻辑数据块中的各个 子数据块的数据存储情况。 更新模块 709用于根据二维数据緩存阵列的 子数据块中的数据变化更新建立模块 707建立的映射关系表。 其中, 二 维数据緩存阵列中的每个逻辑数据块对应一个 映射关系表, 每个逻辑数 据块中的子数据块对应映射关系表中的一条记 录。

根据本实施例提供的装置, 通过根据预设的配置策略在本地共享内 存中配置可扩展的二维数据緩存阵列, 并根据业务逻辑需求, 将网络存 储设备上的数据存储至二维数据緩存阵列的对 应的子数据块中, 实现本 地存储数据, 从而可以提高数据存储及交互的效率, 且由于存储数据的 二维数据緩存阵列为可扩展的, 因而提高了数据结构的可扩展性, 从而 能够满足业务逻辑的需求。 另外, 在子数据块中的数据修改后, 通过将 修改后的数据同步至网络存储设备, 进而实现本地共享内存与网络存储 设备的数据同步, 有效防止数据丟失。

需要说明的是: 上述实施例提供的存储数据的装置在存储数据 时, 仅以上述各功能模块的划分进行举例说明, 实际应用中, 可以根据需要 而将上述功能分配由不同的功能模块完成, 即将装置的内部结构划分成 不同的功能模块, 以完成以上描述的全部或者部分功能。 另外, 上述实 施例提供的存储数据的装置与存储数据的方法 实施例属于同一构思, 其 具体实现过程详见方法实施例, 这里不再赘述。

本发明实施例提供的方法和设备可以由硬件、 或计算机可读指令、 或者硬件和计算机可读指令的结合来实现。 本实施例中使用的计算机可 读指令由多个处理器存储在可读存储介质中, 例如硬盘、 CD-ROM、 DVD, 光盘、 软盘、 磁带、 RAM、 ROM或其它合适的存储设备。 或者, 至少部分计算机可读指令可以由具体硬件替换 , 例如, 定制集成线路、 门阵列、 FPGA、 PLD和具体功能的计算机等等。

本发明实施例提供了计算机可读存储介质, 用于存储指令使得计算 机执行本文所述的方法。 具体地, 本实施例提供的系统或设备都具有存 储介质, 其中存储了计算机可读程序代码, 用于实现上述任意实施例的 功能, 并且这些系统或设备 (或 CPU或 MPU ) 能够读取并且执行存储 在存储介质中的程序代码。

在这种情况下, 从存储介质中读取的程序代码可以实现上述任 一实 施例, 因此该程序代码和存储该程序代码的存储介质 是技术方案的一部 用于提供程序代码的存储介质包括软盘、 硬盘、 磁光盘、 光盘(例 如 CD-ROM、 CD-R, CD-RW、 DVD-ROM、 DVD-RAM、 DVD-RW, DVD+RW ), 磁盘、 闪存卡、 ROM等等。 可选地, 程序代码也可以通过 通信网络从 务器电脑上下载。

应该注意的是, 对于由计算机执行的程序代码, 至少部分由程序代 码实现的操作可以由运行在计算机上的操作系 统实现, 从而实现上述任 一实施例的技术方案, 其中该计算机基于程序代码执行指令。

另外, 存储介质中的程序代码被写入存储器, 其中, 该存储器位于 插入在计算机中的扩展板中, 或者位于连接到计算机的扩展单元中。 在 本实施例中,扩展板或扩展单元中的 CPU根据指令,基于程序代码执行 至少部分操作, 从而实现上述任一实施例的技术方案。

以上所述仅为本发明的较佳实施例, 并不用以限制本发明, 凡在本 发明的精神和原则之内, 所作的任何修改、 等同替换、 改进等, 均应包 含在本发明的保护范围之内。