CN108334622A - 一种获取格式化复合数据的方法 - Google Patents
一种获取格式化复合数据的方法 Download PDFInfo
- Publication number
- CN108334622A CN108334622A CN201810130433.7A CN201810130433A CN108334622A CN 108334622 A CN108334622 A CN 108334622A CN 201810130433 A CN201810130433 A CN 201810130433A CN 108334622 A CN108334622 A CN 108334622A
- Authority
- CN
- China
- Prior art keywords
- data
- time
- request
- node
- caching
- 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.)
- Granted
Links
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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24562—Pointer or reference processing operations
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24564—Applying rules; Deductive queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种获取格式化复合数据的方法,首先根据请求的集合ID找到集合下的所有数据字典定义。第二步从缓存中全部取出复合数据,如果某条复合数据不存在,则从数据库中加载到缓存。最后,根据用户请求的数据格式进行格式化处理,并将结果返回给用户。通过数据集合配置化,保证一次请求可以获得全部所需的复合数据。同时在技术一的基础上,实现通用的数据格式化方法,可以将任意数据格式化为Json或XML。
Description
技术领域
本发明属于计算机网络技术领域,具体涉及一种获取格式化复合数据的方法。
背景技术
随着互联网技术的日益发展,缓存系统在解决高并发请求压力的问题上发挥着越来越重要的作用。然而随着前端数据展示需求的日趋复杂,缓存系统在如下场景面临着如下问题:在一个展示界面中需要展示大量格式化复合数据时,需要多次从缓存系统获取数据进行整合,访问延迟大。如果将需要的数据整体缓存在内存中,每次缓存更新需要取出全部数据,更新指定数据再写回缓存中,写入效率低。
现有技术中,当服务器接收到客户端发送的数据获取请求后,服务器解析该数据获取请求,得到客户端所要获取的数据对应的数据信息;服务器查找本地存储的缓存数据索引中是否包含该数据信息;如果包含,表明缓存系统中存储有客户端所请求获得的数据;此时,服务器直接从缓存系统中读取客户端所请求获得的数据,并返回给客户端。现有技术中由于只能提高单条数据的读取速率,如果请求复合数据,仍需要多次网络交互来访问缓存系统,无法满足复合数据的高效读取需要。
发明内容
针对现有技术中无法解决复合数据高效读取的问题,本发明提供了一种复合数据获取的方法,通过数据集合配置化,保证一次请求可以获得全部所需的复合数据。同时在技术一的基础上,实现通用的数据格式化方法,可以将任意数据格式化为Json或XML。
本发明在用户请求复合数据时,首先根据请求的集合ID找到集合下的所有数据字典定义。第二步从缓存中全部取出复合数据,如果某条复合数据不存在,则从数据库中加载到缓存。最后,根据用户请求的数据格式进行格式化处理,并将结果返回给用户。
本发明提供了一种获取格式化复合数据的方法,其特征在于包含以下步骤:
S101:用户终端发起前端请求,请求中携带多个用户ID、集合数据ID,以及数据格式;
S102:根据集合ID查询数据字典;
S103:判断集合定义是否找到;判断结果为否,则执行S104;判断结果为是,则执行S105;
S104:返回错误码;
S105:根据数据定义生成获取命令;
S106:将生成的多条数据获取指令写入请求管道中;请求管道只负责将指令临时缓存在本地,并不马上提交该缓存指令;
S107:将请求管道中的获取指令批量提交到缓存数据库中,并获取到多个缓存查询结果;
S108:依次遍历每一个缓存查询结果,并对结果进行检查;所述检查具体为:首先判断返回是否为空数据,其次判断返回的数据量和请求的数据量是否一致,最后判断请求数据是否命中;
S109:判断缓存结果是否命中;如判断结果为否,则执行S1011;如判断结果为是,则执行S1010;
S1010:判断集合标识是否命中;如判断结果为否,则执行S1012;如判断结果为是,则执行S1013;
S1011:如数据命中,将数据写入查询结果集;
S1012:将数据的默认值写入查询结果集,并且将结果集的计数加1;
S1013:根据数据来源定义从相应数据存储中加载数据,将数据写入到查询结果集中;
S1014:通过异步队列将临时容器TmpBuffer中的数据写入到缓存中;
S1015:判断缓存结果是否遍历完成;如判断结果为否,则返回S108;如判断结果为是,则执行S1016;
S1016:根据请求的数据格式读取格式转换解释器;
S1017:如果请求的是json格式数据,加载json解释器;
S1018:如果请求的是xml格式数据,加载xml解释器;
S1019:使用解释器将查询结果集中的数据格式化为请求的数据格式;
S1020:校验接口返回值,如返回成功,将格式化的集合数据返回客户端,否则返回错误码。
根据本发明的一个优选实施方式,请求到达时,根据请求的数据格式不同,调用不同的访问接口GetDataMultiBin和GetDataMultJson;所述接口GetDataMultiBin用于批量获取二进制数据,所述接口GetDataMultJson用于批量获取json数据;接口参数包括:用户ID集合、用户集合ID总大小、集合数据ID、同步或异步获取。
根据本发明的一个优选实施方式,从接口GetData获取数据的处理流程是:根据请求的集合ID,查询该集合的定义;
集合定义包含但不限于如下属性:集合中的数据数量、每条数据的唯一标识、数据类型、默认值、数据格式、数据来源、超时时间、是否是业务关联数据、所属数据集群。
根据本发明的一个优选实施方式,集合定义存储在有序的数组中,查询时,使用二分查找算法;
二分查找算法具体流程为:将集合定义数组Array[n]按升序排列;
数组初始低位下标low=0,数组初始高位下标high=n,则中位下标mid=(low+high)/2,中位记录为Array[mid];
查询时,设查询关键字为Key,将Array[mid]的关键字与Key比较;
如果两者相等,则查找成功;
否则继续执行查找操作;
如果Array[mid]大于Key,则high=mid,否则low=mid;
重新计算mid=(low+high)/2,重复以上过程,直到找到满足条件的记录或最终未找到。
根据本发明的一个优选实施方式,如果找到集合定义,首先根据用户ID获取该用户数据所在的缓存节点;其次根据集合中的每条数据定义生成获取缓存数据的指令;
每条指令会根据是否是业务关联数据来决定是否需要加上业务标识的前缀。
根据本发明的一个优选实施方式,现有缓存节点数组为Node[n],用户ID为u,通过哈希算法获得该用户数据所在的缓存节点node(u),具体为node(u)=Node[Hash(u)%n]。
根据本发明的一个优选实施方式,使用一致性哈希算法获取缓存节点;
具体流程如下:
为每个缓存节点生成一个0到4294967295之间的种子token,生成规则可以将节点的ip和端口进行随机哈希运算;
将缓存节点写入数组Node[n]并按照token进行排序;
查询节点时,先判断数据大小,如果数组大小为1,直接返回Node[1];否则,将用户ID进行哈希运算,生成一个整数,然后按照二分查找算法,找到匹配的缓存节点。
根据本发明的一个优选实施方式,写入默认值的流程是:
首先判断该数据是否有时效性,如果有,通过如下算法计算超时时间:
若自然日超时,ExpireTime=time(Now)+24*3600-difftime(time(Now),mktime(today))+AddTime;
若自然周超时,ExpireTime=time(Now)+(7-weekday)24*3600-difftime(time(Now),mktime(today))+AddTime;
若非自然日、周超时,ExpreTime=time(Now)+CofingTime+AddTime;
其中,ExpireTime为计算后的超时时间,time(Now)为当前格林威治时间戳,difftime函数用于计算两个时间的时间差,difftime(time(Now),mktime(today))表示当前时间距离当天结束还有多少秒,weekday表示当前处于本周的第几天,AddTime表示额外的修正时间,CofingTime表示配置的固定超时时间,24*3600为一天的总秒数;
其次,根据数据类型进行默认值追加,如整型追加0,字符串追加\0;
最后,将默认数据追加到查询结果集。
根据本发明的一个优选实施方式,比较数据写入版本的具体流程:
S200:异步写入缓存数据到达;
S201:从缓存中查询该数据是否已存在,如存在,执行S202,否则执行S204;
根据本发明的一个优选实施方式,准备写入缓存的数据是结构化数据,首8字节分别是网络字节序的更新时间和数据更改流水号,用于新老数据的版本比较;其余字节为数据ID、数据值、有效期。
S202:如缓存中已存在该数据,循环遍历新老数据的首8字节;
S203:判断新数据的当前字节是否小于老数据,如小于,执行S204,否则执行S206;
S204:新数据覆盖掉缓存中的老数据;
S205:延长缓存的超时时间,结束;
S206:遍历是否结束,如未结束,执行S202,否则流程结束。
根据本发明的一个优选实施方式,Json解析器的实现流程如下:
S301:将查询结果集输入Json解析器,并对结果集进行遍历;
S302:对每个结果数据的通用属性进行json序列化;
S303:判断数据类型是否是结构化数据,如果是,执行S305,否则执行S304;
S304:将数值或字符串的结果值序列化到json中;继续执行S3011;
S305:根据数据ID加载序列化字典。字典内容包括该数据每个属性的类型、长度和名称;
S306:遍历结构化数据的每一个属性;
S307:找到该属性对应的字典配置;
S308:序列化属性名;
S309:序列化属性值;
S3010:属性遍历是否结束,如是,执行S3011,否则执行S306;
S3011:结果集遍历是否结束,如是,结束,否则执行S301。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
图1示出了根据本发明的一个实施例的获取格式化复合数据的流程图;
图2示出了根据本发明的一个实施例的比较数据写入版本的流程图;
图3示出了根据本发明的一个实施例的Json解析器的实现流程图。
具体实施方式
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的获取格式化复合数据的方法其具体实施方式、特征及其功效,详细说明如后。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。
本发明涉及的缩略语和关键术语定义如下:
Json:Json(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。它采用完全独立于编程语言的文本格式来存储和表示数据。
XML:XML(Extensible Markup Language,可扩展标记语言)是标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
格式化复合数据:由多种类型的数据组成的自描述的数据集合。如由整数、字符串组成的json或xml格式的数据。
图1示出了根据本发明的一个具体实施方式的获取格式化复合数据的方法,包含以下步骤:
S101:用户终端发起前端请求,请求中携带多个用户ID、集合数据ID,以及数据格式;
例如,前端可以在请求中携带5个用户ID、1个集合ID,并且可以指定数据以Json格式返回。根据本发明的一个优选实施方式,请求到达时,根据请求的数据格式不同,调用不同的访问接口GetDataMultiBin和GetDataMultJson;这两个接口是批量获取数据的统一入口;所述接口GetDataMultiBin用于批量获取二进制数据,所述接口GetDataMultJson用于批量获取json数据;接口参数包括:用户ID集合、用户集合ID总大小、集合数据ID、同步或异步获取。其中,用户ID集合是一段连续内存,需要依靠如下算法依次取出每个UID,首先使用公式Count(用户数量)=用户集合ID总大小/sizeof DWORD(整型大小)计算出UID的数量,然后对每个UID调用二级获取接口GetData(获取数据),GetData是获取每个用户数据的入口,参数包括:用户ID、集合数据ID、同步或异步获取。
S102:根据集合ID查询数据字典;
根据本发明的一个优选实施方式,从接口GetData获取数据的处理流程是:根据请求的集合ID,查询该集合的定义,集合定义包含但不限于如下属性:集合中的数据数量、每条数据的唯一标识、数据类型、默认值、数据格式、数据来源、超时时间、是否是业务关联数据、所属数据集群。
根据本发明的一个优选实施方式,为了更高效的查询,集合定义存储在有序的数组中,查询时,使用二分查找算法。二分查找算法具体流程为:将集合定义数组Array[n]按升序排列;数组初始低位下标low=0,数组初始高位下标high=n,则中位下标mid=(low+high)/2,中位记录为Array[mid];查询时,设查询关键字为Key,将Array[mid]的关键字与Key比较;如果两者相等,则查找成功;否则继续执行查找操作;如果Array[mid]大于Key,则high=mid,否则low=mid;重新计算mid=(low+high)/2,重复以上过程,直到找到满足条件的记录或最终未找到。
S103:判断集合定义是否找到;判断结果为否,则执行S104;判断结果为是,则执行S105;
S104:返回错误码;
S105:根据数据定义生成获取命令;
根据本发明的一个优选实施方式,如果找到集合定义,首先根据用户ID获取该用户数据所在的缓存节点;其次根据集合中的每条数据定义生成获取缓存数据的指令。
根据本发明的一个优选实施方式,每条指令会根据是否是业务关联数据来决定是否需要加上业务标识的前缀。
根据本发明的一个优选实施方式,现有缓存节点数组为Node[n],用户ID为u,则可通过哈希算法获得该用户数据所在的缓存节点node(u),具体为node(u)=Node[Hash(u)%n]。
根据本发明的一个优选实施方式,获取缓存节点还可以使用一致性哈希算法,具体流程如下:为每个缓存节点生成一个0到4294967295之间的种子token,生成规则可以将节点的ip和端口进行随机哈希运算;将缓存节点写入数组Node[n]并按照token进行排序;查询节点时,先判断数据大小,如果数组大小为1,直接返回Node[1];否则,将用户ID进行哈希运算,生成一个整数,然后按照二分查找算法,找到匹配的缓存节点。
根据本发明的一个优选实施方式,缓存指令的格式是:操作符+用户ID+数据ID1+数据ID2...+数据IDn。生成缓存指令时,为了提高效率,采用了静态生成和动态生成两种策略。静态生成是指程序初始化阶段即生成指令的数据ID部分,当请求到达时,直接追加操作符和用户ID即可拼接成完整的缓存指令。动态生成是指请求到达时才真正的拼接指令,具体流程如下:首先拼接操作符和用户ID,其次遍历数据集合定义中的每个数据,根据数据定义依次拼接数据ID和业务前缀。
S106:将生成的多条数据获取指令写入请求管道中;请求管道只负责将指令临时缓存在本地,并不马上提交该缓存指令;
S107:将请求管道中的获取指令批量提交到缓存数据库中,并获取到多个缓存查询结果;
S108:依次遍历每一个缓存查询结果,并对结果进行检查;所述检查具体为:首先判断返回是否为空数据,其次判断返回的数据量和请求的数据量是否一致,最后判断请求数据是否命中;
S109:判断缓存结果是否命中;如判断结果为否,则执行S1011;如判断结果为是,则执行S1010;
S1010:判断集合标识是否命中;如判断结果为否,则执行S1012;如判断结果为是,则执行S1013;
S1011:如数据命中,将数据写入查询结果集;
根据本发明的一个优选实施方式,使用一段连续的内存空间Buffer来保存该数据,并且将结果集的计数加1。
根据本发明的一个优选实施方式,具体写入步骤如下:首先,记录当前Buffer中的数据长度len,并追加数据头,数据头的内容包括用户ID、数据量和数据偏移;由于真实的数据尚未追加到Buffer中,所以此时的数据偏移是不准确的,需要在追加数据后重置;其次,准备追加缓存数据,追加前还需要检查该数据是否已超时,如超时,将该数据从缓存中删除;否则,执行追加操作。由于缓存中的数据和网络传输数据存在差异,因此需要进行数据转换,将缓存数据转换为网络传输格式的数据;最后,根据追加的数据长度重置数据头中的偏移。
S1012:将数据的默认值写入查询结果集,并且将结果集的计数加1;
根据本发明的一个优选实施方式,写入默认值的流程是:
首先判断该数据是否有时效性,如果有,通过如下算法计算超时时间:
若自然日超时,ExpireTime=time(Now)+24*3600-difftime(time(Now),mktime(today))+AddTime;
若自然周超时,ExpireTime=time(Now)+(7-weekday)24*3600-difftime(time(Now),mktime(today))+AddTime;
若非自然日、周超时,ExpreTime=time(Now)+CofingTime+AddTime;
其中,ExpireTime为计算后的超时时间,time(Now)为当前格林威治时间戳,difftime函数用于计算两个时间的时间差,difftime(time(Now),mktime(today))表示当前时间距离当天结束还有多少秒,weekday表示当前处于本周的第几天,AddTime表示额外的修正时间,CofingTime表示配置的固定超时时间,24*3600为一天的总秒数;
其次,根据数据类型进行默认值追加,如整型追加0,字符串追加\0;
最后,将默认数据追加到查询结果集。
S1013:根据数据来源定义从相应数据存储中加载数据,将数据写入到查询结果集中;
根据本发明的一个优选实施方式,加载数据流程如下:首先判断加载临时容器TmpBuffer是否为空如果空,写入用户ID和数据集合ID;其次,准备远程调用协议用于从数据源加载数据,协议参数包括但不限于协议类型、协议长度、用户UID、数据ID、数据源平台ID。为了避免缓存穿透对数据源平台带来大量压力,造成雪崩风险,执行远程调用前,会经过请求保护器的判断,用于限制请求流量。
根据本发明的一个优选实施方式,请求保护器通过令牌桶算法实现,具体流程为:系统以一定的速度生成令牌,并将其放置到令牌桶中,可以将令牌桶想象成一个缓冲区,当缓冲区填满时,新生成的令牌会被丢弃。系统接收到一个请求后,从令牌桶中取出一个令牌,然后进行处理。如果令牌桶中没有令牌,则返回错误,用于提示请求速率超过系统限制。假设生成令牌的速度为r,令牌桶的大小n,则单位时间允许通过的请求最大为n,平均为r。最后,如果通过请求包括器的校验,则调用远程协议获取用户数据,并将结果写入到查询结果集和临时容器TmpBuffer中。
S1014:通过异步队列将临时容器TmpBuffer中的数据写入到缓存中;为了保证推送的效率和准确性,会对数据进行版本的比较,以避免老的缓存数据覆盖新的缓存数据;
S1015:判断缓存结果是否遍历完成;如判断结果为否,则返回S108;如判断结果为是,则执行S1016;
S1016:根据请求的数据格式读取格式转换解释器;
所述解释器是针对特定数据进行转换的规则定义和执行者,解释器中包含数据定义和属性定义两个部分;其中数据定义包括数据ID定义、属性数量定义、数据总长度定义,属性定义包括属性序号定义、属性长度定义、属性类型定义和属性名定义。
S1017:如果请求的是json格式数据,加载json解释器;
S1018:如果请求的是xml格式数据,加载xml解释器;
S1019:使用解释器将查询结果集中的数据格式化为请求的数据格式;
根据本发明的一个具体实施方式,转化时,依次将查询结果集中的结构化数据添加到json字符串中。
例如,如结构化数据为tom,30,且解析器配置为name、age,那么生成的json为{“name”:“tom”,“age”:“30”};
S1020:校验接口返回值,如返回成功,将格式化的集合数据返回客户端,否则返回错误码。
图2示出了根据本发明的一个具体实施方式的比较数据写入版本的具体流程:
S200:异步写入缓存数据到达;
S201:从缓存中查询该数据是否已存在,如存在,执行S202,否则执行S204;
根据本发明的一个优选实施方式,准备写入缓存的数据是结构化数据,首8字节分别是网络字节序的更新时间和数据更改流水号,用于新老数据的版本比较;其余字节为数据ID、数据值、有效期等属性。
S202:如缓存中已存在该数据,循环遍历新老数据的首8字节;
S203:判断新数据的当前字节是否小于老数据,如小于,执行S204,否则执行S206;
S204:新数据覆盖掉缓存中的老数据;
S205:延长缓存的超时时间,结束;
S206:遍历是否结束,如未结束,执行S202,否则流程结束。
图3示出了根据本发明的一个具体实施方式的Json解析器的实现流程。
S301:将查询结果集输入Json解析器,并对结果集进行遍历;
S302:对每个结果数据的通用属性进行json序列化,如数据ID、数据类型、数据有效期等;
S303:判断数据类型是否是结构化数据,如果是,执行S305,否则执行S304;数据类型分为数值、字符串和结构化数据三种;
S304:将数值或字符串的结果值序列化到json中;继续执行S3011;
S305:根据数据ID加载序列化字典。字典内容包括该数据每个属性的类型、长度和名称;
S306:遍历结构化数据的每一个属性;
S307:找到该属性对应的字典配置;
S308:序列化属性名;
S309:序列化属性值;
S3010:属性遍历是否结束,如是,执行S3011,否则执行S306;
S3011:结果集遍历是否结束,如是,结束,否则执行S301。
本发明不但解决了批量获取缓存数据的效率问题,而且可以根据客户端的请求将缓存结果进行格式化处理,简化了客户端使用复杂度的同时,提高了缓存系统的处理性能。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (10)
1.一种获取格式化复合数据的方法,其特征在于包含以下步骤:
S101:用户终端发起前端请求,请求中携带多个用户ID、集合数据ID,以及数据格式;
S102:根据集合ID查询数据字典;
S103:判断集合定义是否找到;判断结果为否,则执行S104;判断结果为是,则执行S105;
S104:返回错误码;
S105:根据数据定义生成获取命令;
S106:将生成的多条数据获取指令写入请求管道中;请求管道只负责将指令临时缓存在本地,并不马上提交该缓存指令;
S107:将请求管道中的获取指令批量提交到缓存数据库中,并获取到多个缓存查询结果;
S108:依次遍历每一个缓存查询结果,并对结果进行检查;所述检查具体为:首先判断返回是否为空数据,其次判断返回的数据量和请求的数据量是否一致,最后判断请求数据是否命中;
S109:判断缓存结果是否命中;如判断结果为否,则执行S1011;如判断结果为是,则执行S1010;
S1010:判断集合标识是否命中;如判断结果为否,则执行S1012;如判断结果为是,则执行S1013;
S1011:如数据命中,将数据写入查询结果集;
S1012:将数据的默认值写入查询结果集,并且将结果集的计数加1;
S1013:根据数据来源定义从相应数据存储中加载数据,将数据写入到查询结果集中;
S1014:通过异步队列将临时容器TmpBuffer中的数据写入到缓存中;
S1015:判断缓存结果是否遍历完成;如判断结果为否,则返回S108;如判断结果为是,则执行S1016;
S1016:根据请求的数据格式读取格式转换解释器;
S1017:如果请求的是json格式数据,加载json解释器;
S1018:如果请求的是xml格式数据,加载xml解释器;
S1019:使用解释器将查询结果集中的数据格式化为请求的数据格式;
S1020:校验接口返回值,如返回成功,将格式化的集合数据返回客户端,否则返回错误码。
2.根据权利要求1所述的获取格式化复合数据的方法,其特征在于:
请求到达时,根据请求的数据格式不同,调用不同的访问接口GetDataMultiBin和GetDataMultJson;所述接口GetDataMultiBin用于批量获取二进制数据,所述接口GetDataMultJson用于批量获取json数据;
接口参数包括:用户ID集合、用户集合ID总大小、集合数据ID、同步或异步获取。
3.根据权利要求1或2所述的获取格式化复合数据的方法,其特征在于:
从接口GetData获取数据的处理流程是:根据请求的集合ID,查询该集合的定义;
集合定义包含但不限于如下属性:集合中的数据数量、每条数据的唯一标识、数据类型、默认值、数据格式、数据来源、超时时间、是否是业务关联数据、所属数据集群。
4.根据权利要求1-3任一所述的获取格式化复合数据的方法,其特征在于:
集合定义存储在有序的数组中,查询时,使用二分查找算法;
二分查找算法具体流程为:将集合定义数组Array[n]按升序排列;
数组初始低位下标low=0,数组初始高位下标high=n,则中位下标mid=(low+high)/2,中位记录为Array[mid];
查询时,设查询关键字为Key,将Array[mid]的关键字与Key比较;
如果两者相等,则查找成功;
否则继续执行查找操作;
如果Array[mid]大于Key,则high=mid,否则low=mid;
重新计算mid=(low+high)/2,重复以上过程,直到找到满足条件的记录或最终未找到。
5.根据权利要求1-4任一所述的获取格式化复合数据的方法,其特征在于:
如果找到集合定义,首先根据用户ID获取该用户数据所在的缓存节点;其次根据集合中的每条数据定义生成获取缓存数据的指令;
每条指令会根据是否是业务关联数据来决定是否需要加上业务标识的前缀。
6.根据权利要求1-5任一所述的缓存数据的更新方法,其特征在于:
现有缓存节点数组为Node[n],用户ID为u,通过哈希算法获得该用户数据所在的缓存节点node(u),具体为node(u)=Node[Hash(u)%n]。
7.根据权利要求1-6任一所述的缓存数据的更新方法,其特征在于:
使用一致性哈希算法获取缓存节点;
具体流程如下:
为每个缓存节点生成一个0到4294967295之间的种子token,生成规则可以将节点的ip和端口进行随机哈希运算;
将缓存节点写入数组Node[n]并按照token进行排序;
查询节点时,先判断数据大小,如果数组大小为1,直接返回Node[1];否则,将用户ID进行哈希运算,生成一个整数,然后按照二分查找算法,找到匹配的缓存节点。
8.根据权利要求1-7任一所述的缓存数据的更新方法,其特征在于:
写入默认值的流程是:
首先判断该数据是否有时效性,如果有,通过如下算法计算超时时间:
若自然日超时,ExpireTime=time(Now)+24*3600-difftime(time(Now),mktime(today))+AddTime;
若自然周超时,ExpireTime=time(Now)+(7-weekday)24*3600-difftime(time(Now),mktime(today))+AddTime;
若非自然日、周超时,ExpreTime=time(Now)+CofingTime+AddTime;
其中,ExpireTime为计算后的超时时间,time(Now)为当前格林威治时间戳,difftime函数用于计算两个时间的时间差,difftime(time(Now),mktime(today))表示当前时间距离当天结束还有多少秒,weekday表示当前处于本周的第几天,AddTime表示额外的修正时间,CofingTime表示配置的固定超时时间,24*3600为一天的总秒数;
其次,根据数据类型进行默认值追加,如整型追加0,字符串追加\0;
最后,将默认数据追加到查询结果集。
9.根据权利要求1-8任一所述的缓存数据的更新方法,其特征在于:
比较数据写入版本的具体流程:
S200:异步写入缓存数据到达;
S201:从缓存中查询该数据是否已存在,如存在,执行S202,否则执行S204;
根据本发明的一个优选实施方式,准备写入缓存的数据是结构化数据,首8字节分别是网络字节序的更新时间和数据更改流水号,用于新老数据的版本比较;其余字节为数据ID、数据值、有效期;
S202:如缓存中已存在该数据,循环遍历新老数据的首8字节;
S203:判断新数据的当前字节是否小于老数据,如小于,执行S204,否则执行S206;
S204:新数据覆盖掉缓存中的老数据;
S205:延长缓存的超时时间,结束;
S206:遍历是否结束,如未结束,执行S202,否则流程结束。
10.根据权利要求1-9任一所述的缓存数据的更新方法,其特征在于:
Json解析器的实现流程如下:
S301:将查询结果集输入Json解析器,并对结果集进行遍历;
S302:对每个结果数据的通用属性进行json序列化;
S303:判断数据类型是否是结构化数据,如果是,执行S305,否则执行S304;
S304:将数值或字符串的结果值序列化到json中;继续执行S3011;
S305:根据数据ID加载序列化字典,字典内容包括该数据每个属性的类型、长度和名称;
S306:遍历结构化数据的每一个属性;
S307:找到该属性对应的字典配置;
S308:序列化属性名;
S309:序列化属性值;
S3010:属性遍历是否结束,如是,执行S3011,否则执行S306;
S3011:结果集遍历是否结束,如是,结束,否则执行S301。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810130433.7A CN108334622B (zh) | 2018-02-08 | 2018-02-08 | 一种获取格式化复合数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810130433.7A CN108334622B (zh) | 2018-02-08 | 2018-02-08 | 一种获取格式化复合数据的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108334622A true CN108334622A (zh) | 2018-07-27 |
CN108334622B CN108334622B (zh) | 2020-06-02 |
Family
ID=62928602
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810130433.7A Active CN108334622B (zh) | 2018-02-08 | 2018-02-08 | 一种获取格式化复合数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108334622B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108446319A (zh) * | 2018-02-09 | 2018-08-24 | 烽火通信科技股份有限公司 | 将数据进行二进制序列化的方法和系统 |
CN109542963A (zh) * | 2018-10-31 | 2019-03-29 | 平安科技(深圳)有限公司 | 基于大数据的医院数据处理方法及相关装置 |
CN109739874A (zh) * | 2018-11-23 | 2019-05-10 | 平安科技(深圳)有限公司 | 提供数据内容的方法、装置、计算机设备及存储介质 |
CN110008173A (zh) * | 2019-03-07 | 2019-07-12 | 深圳市买买提信息科技有限公司 | 一种数据存储的方法及装置 |
CN112671821A (zh) * | 2020-08-17 | 2021-04-16 | 紫光云技术有限公司 | 一种云计算网络设备配置差异比较方法 |
CN113536732A (zh) * | 2021-06-24 | 2021-10-22 | 北京天健源达科技股份有限公司 | 应用于电子病历的日期时间数据格式化显示方法 |
CN109739874B (zh) * | 2018-11-23 | 2024-05-31 | 平安科技(深圳)有限公司 | 提供数据内容的方法、装置、计算机设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040230666A1 (en) * | 2003-05-14 | 2004-11-18 | Microsoft Corporation | Method, system, and computer-readable medium for communicating results to a data query in a computer network |
CN101609474A (zh) * | 2009-07-24 | 2009-12-23 | 国网电力科学研究院 | 一种基于flex的数据封装和分发的方法 |
CN103279509A (zh) * | 2013-05-17 | 2013-09-04 | 北京首钢自动化信息技术有限公司 | 一种采用动态查询语言的快速查询方法 |
CN103946841A (zh) * | 2011-11-17 | 2014-07-23 | 益焦.com有限公司 | 用于动态服务集成的系统和方法 |
-
2018
- 2018-02-08 CN CN201810130433.7A patent/CN108334622B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040230666A1 (en) * | 2003-05-14 | 2004-11-18 | Microsoft Corporation | Method, system, and computer-readable medium for communicating results to a data query in a computer network |
CN101609474A (zh) * | 2009-07-24 | 2009-12-23 | 国网电力科学研究院 | 一种基于flex的数据封装和分发的方法 |
CN103946841A (zh) * | 2011-11-17 | 2014-07-23 | 益焦.com有限公司 | 用于动态服务集成的系统和方法 |
CN103279509A (zh) * | 2013-05-17 | 2013-09-04 | 北京首钢自动化信息技术有限公司 | 一种采用动态查询语言的快速查询方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108446319A (zh) * | 2018-02-09 | 2018-08-24 | 烽火通信科技股份有限公司 | 将数据进行二进制序列化的方法和系统 |
CN109542963A (zh) * | 2018-10-31 | 2019-03-29 | 平安科技(深圳)有限公司 | 基于大数据的医院数据处理方法及相关装置 |
CN109542963B (zh) * | 2018-10-31 | 2023-10-24 | 平安科技(深圳)有限公司 | 基于大数据的医院数据处理方法及相关装置 |
CN109739874A (zh) * | 2018-11-23 | 2019-05-10 | 平安科技(深圳)有限公司 | 提供数据内容的方法、装置、计算机设备及存储介质 |
CN109739874B (zh) * | 2018-11-23 | 2024-05-31 | 平安科技(深圳)有限公司 | 提供数据内容的方法、装置、计算机设备及存储介质 |
CN110008173A (zh) * | 2019-03-07 | 2019-07-12 | 深圳市买买提信息科技有限公司 | 一种数据存储的方法及装置 |
CN112671821A (zh) * | 2020-08-17 | 2021-04-16 | 紫光云技术有限公司 | 一种云计算网络设备配置差异比较方法 |
CN112671821B (zh) * | 2020-08-17 | 2023-04-18 | 紫光云技术有限公司 | 一种云计算网络设备配置差异比较方法 |
CN113536732A (zh) * | 2021-06-24 | 2021-10-22 | 北京天健源达科技股份有限公司 | 应用于电子病历的日期时间数据格式化显示方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108334622B (zh) | 2020-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108334622A (zh) | 一种获取格式化复合数据的方法 | |
JP5407043B2 (ja) | バイナリにエンコードされたxmlデータの効率的な区分的アップデート | |
JP5431513B2 (ja) | コマンド索引のためのローカル記憶装置および拡張記憶装置を使用したコマンドスクリプトの解釈 | |
US7756852B2 (en) | Concurrent execution of groups of database statements | |
US9754083B2 (en) | Automatic creation of clinical study reports | |
Schwarz et al. | Extensions and applications of the SDIF sound description interchange format | |
CN106372130B (zh) | 一种静态资源管理方法 | |
US20030158805A1 (en) | Method of translating electronic data interchange documents into other formats and in reverse | |
CN108388613B (zh) | 一种缓存数据的更新方法 | |
CN112800769A (zh) | 命名实体识别方法、装置、计算机设备和存储介质 | |
CN108984393A (zh) | 一种单元测试代码自动生成方法及装置 | |
CN106990970A (zh) | 基于mvc动态页面生成方法及系统 | |
CN112513836A (zh) | 结构化记录检索 | |
WO2022142635A1 (zh) | 业务信息录入方法、装置、服务器和存储介质 | |
US20040244012A1 (en) | Signature serialization | |
CN112131289A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
US7085759B2 (en) | System and method for communicating data to a process | |
CN113949749B (zh) | Xml报文处理方法及装置 | |
CN114328486A (zh) | 基于模型的数据质量核查方法及装置 | |
CN111125154A (zh) | 用于输出结构化查询语句的方法和装置 | |
CN111144136B (zh) | 数据转换方法、系统、计算机设备及可读存储介质 | |
CN116450586B (zh) | 火箭数据解析方法、系统、电子设备及计算机存储介质 | |
CN109522211A (zh) | 接口参数传递方法、装置、电子设备及存储介质 | |
CN113792048B (zh) | 非关系型数据库的表单校验规则生成方法和系统 | |
CN116975087A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |