CN118012865A - 配置数据获取方法、装置、电子设备、存储介质 - Google Patents
配置数据获取方法、装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN118012865A CN118012865A CN202410077068.3A CN202410077068A CN118012865A CN 118012865 A CN118012865 A CN 118012865A CN 202410077068 A CN202410077068 A CN 202410077068A CN 118012865 A CN118012865 A CN 118012865A
- Authority
- CN
- China
- Prior art keywords
- available
- data
- configuration data
- target
- key
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000013507 mapping Methods 0.000 claims description 10
- 238000004891 communication Methods 0.000 claims description 9
- 230000007812 deficiency Effects 0.000 abstract 1
- 230000006870 function Effects 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000007906 compression Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1737—Details of further file system functions for reducing power consumption or coping with limited storage space, e.g. in mobile devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出了一种配置数据获取方法、装置、电子设备、存储介质,其中配置数据获取方法包括:通过加载配置文件生成第一配置表后加载到内存;基于第一配置表序列化写入临时文件缓存,确定可用配置数据的数据索引;生成第二配置表后加载到内存,在内存中回收第一配置表;当获取到携带有第一目标键的第一数据请求,基于第二配置表从临时文件缓存反序列化出目标配置数据。根据本发明实施例的技术方案,能够将内存中的配置数据替换成数据索引,在获取配置数据时基于索引从临时文件缓存按需反序列化,减小了配置表对内存的占用,避免了配置表过大导致的内存不足,能够提高用户体验。
Description
技术领域
本发明涉及配置加载技术领域,特别涉及一种配置数据获取方法、装置、电子设备、存储介质。
背景技术
游戏软件中,特别是大型游戏中通常会使用到大量的游戏配置表。在相关技术中,以基于lua开发的游戏为例,需要预加载所有lua功能模块中使用到的游戏配置表,并将整个游戏配置表以lua table的形式常驻在内存中,确保功能模块能够随时从内存调用相关的配置数据。但是lua table通常会占据较多的内存,若在一些内存配置较低的终端常驻整个游戏配置表,很容易因为内存不足导致游戏无法正常运行,影响用户体验。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种配置数据获取方法、装置、电子设备、存储介质,能够减少游戏运行时配置表对内存的占用,提高用户体验。
第一方面,本发明实施例提供了一种配置数据获取方法,包括:
加载配置文件生成第一配置表,将所述第一配置表加载到内存,其中,所述第一配置表包括多个第一信息单元,所述第一信息单元记载有可用键和可用配置数据;
基于所述第一配置表,将各个所述可用配置数据序列化写入临时文件缓存,确定所述可用配置数据的数据索引,其中,所述数据索引用于指示所述可用配置数据在所述临时文件缓存的存储位置;
生成第二配置表后加载到所述内存,在所述内存中回收所述第一配置表,其中,所述第二配置表包括多个第二信息单元,所述第二信息单元记载有所述可用键和对应的所述可用索引;
当获取到携带有第一目标键的第一数据请求,基于所述第一目标键从所述第二配置表确定目标索引,基于所述目标索引从所述临时文件缓存定位并反序列化出目标配置数据,根据所述目标配置数据响应所述第一数据请求。
根据本发明的一些实施例,所述将各个所述可用配置数据序列化写入临时文件缓存,确定所述可用配置数据的数据索引,包括:
在所述内存中分配信息缓冲区;
遍历所述第一配置表的各个所述第一信息单元,将各个所述可用配置数据序列化写入所述信息缓冲区并生成可用数据块,基于所述可用数据块在所述信息缓冲区的存储区域生成所述可用索引,关联所述可用键和所述可用索引得到所述第二信息单元;
若当前遍历到的所述第一信息单元所对应的所述可用配置数据为空值,基于全部的所述第二信息单元组成所述第二配置表,将所述信息缓冲区所记载的全部所述可用数据块写入所述临时文件缓存;
基于mmap将所述临时文件缓存映射至所述内存。
根据本发明的一些实施例,所述将各个所述可用配置数据序列化写入所述信息缓冲区并生成可用数据块,基于所述可用数据块在所述信息缓冲区的存储区域生成所述可用索引,包括:
若当前遍历到的所述第一信息单元所对应的所述可用配置数据不为空值,基于所述信息缓冲区当前的可写地址确定起始缓冲区偏移量;
将所述可用配置数据写入所述信息缓冲区,完成后记录结束缓冲区偏移量;
基于所述起始缓冲区偏移量和所述结束缓冲区偏移量确定写入偏移信息,将所述写入偏移信息所对应的数据块确定为所述可用数据块;
基于构建所述可用键和所述写入偏移信息的映射关系得到所述可用索引;
以所述结束缓冲区偏移量为新的起始缓冲区偏移量,继续遍历下一个所述第一信息单元。
根据本发明的一些实施例,所述将所述可用配置数据写入所述信息缓冲区,包括:
当所述可用配置数据的数据类型为table类型,将所述可用配置数据所对应的table类型的类型值写入所述信息缓冲区;
或者,当所述可用配置数据的数据类型为数值,基于所述可用配置数据进行变长字节编码后写入所述信息缓冲区;
或者,当所述可用配置数据的数据类型为字符串,将所述可用配置数据的类型值、字符串长度和所述可用配置数据写入所述信息缓冲区;
或者,当所述可用配置数据的数据类型为布尔值,将所述可用配置数据所对应的布尔真值或者布尔假值写入所述信息缓冲区。
根据本发明的一些实施例,所述基于所述可用配置数据进行变长字节编码后写入所述信息缓冲区,包括:
当所述可用配置数据的原始数值满足预设正数范围且为整数,基于所述原始数值的大小确定目标字节数,基于所述目标字节数的数量写入所述原始数值;
或者,当所述原始数值不满足所述预设正数范围和/或不为整数,在首字节写入双精度数值类类型后,通过8个字节写入所述原始数值;
其中,所述基于所述目标字节数的数量写入所述原始数值,包括:
当所述目标字节数为1,通过1个字节写入所述原始数值和所述原始数值的值类型枚举;
当所述目标字节数大于等于2且小于等于4,将前N-1个字节的最高位置1后,通过剩余的位置写入所述原始数值,其中,N为所述目标字节数;
当所述目标字节数等于5,在首字节写入整数值类型,在剩余的4个字节写入所述原始数值。
根据本发明的一些实施例,在所述根据所述目标配置数据响应所述第一数据请求之后,所述方法还包括:
将所述目标配置数据确定为所述第一目标键的返回值,将所述第一目标键确定为可用热键并添加至热键集合;
当获取到携带有第二目标键的第二数据请求,基于所述第二目标键从所述热键集合中确定目标热键,基于所述目标热键的所述返回值响应所述第二数据请求;
在预设时长后,回收冷键集合的内容,将所述可用热键确定为可用冷键并转移至所述冷键集合。
根据本发明的一些实施例,当获取到携带有第二目标键的第二数据请求,且未能基于所述第二目标键从所述热键集合中确定目标热键,所述方法还包括:
当基于所述第二目标键从所述冷键集合确定目标冷键,基于所述目标冷键从所述第二配置表确定冷键索引,基于所述冷键索引从所述临时文件缓存定位并反序列化出冷键配置数据;
根据所述冷键配置数据响应所述第二数据请求;
将所述目标冷键确定为新的可用热键并重新保存至所述热键集合,将所述冷键配置数据确定为所述新的可用热键的返回值。
第二方面,本发明实施例提供了一种配置数据获取装置,包括少一个控制处理器和用于与所述至少一个控制处理器通信连接的存储器;所述存储器存储有可被所述至少一个控制处理器执行的指令,所述指令被所述至少一个控制处理器执行,以使所述至少一个控制处理器能够执行如上述第一方面所述的配置数据获取方法。
第三方面,本发明实施例提供了一种电子设备,包括有如上述第二方面所述的配置数据获取装置。
第四方面,本发明实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行如上述第一方面所述的配置数据获取方法。
根据本发明实施例的方法,通过加载配置文件生成第一配置表,将所述第一配置表加载到内存,其中,所述第一配置表包括多个第一信息单元,所述第一信息单元记载有可用键和可用配置数据;基于所述第一配置表,将各个所述可用配置数据序列化写入临时文件缓存,确定所述可用配置数据的数据索引,其中,所述数据索引用于指示所述可用配置数据在所述临时文件缓存的存储位置;生成第二配置表后加载到所述内存,在所述内存中回收所述第一配置表,其中,所述第二配置表包括多个第二信息单元,所述第二信息单元记载有所述可用键和对应的所述可用索引;当获取到携带有第一目标键的第一数据请求,基于所述第一目标键从所述第二配置表确定目标索引,基于所述目标索引从所述临时文件缓存定位并反序列化出目标配置数据,根据所述目标配置数据响应所述第一数据请求。根据本发明实施例的技术方案,能够通过记载有可用键和可用索引的第二配置表取代记载有可用配置数据的第一配置表,在获取配置数据时基于索引从临时文件缓存按需反序列化,减小了内存中保存的配置表的数据量,避免了配置表过大导致的内存不足,能够提高用户体验。
附图说明
图1是本发明一个实施例提供的实施环境示意图;
图2是本发明一个实施例提供的配置数据获取方法的流程图;
图3是本发明一个实施例提供的序列化写入的流程图;
图4是本发明一个实施例提供的根据数据类型确定写入值的流程图;
图5是本发明一个实施例提供的缓存交换淘汰机制的流程图;
图6是本发明另一个实施例提供的电子设备的结构图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,需要理解的是,涉及到方位描述,例如上、下、前、后、左、右等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
本发明的描述中,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。
首先,对本发明一个或多个实施例涉及的名词术语进行解释:
lua:一种在游戏开发中广泛使用的脚本语言。
lua table:lua用来创建数组、字典等的基本数据结构。
key:键,lua table通过键返回其对应的值。
index元方法:lua table提供的一种可重载通过键返回值的元表特性。
mmap:由操作系统支持的将磁盘文件映射到内存的一种方法。
本发明实施例提供了一种配置数据获取方法,通过加载配置文件生成第一配置表,将所述第一配置表加载到内存,其中,所述第一配置表包括多个第一信息单元,所述第一信息单元记载有可用键和可用配置数据;基于所述第一配置表,将各个所述可用配置数据序列化写入临时文件缓存,确定所述可用配置数据的数据索引,其中,所述数据索引用于指示所述可用配置数据在所述临时文件缓存的存储位置;生成第二配置表后加载到所述内存,在所述内存中回收所述第一配置表,其中,所述第二配置表包括多个第二信息单元,所述第二信息单元记载有所述可用键和对应的所述可用索引;当获取到携带有第一目标键的第一数据请求,基于所述第一目标键从所述第二配置表确定目标索引,基于所述目标索引从所述临时文件缓存定位并反序列化出目标配置数据,根据所述目标配置数据响应所述第一数据请求。根据本发明实施例的技术方案,能够通过记载有可用键和可用索引的第二配置表取代记载有可用配置数据的第一配置表,在获取配置数据时基于索引从临时文件缓存按需反序列化,减小了内存中保存的配置表的数据量,避免了配置表过大导致的内存不足,能够提高用户体验。
在本发明中,提供了一种配置数据获取方法、装置、电子设备、计算机可读存储介质,在下面的实施例中逐一进行详细说明。
参照图1,图1为本发明实施例提供的一种配置数据获取方法的实施环境示意图,如图1所示,在游戏初始化时,将配置文件加载到内存并进行预处理后转换为lua table(第一配置表),将lua table输入lua cache模块,lua cache模块将lua table输入序列化模块,基于可用key进行整表序列化,序列化模块将配置数据序列化写入临时文件缓存后返回对应的可用索引,临时文件缓存基于mmap映射至内存,lua cache模块基于可用索引和对应的lua table的各个可用key构建cached lua table(第二配置表),通过lua的垃圾回收机制回收内存的lua table,只在内存保留数据量较小的cached lua table。在游戏运行时,lua游戏功能模块请求配置数据时,cached lua table通过重载index元方法,通过目标索引从cached lua table中确定目标key,基于目标key从临时文件缓存中反序列化出目标配置数据。
参照图2,图2为本发明实施例提供的一种配置数据获取方法的流程图,该配置数据获取方法包括但不限于有以下步骤:
S21,加载配置文件生成第一配置表,将第一配置表加载到内存,其中,第一配置表包括多个第一信息单元,第一信息单元记载有可用键和可用配置数据;
S22,基于第一配置表,将各个可用配置数据序列化写入临时文件缓存,确定可用配置数据的数据索引,其中,数据索引用于指示可用配置数据在临时文件缓存的存储位置;
S23,生成第二配置表后加载到内存,在内存中回收第一配置表,其中,第二配置表包括多个第二信息单元,第二信息单元记载有可用键和对应的可用索引;
S24,当获取到携带有第一目标键的第一数据请求,基于第一目标键从第二配置表确定目标索引,基于目标索引从临时文件缓存定位并反序列化出目标配置数据,根据目标配置数据响应第一数据请求。
需要说明的是,加载和预处理可以在游戏启动阶段和场景初始化阶段完成,游戏配置表一般以文本文件的格式存于磁盘上或包文件里,当从磁盘或包文件里加载配置文件后即转化为第一配置表,本实施例以一个lua table作为第一配置表为例,在具有多个luatable的情况下执行多次本实施例的技术方案即可。
值得注意的是,在将第一配置表加载到内存并完成预处理完之后,第一配置表的内容不会再变化,即最终配置表相关的lua table是只读的。因此本技术方案有较强的适用性和易用性,从一般性使用lua table处理和读取配置表的方式到迁移到本技术方案只需要很小的改动量以及很小的使用限制。
需要说明的是,第一信息单元为第一配置表中的信息对,即相互关联的可用键(key)和可用配置数据,可用配置数据可以是可用键的key值,例如可以是table值、数值、字符串和布尔值。由于lua是按照key来进行配置数据的查找,因此本实施例将key和配置数据的映射关系以第一信息单元的形式保存在第一配置表。
需要说明的是,在将第一配置表加载到内存后,对第一配置表进行整表序列化,将各个可用配置数据有序地写入临时文件缓存,例如通过图1所示的序列化模块进行,序列化模块返回每个可用配置数据的写入位置作为可用索引,lua cache模块将这个可用索引记录到一个新生成的第二配置表,第二配置表以cached lua table为例,在cached luatable记录可用键和可用索引作为新的第二信息单元,将可用配置数据保存在磁盘文件的临时文件缓存中,利用记载索引信息的第二配置表在内存中替代第一配置表,内存不再常驻数据量较大的可用配置数据,而是保存数据量较小的索引信息,在通过lua的垃圾回收机制回收第一配置表后能够释放大量的内存空间,降低了游戏运行时对内存的需求,在内存配置较低的终端也可以正常运行,有效提高用户体验。
需要说明的是,在获取到第一数据请求后,基于第一数据请求携带的第一目标键从第二配置表的多个可用键中进行匹配,将匹配成功的可用键所对应的可用索引确定为目标索引,再基于目标索引从临时文件缓存中仅仅反序列化出当前需要的目标配置数据,无需将全部的可用配置数据都导入内存,进一步减少了内存占用。游戏配置表本身可能会很大,而游戏功能模块在一次运行过程需要访问到的配置表值绝大部分情况下都是很少一部分,因此本实施例的“按需反序列化”能节省大量内存。
另外,在一实施例中,参照图3,将各个可用配置数据序列化写入临时文件缓存,确定可用配置数据的数据索引,还包括但不限于有以下步骤:
在内存中分配信息缓冲区;遍历第一配置表的各个第一信息单元,将各个可用配置数据序列化写入信息缓冲区并生成可用数据块,基于可用数据块在信息缓冲区的存储区域生成可用索引,关联可用键和可用索引得到第二信息单元;若当前遍历到的第一信息单元所对应的可用配置数据为空值,基于全部的第二信息单元组成第二配置表,将信息缓冲区所记载的全部可用数据块写入临时文件缓存;基于mmap将临时文件缓存映射至内存。
需要说明的是,第一配置表可以记载多个第一信息单元,每个第一信息单元包括一个可用键和对应的可用配置数据,以lua游戏为例,图1所示的序列化模块可以通过lua的宿主语言(如C++)实现。序列化模块负责将整表数据序列化并写入临时文件缓存中,序列化时,以第一配置表为lua table为例,可以使用快速压缩算法将lua table转换为二进制数据,lua table的每个key(可用键)将对应二进制数据的一个数据块,本实施例将key对应的数据库写入信息缓冲区得到可用数据块,同时,可用数据块在信息缓冲区中的存储位置是可知的,从而确定key所关联的可用索引。
需要说明的是,如图1所示,在完成一个第一信息单元的可用配置数据的序列化写入后,序列化模块得到的可用索引反馈至lua cache模块,lua cache模块关联可用索引和对应的可用键得到第二信息单元,针对第一配置表中的每个第一信息单元都执行完序列化写入后,得到多个第二信息单元的集合形成第二配置表,例如图1中通过lua cache模块生成cached lua table,再将信息缓冲区所记载的可用数据块全部写入临时文件缓存,从而完成可用配置数据从内存转移到磁盘文件,在内存仅留下可用键和对应的可用索引,既减少了内存的占用量,也确保了能够通过可用索引从临时文件缓存获取对应的配置数据。
需要说明的是,在完成临时文件缓存的写入后,本实施例利用mmap(在windows操作系统中则对应MapViewOfFile接口)实现磁盘文件到内存的映射,确保终端可以基于内存中保存的可用索引从磁盘文件中获取配置数据。
另外,在一实施例中,参照图3,将各个可用配置数据序列化写入信息缓冲区并生成可用数据块,基于可用数据块在信息缓冲区的存储区域生成可用索引,还包括但不限于有以下步骤:
若当前遍历到的第一信息单元所对应的可用配置数据不为空值,基于信息缓冲区当前的可写地址确定起始缓冲区偏移量;将可用配置数据写入信息缓冲区,完成后记录结束缓冲区偏移量;基于起始缓冲区偏移量和结束缓冲区偏移量确定写入偏移信息,将写入偏移信息所对应的数据块确定为可用数据块;基于构建可用键和写入偏移信息的映射关系得到可用索引;以结束缓冲区偏移量为新的起始缓冲区偏移量,继续遍历下一个第一信息单元。
需要说明的是,如图3所示,在获取到序列化请求后,本实施例在内存中分配信息缓冲区进行序列化数据写入,本实施例采用遍历可用键的方式进行逐个第一信息单元的处理,在处理过程中,第一配置表的可用配置数据也是按顺序写入的,通常在遇到可用配置数据为空时确定到达了表尾,可以结束写入并执行后续操作。因此,本实施例在写入之前先对可用配置数据是否为空进行判断。
需要说明的是,当可用配置数据(图3所示的key值)不为空,则可以将可用配置数据写入信息缓冲区,本实施例通过记录信息缓冲区写入前后的偏移量作为存储区域的表征,即在开始写入之前记录起始缓冲区偏移量,在写入完成后记录结束缓冲区偏移量,将起始缓冲区偏移量和结束缓冲区偏移量确定为写入偏移信息,并关联可用键和写入偏移信息,将可用键与缓冲区偏移量的映射确定为可用索引,使得后续获取配置数据时,能够按key快速查找到对应数据块的偏移量并反序列化数据。
另外,在一实施例中,参照图4,将可用配置数据写入信息缓冲区,还包括但不限于有以下步骤:
当可用配置数据的数据类型为table类型,将可用配置数据所对应的table类型的类型值写入信息缓冲区;或者,当可用配置数据的数据类型为数值,基于可用配置数据进行变长字节编码后写入信息缓冲区;或者,当可用配置数据的数据类型为字符串,将可用配置数据的类型值、字符串长度和可用配置数据写入信息缓冲区;或者,当可用配置数据的数据类型为布尔值,将可用配置数据所对应的布尔真值或者布尔假值写入信息缓冲区。
需要说明的是,对于lua游戏配置表,可用配置数据的数据类型通常为table、数值、字符串和布尔值,本实施针对不同的数据类型采用不同的序列化写入策略,从而实现序列化压缩。
需要说明的是,本实施例在进行数据类型判断时,首先需要判断是否为table类型,若不是table类型再继续判断是否为数值、字符串或布尔值;若是table类型则执行写入,完成写入后可以判断是否存在下一个key,若存在则继续写入key和类型值(value),若没有下一个key,则可以确定lua table已经完成写入,实现lua table序列化写入的自动判定。
需要说明的是,当配置数据的数据类型为数值,由于数值大量存在于配置表,数据量较大,本实施例采用变长字节编码的方式实现数据压缩,能够减少磁盘读写的数据量,从而降低写入和后续读取过程中的IO开销。
需要说明的是,当配置数据的数据类型为字符串,可以写入字符串类型和字符串长度,使得后续能够识别该数据块为字符串并确定其长度,再同事讲整个可用配置数据(字符串)写入,得到对应的数据块。
需要说明的是,当配置数据的数据类型为布尔值,可以直接写入布尔真值(true)或者布尔假值(false),在此不多做赘述。
另外,在一实施例中,(权5),基于可用配置数据进行变长字节编码后写入信息缓冲区,还包括但不限于有以下步骤:
当可用配置数据的原始数值满足预设正数范围且为整数,基于原始数值的大小确定目标字节数,基于目标字节数的数量写入原始数值;或者,当原始数值不满足预设正数范围和/或不为整数,在首字节写入双精度数值类类型后,通过8个字节写入原始数值;
其中,基于目标字节数的数量写入原始数值,包括:
当目标字节数为1,通过1个字节写入原始数值和原始数值的值类型枚举;当目标字节数大于等于2且小于等于4,将前N-1个字节的最高位置1后,通过剩余的位置写入原始数值,其中,N为目标字节数;当目标字节数等于5,在首字节写入整数值类型,在剩余的4个字节写入原始数值。
为了更好地说明本实施例的变长字节编码方法,以下提出一个具体示例,在本示例中,预设整数范围为0至232为例:
当原始数值为小于或等于120的非负整数,用1字节写入(121~127保留用作值类型枚举部分);
当原始数值为大于120小于214的非负整数,用2字节写入,首字节最高位位置1,从第2位开始表示数据,共使用15位表示数据;
当原始数值为大于等于214小于221的整数,用3字节写入,第1、2字节最高位置1,使用其余22位表示数据;
当原始数值为大于等于221小于229的整数,用4字节写入,第1、2和3字节最高位置1,使用其余29位表示数据;
当原始数值为大于等于229小于232的整数,用5字节写入,首字节写入整数值类型,另外4字节写入值;
其他范围正整数,负数及浮点数,首字节写入双精度数值类类型,然后用8字节写入值。
通过本实施例的技术方案,序列化模块将lua table数据压缩为二进制数据块并写入磁盘,这样只有key值到序列化数据偏移量索引这部分是常驻内存的,而这部分相对于整个lua table数据是非常小的,因此序列化模块本身所占的内存也很小。在反序列化时需要从磁盘读取对应的数据块,这部分通过mmap技术由操作系统底层自动完成,比常规读取文件接口的性能要高很多,且可充分利用操作系统的IO缓存机制。配置表单个key对应的数据量不会太大,对于一般的游戏配置表,磁盘IO和反序列化单个key数据的耗时一般不超过0.01毫秒,整体来说对游戏程序的性能不会造成明显的影响。
另外,在一实施例中,参照图5,在根据目标配置数据响应第一数据请求之后,方法还包括但不限于有以下步骤:
将目标配置数据确定为第一目标键的返回值,将第一目标键确定为可用热键并添加至热键集合;当获取到携带有第二目标键的第二数据请求,基于第二目标键从热键集合中确定目标热键,基于目标热键的返回值响应第二数据请求;在预设时长后,回收冷键集合的内容,将可用热键确定为可用冷键并转移至冷键集合。
需要说明的是,本实施例虽然通过第二配置表替代第一配置表,大幅减少了内存的占用率,目标配置数据可以通过目标索引从临时文件缓存中获取,但是对于一些经常需要获取的配置数据,若频繁进行磁盘IO会增加IO开销,基于此,本实施例在获取到目标配置数据后,将目标配置数据保存在内存中作为第一目标键的返回值,将第一目标键设置为可用热键并保存在热键集合,当再次获取到数据请求后,先从热键集合中进行匹配,匹配成功后直接从内存获取配置数据,省去了磁盘IO。
示例性地,如图5所示,第二数据请求以index元方法为例,热键集合以hot-keys表为例,当通过index元方法发起数据请求读取key值时,先从hot-keys表尝试读取key值,若成功读取到非空的key值,则引用对应的返回值,实现热键调用。
值得注意的是,本实施例虽然将被设置为可用热键的配置数据保存在内存中,占用了部分的内存空间,但是相比起整张第一配置表而言,在数据量上仍然是较小的,并不会对内存造成太多的负担。
需要说明的是,本实施例设置可用热键是为了提高常用的配置数据的获取效率,减少磁盘IO,而目标配置数据在获取之前并不能预知后续是否需要频繁调用,因此本实施例将每次获取到目标配置数据的第一目标键确定为可用热键,若可用热键常驻内存,在每个可用配置数据都被确定为一次目标配置数据后,相当于整个第一配置表再次整表保存在内存中,导致内存占用较高。基于此,本实施例设置了缓存交换淘汰机制,设置一个预设时长将热键集合转换为冷键集合,将冷键集合的原有内容回收以释放内存空间。
示例性地,如图5所示,冷键集合以cold-keys表为例,在预设时长(例如x秒,x为正整数)后,通过lua的垃圾回收模块回收cold-keys表当前记载的内容,通过修改指针的方式使得cold-keys表指向hot-keys表,将hot-keys表的可用热键确定为可用冷键,原有的hot-keys表赋值为空表,使得可用热键全部转换为可用冷键,有效节约了内存空间。
另外,在一实施例中(权7),参照图5,当获取到携带有第二目标键的第二数据请求,且未能基于第二目标键从热键集合中确定目标热键,方法还包括但不限于有以下步骤:
当基于第二目标键从冷键集合确定目标冷键,基于目标冷键从第二配置表确定冷键索引,基于冷键索引从临时文件缓存定位并反序列化出冷键配置数据;根据冷键配置数据响应第二数据请求;将目标冷键确定为新的可用热键并重新保存至热键集合,将冷键配置数据确定为新的可用热键的返回值。
需要说明的是,根据上述实施例的描述,以lua游戏为例,参照图1,lua游戏功能模块读取配置表数据时,通过cached lua table读取配置表数据,每个cached lua table对应一个原始的配置表lua table。每个cached lua table内包含一个hot-keys表和cold-keys表,cached lua table通过重载__index元方法,在游戏功能模块按key读取配置表数据时,先从自身的hot-keys和cold-keys表读取值,如读取失败则从序列化模块申请反序列化该key对应数据,然后缓存进hot-keys表并返回值引用给游戏功能模块。
需要说明的是,在此基础上,hot-keys的数据会定时转移到cold-keys,cold-keys中读取到的值会转移到hot-keys,未读取到的值会定时清除,以实现频繁读取的key可即时从缓存获取不需要再次反序列化,而长时间未读取的key会清除值以释放内存。数据缓存机制进一步保证了游戏功能模块读取配置表的性能,并且暂时访问的配置表项不会造成长期占用内存。
如图6所示,图6是本发明一个实施例提供的配置数据获取装置的结构图。本发明还提供了一种配置数据获取装置,包括:
处理器601,可以采用通用的中央处理器(Central Processing Unit,CPU)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请实施例所提供的技术方案;
存储器602,可以采用只读存储器(Read Only Memory,ROM)、静态存储设备、动态存储设备或者随机存取存储器(Random Access Memory,RAM)等形式实现。存储器602可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器602中,并由处理器601来调用执行本申请实施例的配置数据获取方法;
输入/输出接口603,用于实现信息输入及输出;
通信接口604,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;
总线605,在设备的各个组件(例如处理器601、存储器602、输入/输出接口603和通信接口604)之间传输信息;
其中处理器601、存储器602、输入/输出接口603和通信接口604通过总线605实现彼此之间在设备内部的通信连接。
本申请实施例还提供了一种电子设备,包括如上所述的配置数据获取装置。
本申请实施例还提供了一种存储介质,存储介质为计算机可读存储介质,该存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述配置数据获取方法。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可用包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,实现了以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包括计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上是对本发明的较佳实施进行了具体说明,但本发明并不局限于上述实施方式,熟悉本领域的技术人员在不违背本发明精神的共享条件下还可作出种种等同的变形或替换,这些等同的变形或替换均包括在本发明权利要求所限定的范围内。
Claims (10)
1.一种配置数据获取方法,其特征在于,包括:
加载配置文件生成第一配置表,将所述第一配置表加载到内存,其中,所述第一配置表包括多个第一信息单元,所述第一信息单元记载有可用键和可用配置数据;
基于所述第一配置表,将各个所述可用配置数据序列化写入临时文件缓存,确定所述可用配置数据的数据索引,其中,所述数据索引用于指示所述可用配置数据在所述临时文件缓存的存储位置;
生成第二配置表后加载到所述内存,在所述内存中回收所述第一配置表,其中,所述第二配置表包括多个第二信息单元,所述第二信息单元记载有所述可用键和对应的所述可用索引;
当获取到携带有第一目标键的第一数据请求,基于所述第一目标键从所述第二配置表确定目标索引,基于所述目标索引从所述临时文件缓存定位并反序列化出目标配置数据,根据所述目标配置数据响应所述第一数据请求。
2.根据权利要求1所述的方法,其特征在于,所述将各个所述可用配置数据序列化写入临时文件缓存,确定所述可用配置数据的数据索引,包括:
在所述内存中分配信息缓冲区;
遍历所述第一配置表的各个所述第一信息单元,将各个所述可用配置数据序列化写入所述信息缓冲区并生成可用数据块,基于所述可用数据块在所述信息缓冲区的存储区域生成所述可用索引,关联所述可用键和所述可用索引得到所述第二信息单元;
若当前遍历到的所述第一信息单元所对应的所述可用配置数据为空值,基于全部的所述第二信息单元组成所述第二配置表,将所述信息缓冲区所记载的全部所述可用数据块写入所述临时文件缓存;
基于mmap将所述临时文件缓存映射至所述内存。
3.根据权利要求2所述的方法,其特征在于,所述将各个所述可用配置数据序列化写入所述信息缓冲区并生成可用数据块,基于所述可用数据块在所述信息缓冲区的存储区域生成所述可用索引,包括:
若当前遍历到的所述第一信息单元所对应的所述可用配置数据不为空值,基于所述信息缓冲区当前的可写地址确定起始缓冲区偏移量;
将所述可用配置数据写入所述信息缓冲区,完成后记录结束缓冲区偏移量;
基于所述起始缓冲区偏移量和所述结束缓冲区偏移量确定写入偏移信息,将所述写入偏移信息所对应的数据块确定为所述可用数据块;
基于构建所述可用键和所述写入偏移信息的映射关系得到所述可用索引;
以所述结束缓冲区偏移量为新的起始缓冲区偏移量,继续遍历下一个所述第一信息单元。
4.根据权利要求3所述的方法,其特征在于,所述将所述可用配置数据写入所述信息缓冲区,包括:
当所述可用配置数据的数据类型为table类型,将所述可用配置数据所对应的table类型的类型值写入所述信息缓冲区;
或者,当所述可用配置数据的数据类型为数值,基于所述可用配置数据进行变长字节编码后写入所述信息缓冲区;
或者,当所述可用配置数据的数据类型为字符串,将所述可用配置数据的类型值、字符串长度和所述可用配置数据写入所述信息缓冲区;
或者,当所述可用配置数据的数据类型为布尔值,将所述可用配置数据所对应的布尔真值或者布尔假值写入所述信息缓冲区。
5.根据权利要求4所述的方法,其特征在于,所述基于所述可用配置数据进行变长字节编码后写入所述信息缓冲区,包括:
当所述可用配置数据的原始数值满足预设正数范围且为整数,基于所述原始数值的大小确定目标字节数,基于所述目标字节数的数量写入所述原始数值;
或者,当所述原始数值不满足所述预设正数范围和/或不为整数,在首字节写入双精度数值类类型后,通过8个字节写入所述原始数值;
其中,所述基于所述目标字节数的数量写入所述原始数值,包括:
当所述目标字节数为1,通过1个字节写入所述原始数值和所述原始数值的值类型枚举;
当所述目标字节数大于等于2且小于等于4,将前N-1个字节的最高位置1后,通过剩余的位置写入所述原始数值,其中,N为所述目标字节数;
当所述目标字节数等于5,在首字节写入整数值类型,在剩余的4个字节写入所述原始数值。
6.根据权利要求1所述的方法,其特征在于,在所述根据所述目标配置数据响应所述第一数据请求之后,所述方法还包括:
将所述目标配置数据确定为所述第一目标键的返回值,将所述第一目标键确定为可用热键并添加至热键集合;
当获取到携带有第二目标键的第二数据请求,基于所述第二目标键从所述热键集合中确定目标热键,基于所述目标热键的所述返回值响应所述第二数据请求;
在预设时长后,回收冷键集合的内容,将所述可用热键确定为可用冷键并转移至所述冷键集合。
7.根据权利要求6所述的方法,其特征在于,当获取到携带有第二目标键的第二数据请求,且未能基于所述第二目标键从所述热键集合中确定目标热键,所述方法还包括:
当基于所述第二目标键从所述冷键集合确定目标冷键,基于所述目标冷键从所述第二配置表确定冷键索引,基于所述冷键索引从所述临时文件缓存定位并反序列化出冷键配置数据;
根据所述冷键配置数据响应所述第二数据请求;
将所述目标冷键确定为新的可用热键并重新保存至所述热键集合,将所述冷键配置数据确定为所述新的可用热键的返回值。
8.一种配置数据获取装置,其特征在于,包括至少一个控制处理器和用于与所述至少一个控制处理器通信连接的存储器;所述存储器存储有可被所述至少一个控制处理器执行的指令,所述指令被所述至少一个控制处理器执行,以使所述至少一个控制处理器能够执行如权利要求1至7任一项所述的配置数据获取方法。
9.一种电子设备,其特征在于,包括如权利要求8所述的配置数据获取装置。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1至7任一项所述的配置数据获取方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410077068.3A CN118012865A (zh) | 2024-01-18 | 2024-01-18 | 配置数据获取方法、装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410077068.3A CN118012865A (zh) | 2024-01-18 | 2024-01-18 | 配置数据获取方法、装置、电子设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118012865A true CN118012865A (zh) | 2024-05-10 |
Family
ID=90952866
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410077068.3A Pending CN118012865A (zh) | 2024-01-18 | 2024-01-18 | 配置数据获取方法、装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118012865A (zh) |
-
2024
- 2024-01-18 CN CN202410077068.3A patent/CN118012865A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9058112B2 (en) | Retrieving data in a storage system using thin provisioning | |
US8880836B2 (en) | Memory management device and method | |
US20090307291A1 (en) | Smart card storage system and file management method therein | |
CN110018998B (zh) | 一种文件管理方法、系统及电子设备和存储介质 | |
US20170031964A1 (en) | Rollover Strategies in a N-Bit Dictionary Compressed Column Store | |
CN102662856B (zh) | 一种固态硬盘及其存取方法 | |
CN110109868B (zh) | 用于索引文件的方法、装置和计算机程序产品 | |
US20210021280A1 (en) | Memory system and information processing system | |
US10789170B2 (en) | Storage management method, electronic device and computer readable medium | |
CN108664577B (zh) | 一种基于flash空闲区的文件管理方法及系统 | |
US20210216448A1 (en) | Data storage device in a key-value storage architecture with data compression, and non-volatile memory control method | |
CN114546292B (zh) | 一种nand flash坏块管理方法及系统 | |
CN115774699B (zh) | 数据库共享字典压缩方法、装置、电子设备及存储介质 | |
US10324959B2 (en) | Garbage collection in storage system | |
CN115964002B (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
US11176033B2 (en) | Data storage devices and data processing methods | |
CN110309081B (zh) | 基于压缩存储和地址映射表项的ftl读写数据页的方法 | |
CN113835639B (zh) | 一种i/o请求处理方法、装置、设备及可读存储介质 | |
CN114896215A (zh) | 元数据的存储方法及装置 | |
US8316210B2 (en) | Dividing a logical memory space into ranges and sets for address translation | |
US20030097523A1 (en) | External storage device within a computer network | |
CN108958657B (zh) | 一种数据存储方法、存储设备及存储系统 | |
CN118012865A (zh) | 配置数据获取方法、装置、电子设备、存储介质 | |
CN114003169B (zh) | 一种用于ssd的数据压缩方法 | |
CN115576863A (zh) | 一种数据读写方法、存储设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |