CN113190592B - 一种数据处理方法和装置 - Google Patents
一种数据处理方法和装置 Download PDFInfo
- Publication number
- CN113190592B CN113190592B CN202110453168.8A CN202110453168A CN113190592B CN 113190592 B CN113190592 B CN 113190592B CN 202110453168 A CN202110453168 A CN 202110453168A CN 113190592 B CN113190592 B CN 113190592B
- Authority
- CN
- China
- Prior art keywords
- data
- account
- under
- acquiring
- arrangement position
- 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.)
- Active
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/2457—Query processing with adaptation to user needs
- G06F16/24578—Query processing with adaptation to user needs using ranking
-
- 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/23—Updating
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据处理方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:确定符合数据查询请求的多个账号,以多个账号中的第一账号为起点,查询第一账号下符合数据查询请求的第一数据;分析多个账号的其余账号下与第一账号相邻的第二账号,确定第二账号相对于第一账号的位置方向;依据位置方向和第一数据的附属信息,获取第二账号下符合数据查询请求的第二数据的标识,进而获得第二数据;重复上述分析账号、从附属信息中获取数据标识、获得数据的操作,直至查询到每个账号下符合所述数据查询请求的数据为止,返回查询到的多个数据。该实施方式查询时从相邻账号下已查询到的数据开始,降低了查询经过的数据量,以提高查询效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据处理方法和装置。
背景技术
随着移动互联网技术的兴起与发展,越来越多的用户通过可穿戴设备、手机、平板电脑等智能终端来及时了解自己想要的信息。因此,很多商家为了满足用户需求,通过多种方式向用户推送信息,希望引起用户的注意。信息需推送至用户账号,而一个账号可能会对应多个收货地,即存有多个电话号。如果是电话通知,需确保一个账号只通知一次,若存在多个电话号,打通一个即代表当前账号已完成通知。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:现有推送信息使用的容器为JDK提供的LinkedHashMap,但这种方式需要两层map之间来回转换,使得代码臃肿,难以修改维护。且来回转换的消耗也并不能满足高效取号的需求,所以需要设计一种数据结构,能够满足高效取号的要求,并减少代码量,更利于维护。
发明内容
有鉴于此,本发明实施例提供一种数据处理方法和装置,至少能够解决现有技术查询数据复杂度较高,为了解决复杂度代码也会变得复杂且难以维护的现象。
为实现上述目的,根据本发明实施例的一个方面,提供了一种数据处理方法,包括:确定符合数据查询请求的多个账号,以所述多个账号中的第一账号为起点,查询所述第一账号下符合所述数据查询请求的第一数据;分析所述多个账号的其余账号下与所述第一账号相邻的第二账号,确定所述第二账号相对于所述第一账号的位置方向;依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据;重复上述分析账号、从附属信息中获取数据标识、获得数据的操作,直至查询到每个账号下符合所述数据查询请求的数据为止,返回查询到的多个数据。
可选的,所述查询所述第一账号下符合所述数据查询请求的第一数据,包括:从所述数据查询请求中,获取位于所述第一账号下的待查询数据排列位置,判断待查询数据排列位置是否为第一位;若是,则将所述第一账号下位于所述第一位的数据,作为所述第一数据;或若否,则从第一位数据的右附属信息中,获取位于所述第一位数据之后且相邻的第二位数据的标识,进而获得第二位数据;以及重复上述获取标识和数据的操作,直至达到待查询数据排列位置为止,将与待查询数据排列位置对应的数据作为所述第一数据。
可选的,所述依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据,包括:依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;从所述数据查询请求中,获取位于所述第二账号下的待查询数据排列位置,判断所述排列位置是否处于待查询数据排列位置;若处于,则确定所述第二数据符合所述数据查询请求;或若不处于,则以所述第二数据为起点,依据所述第二数据的左/右附属信息,重新确定所述第二账号下符合所述数据查询请求的数据。
可选的,所述依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,包括:判断所述第一账号和所述第二账号之间是否存在其他账号;若不存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识;或若存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述其他账号下与所述第一数据位于同一排列位置的第三数据的标识,进而获得第三数据;和继续依据所述位置方向,从所述第三数据的上/下附属信息中,获取所述第二账号下与所述第三数据位于同一排列位置的第二数据的标识。
可选的,所述依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,包括:判断所述第一账号和所述第二账号之间是否存在其他账号;若不存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识;或若存在,则删除所述其他账号,并基于所述第一账号和第二账号下各数据的标识,更新所述第一账号和第二账号下各相邻数据的上/下附属信息;基于更新后的第一数据的上/下附属信息,结合所述位置方向,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识。
可选的,所述以所述第二数据为起点,依据所述第二数据的左/右附属信息,重新确定所述第二账号下符合所述数据查询请求的数据,包括:依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第二数据的左/右附属信息中,获取所述第二账号下位于所述第二数据左/右、且相邻的数据的标识,进而获取相应数据;判断数据是否符合所述数据查询请求,若不符合,则重复上述数据获取操作,直至达到待查询数据排列位置停止,将待查询数据排列位置处的数据,作为所述第二账号下符合所述数据查询请求的数据。
可选的,所述依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据,包括:从所述数据查询请求中,获取位于所述第二账号下的待查询数据排列位置,判断所述第一数据在所述第一账号下所处的位置是否为待查询数据排列位置;若是,则依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;若否,则依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第一数据的左/右附属信息中,获取所述第一账号下位于所述第一数据左/右、且相邻的数据的标识,进而获得相应数据;和重复上述位置判断、数据标识和获取数据操作,直至获取到所述第一账号下位于所述待查询数据排列位置的第四数据;依据所述第二账号相对于所述第一账号的位置方向、所述第四数据的上/下附属信息,获取所述第二账号下与所述第四数据位于同一排列位置的第二数据的标识,进而获得第二数据。
可选的,所述第一账号为所述多个账号下的任一账号;所述方法包括:若所述任一账号为所述多个账号的最小账号,则按照从最小账号向所述多个账号的最大账号的纵向方向,按序查询其他各账号下符合所述数据查询请求的数据;或若所述任一账号为所述多个账号的最大账号,则按照从最大账号向所述多个账号的最小账号的纵向方向,按序查询其他各账号下符合所述数据查询请求的数据;或若所述任一账号并非所述多个账号的最小账号和最大账号,则分别按照所述任一账号向最小账号和最大账号的两个纵向方向,按序查询其他各账号下符合所述数据查询请求的数据。
可选的,在所述确定符合数据查询请求的多个账号之前,还包括:确定每个数据在所处账号下的排列位置并存储;以及确定每个数据与相邻其他数据之间的左右上下关系。
可选的,所述确定每个数据与相邻其他数据之间的左右上下关系,包括:对于一个账号下的一个数据,获取位于所述一个账号之上且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的上附属信息中;获取位于所述一个账号之下且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的下附属信息中;获取同处于所述一个账号、位于所述一个数据之前且相邻的数据,将数据的标识存储至所述一个数据的左附属信息中;获取同处于所述一个账号、位于所述一个数据之后且相邻的数据,将数据的标识存储至所述一个数据的右附属信息中。
可选的,还包括:对所述一个数据创建双向链表,用于存储所述一个数据的左、右、上、下附属信息。
可选的,在所述确定每个数据在所处账号下的排列位置并存储之前,还包括:接收容器创建请求,依据所述容器创建请求中的数据类型,确定可创建的容器长度,进而基于所述容器长度创建容器;其中,容器用于存储不同账号下的数据,且数据按序排列。
为实现上述目的,根据本发明实施例的另一方面,提供了一种数据处理装置,包括:请求模块,用于确定符合数据查询请求的多个账号,以所述多个账号中的第一账号为起点,查询所述第一账号下符合所述数据查询请求的第一数据;分析模块,用于分析所述多个账号的其余账号下与所述第一账号相邻的第二账号,确定所述第二账号相对于所述第一账号的位置方向;获取模块,用于依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据;迭代模块,用于重复上述分析账号、从附属信息中获取数据标识、获得数据的操作,直至查询到每个账号下符合所述数据查询请求的数据为止,返回查询到的多个数据。
可选的,所述请求模块,用于:从所述数据查询请求中,获取位于所述第一账号下的待查询数据排列位置,判断待查询数据排列位置是否为第一位;若是,则将所述第一账号下位于所述第一位的数据,作为所述第一数据;或若否,则从第一位数据的右附属信息中,获取位于所述第一位数据之后且相邻的第二位数据的标识,进而获得第二位数据;以及重复上述获取标识和数据的操作,直至达到待查询数据排列位置为止,将与待查询数据排列位置对应的数据作为所述第一数据。
可选的,所述获取模块,用于:依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;从所述数据查询请求中,获取位于所述第二账号下的待查询数据排列位置,判断所述排列位置是否处于待查询数据排列位置;若处于,则确定所述第二数据符合所述数据查询请求;或若不处于,则以所述第二数据为起点,依据所述第二数据的左/右附属信息,重新确定所述第二账号下符合所述数据查询请求的数据。
可选的,所述获取模块,用于:判断所述第一账号和所述第二账号之间是否存在其他账号;若不存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识;或若存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述其他账号下与所述第一数据位于同一排列位置的第三数据的标识,进而获得第三数据;和继续依据所述位置方向,从所述第三数据的上/下附属信息中,获取所述第二账号下与所述第三数据位于同一排列位置的第二数据的标识。
可选的,所述获取模块,用于:判断所述第一账号和所述第二账号之间是否存在其他账号;若不存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识;或若存在,则删除所述其他账号,并基于所述第一账号和第二账号下各数据的标识,更新所述第一账号和第二账号下各相邻数据的上/下附属信息;基于更新后的第一数据的上/下附属信息,结合所述位置方向,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识。
可选的,所述获取模块,用于:依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第二数据的左/右附属信息中,获取所述第二账号下位于所述第二数据左/右、且相邻的数据的标识,进而获取相应数据;判断数据是否符合所述数据查询请求,若不符合,则重复上述数据获取操作,直至达到待查询数据排列位置停止,将待查询数据排列位置处的数据,作为所述第二账号下符合所述数据查询请求的数据。
可选的,所述获取模块,用于:从所述数据查询请求中,获取位于所述第二账号下的待查询数据排列位置,判断所述第一数据在所述第一账号下所处的位置是否为待查询数据排列位置;若是,则依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;若否,则依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第一数据的左/右附属信息中,获取所述第一账号下位于所述第一数据左/右、且相邻的数据的标识,进而获得相应数据;和重复上述位置判断、数据标识和获取数据操作,直至获取到所述第一账号下位于所述待查询数据排列位置的第四数据;依据所述第二账号相对于所述第一账号的位置方向、所述第四数据的上/下附属信息,获取所述第二账号下与所述第四数据位于同一排列位置的第二数据的标识,进而获得第二数据。
可选的,所述第一账号为所述多个账号下的任一账号;所述装置包括:若所述任一账号为所述多个账号的最小账号,则按照从最小账号向所述多个账号的最大账号的纵向方向,按序查询其他各账号下符合所述数据查询请求的数据;或若所述任一账号为所述多个账号的最大账号,则按照从最大账号向所述多个账号的最小账号的纵向方向,按序查询其他各账号下符合所述数据查询请求的数据;或若所述任一账号并非所述多个账号的最小账号和最大账号,则分别按照所述任一账号向最小账号和最大账号的两个纵向方向,按序查询其他各账号下符合所述数据查询请求的数据。
可选的,还包括关系确定模块,用于:确定每个数据在所处账号下的排列位置并存储;以及确定每个数据与相邻其他数据之间的左右上下关系。
可选的,所述关系确定模块,用于:对于一个账号下的一个数据,获取位于所述一个账号之上且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的上附属信息中;获取位于所述一个账号之下且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的下附属信息中;获取同处于所述一个账号、位于所述一个数据之前且相邻的数据,将数据的标识存储至所述一个数据的左附属信息中;获取同处于所述一个账号、位于所述一个数据之后且相邻的数据,将数据的标识存储至所述一个数据的右附属信息中。
可选的,还包括:对所述一个数据创建双向链表,用于存储所述一个数据的左、右、上、下附属信息。
可选的,还包括创建容器模块,用于:接收容器创建请求,依据所述容器创建请求中的数据类型,确定可创建的容器长度,进而基于所述容器长度创建容器;其中,容器用于存储不同账号下的数据,且数据按序排列。
为实现上述目的,根据本发明实施例的再一方面,提供了一种数据处理电子设备。
本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一所述的数据处理方法。
为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一所述的数据处理方法。
根据本发明所述提供的方案,上述发明中的一个实施例具有如下优点或有益效果:采用横纵方向相结合,且每次查询时并非从账号下的首位数据开始,而是从相邻账号下已查询到的数据开始,有效降低查询所经过的数据量,以此提高查询效率。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是传统LinkedHashMap的数据结构;
图2是根据本发明实施例的一种构建数据附属信息的主要流程示意图;
图3是TwoDTable存储数据的结构;
图4是根据本发明实施例的一种数据处理方法的主要流程示意图;
图5是根据本发明实施例的一种可选的数据处理方法的流程示意图;
图6是根据本发明实施例的另一种可选的数据处理方法的流程示意图;
图7是根据本发明实施例的又一种可选的数据处理方法的流程示意图;
图8是根据本发明实施例的一种数据处理装置的主要模块示意图;
图9是本发明实施例可以应用于其中的示例性系统架构图;
图10是适于用来实现本发明实施例的移动设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
此处对现有技术进行详细描述:
将账号-电话号信息汇集至表1,每个账号下都有多个地址,不同地址对应不同电话号,假设A~E各账号能打通的电话号分别为1、4、2、1、3:
表1账号与号码关系图
账号 | 号码列 | 号码列 | 号码列 | 号码列 |
A | 1 | 2 | 3 | 4 |
B | 1 | 2 | 3 | 4 |
C | 1 | 2 | 3 | 4 |
D | 1 | 2 | 3 | 4 |
E | 1 | 2 | 3 | 4 |
送号方式分为横向和纵向:
1)横向:先选择第一个账号,开始从第一列送号,之后依次第二列、第三列、第四列,直到接通为止,再送出第二个账号的第一列号码。依次类推,直至所有账号通知到为止。
2)纵向:先从所有账号的第一号码列由上而下送号,送出所有第一列后,删除接通的账号。再从剩下未接通的账号里的第二列开始送号,依次类推,直至所有账号全通知到为止。
假设每个送号处理需要1分钟时间,按照横向和纵向的方式分别操作。举例送号线路分别为2路和3路时,达成率(电话接通的百分比)超半和首次出现空闲线路的时间分别如下图所示:
表2两个线路,横向处理
表3两个线路,纵向处理
表4三个线路,横向处理
表5三个线路,纵向处理
表2中,达成率过半是在4min,第一个空闲出现在5min。表3中达成率过半是在4min,第一个空闲出现在6min。表4中达成率过半是在2min,第一个空闲出现在3min。表5中达成率过半是在3min,第一个空闲出现在4min。上述总共5个账号,达成率过半需要3个账号,以表5为例,打通第三个账号(A1,D1,C2)时,时间是3min,即达成率过半是在3min。
由以上结果可知,达成率和空闲值并不固定,其会随着账号和线路数量的改变出现不同的结果。为达到效率最优,需要在不停止服务的前提下,随时调整策略方式。这时候就需要一种数据结构,能够在预处理后,满足不同策略下的处理需求。
传统实现这种二位表的数据存储及检索方式,通常采用有序的Map,再套用另一个Map来实现。Java中通常使用JDK提供的LinkedHashMap,其优势为add/get操作的时间复杂度为O(1),但当遇到hash冲突时时间复杂度为0(n):
1、LinkedHashMap由HashMap+双向链表实现的,基本数据结构是Entry,Entry的属性如下:
其中,前四个值是从HashMap.Entry继承过来的,后面两个为LinkedHashMap所独有。next用于维护HashMap指定table位置上连接Entry的顺序,before/after用于维护Entry插入的先后顺序。
2、当put元素时,不但要把Entry加入到HashMap中,还要加入到双向链表中。使用图来表示添加数据的过程,红色线代表双向链表,其余表示HashMap结构,header是一个Entry类型的双向链表表头。当插入一定数据时数据结构参见图1所示,可以看到,红色部分双向链表无论是下标还是内容,操作的时间复杂度都是0(1),但黑色的hash冲突时的单向链表,操作时间复杂度却是0(n)。如果以黑色的单向链表做基本排序的时候,会发现红色的双线链表的无序是混乱的,反之亦然。
3、以目前LinkedHashMap的数据结构,无法直接表达一个二维表数据,且内存使用率较高。
参见图2,示出的是本发明实施例提供的一种构建数据附属信息的主要流程图,包括如下步骤:
S201:确定每个数据在所处账号下的排列位置并存储;
S202:对于一个账号下的一个数据,获取位于所述一个账号之上且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的上附属信息中;
S203:获取位于所述一个账号之下且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的下附属信息中;
S204:获取同处于所述一个账号、位于所述一个数据之前且相邻的数据,将数据的标识存储至所述一个数据的左附属信息中;
S205:获取同处于所述一个账号、位于所述一个数据之后且相邻的数据,将数据的标识存储至所述一个数据的右附属信息中。
上述实施方式中,对于步骤S201~S205,本方案中TwoDTable修改原有Entry数据结构(称为数据的附属信息),去掉next,增加一组双向链表,使用二组双向链表来分别维护每个数据与上下左右其他相邻各数据之间的关系,即X轴与Y轴关系。TwoDTable中Entry的属性如下:
其中,前三个值与现有HashMap.Entry中的key、value、hash含义一样,剩余previous-x、next-x、previous-y、next-y用来维护每个数据与其他相邻各数据的左右上下关系,具体地:
previous-x,即左附属信息,存储的是与目标数据处于同一账号、且位于该目标数据之前的数据的标识。例如表6账号3中No.3的左附属信息,存储的是No.2的数据标识3-2;其中,表6中各数据的标识可以基于所处账号、在该账号下的排列位置生成。
next-x,即右附属信息,存储的是与目标数据处于同一账号、且位于该目标数据之后的数据的标识。例如表6账号3中No.3的右附属信息,存储的是No.4的数据标识3-4。
previous-y,即上附属信息,存储的是与目标数据处于同一排列位置、但账号位于该目标数据所处账号之上且相邻的数据的标识。例如表6账号3中No.3的上附属信息,存储的是账号2下No.3的数据标识2-3。
next-y,即下附属信息,存储的是与目标数据处于同一排列位置、但账号位于该目标数据所处账号之下且相邻的数据的标识。例如表6账号3中No.3的下附属信息,存储的是账号4下No.3的数据标识4-3。
表6数据的双向链表结构
No.1 | No.2 | No.3 | No.4 | No.5 | No.6 | |
账号1 | 1--1 | 1--2 | 1--3 | 1--4 | 1--5 | 1--6 |
账号2 | 2--1 | 2--2 | 2--3 | 2--4 | 2--5 | 2--6 |
账号3 | 3--1 | 3--2 | 3--3 | 3--4 | 3--5 | 3--6 |
账号4 | 4--1 | 4--2 | 4--3 | 4--4 | 4--5 | 4--6 |
账号5 | 5--1 | 5--2 | 5--3 | 5--4 | 5--5 | 5--6 |
因而,使用改良后的Entry组成的TwoDTable,其数据结构为二行四列,参见图3所示。实际操作中,TwoDTable容器提供容器创建、put方法和get方法。首先需初始化容器,指定存入的数据类型,如成绩、金额等,计算机内部根据数据类型查询相应的容器长度stepLength(如100M),进而基于该stepLength构建容器。另外也可以通过TwoDTable(intcapacity)方式指定容器长度,但为了统一管理,优选依据数据类型指定固定容器长度。
各账号下的数据按照一定顺序排列,例如,各班的成绩单排序:
1班->第1名->第2名->第3名->……
2班->第1名->第2名->第3名->……
3班->第1名->第2名->第3名->……
使用容器put(int y,int x)方法,基于账号排序、每个数据在所处账号下的排列位置,得到每个数据的x与y下标,以指定每个数据的纵向和横向插入位置,即确定与相邻其他数据之间的左右上下关系,添加到容器维护的Entry后完成存储。之后直接将数据存入容器尾部,以此提升put方法的处理速度。其中,当x或y与原链路中的位置重复值,为覆盖此值。
容器get(int y,int x)方法:基于put方法记录的数据,计算出用户待查询的数据在链路中的位置,并返回指定数据,提升了take方法的处理速度。具体参见图4所示描述,在此不再赘述。
上述实施例所提供的方法,针对每个账号下的数据设置上下左右4个方向的附属信息,以分别存储其他相邻数据的标识,因而后续数据查询可以使用4个方向,并非现有技术中局限的2个方向。
参见图4,示出的是本发明实施例提供的一种数据处理方法的主要流程图,包括如下步骤:
S401:确定符合数据查询请求的多个账号,以所述多个账号中的第一账号为起点,查询所述第一账号下符合所述数据查询请求的第一数据;
S402:分析所述多个账号的其余账号下与所述第一账号相邻的第二账号,确定所述第二账号相对于所述第一账号的位置方向;
S403:依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据;
S404:重复上述分析账号、从附属信息中获取数据标识、获得数据的操作,直至查询到每个账号下符合所述数据查询请求的数据为止,返回查询到的多个数据。
上述实施方式中,对于步骤S401,此处主要讲述容器get(int y,int x)方法,即如何查询数据。通常数据查询请求中会直接携带需要查询的账号和位置,例如1-1、2-2、4-3,分别代表不同账号下不同位置处的数据,例如1-3、2-3、3-3、4-3、5-3,即表示需查询所有账号下同一位置处的数据。
通常以左上角为起点,如表6左上角位置,但作为起点的第一账号并不固定,可以是账号1,或者账号2,亦或账号4,具体依据工作人员设定。当账号起点不同时,后续查询数据的操作路径也不同,但无论第一账号如何,均需按照横向查询方式,在该第一账号中查询到符合数据查询请求的第一数据。以1-1、2-2、4-3为例:
1、第一账号为账号1
数据查询请求中查询的是账号1下的No.1,即表示查询的是第一位的数据,因而直接查询位于1-1下的数据即可。
2、第一账号为账号2
数据查询请求中查询的是账号2下的No.2,即表示查询的是第二位的数据,因而需首先查询2-1位置处的数据,之后以该数据为起点,从2-1数据的右附属信息中,查询到2-2数据的标识,进而基于该标识获得2-2数据。
3、第一账号为账号4
数据查询请求中查询的是账号4下的No.3,即表示查询的是第三位的数据。因而需首先查询4-1位置处的数据,之后以该数据为起点,从4-1数据的右附属信息中,查询到4-2数据的标识,进而基于该标识获得4-2数据。继续以4-2数据为起点,从4-2数据的右附属信息中,查询到4-3数据的标识,进而基于该标识获得4-3数据。
需要说明的是,每个账号下待查询的数据量可以是一个,例如1-1,也可以是多个,例如1-1和1-6,具体由发起数据查询请求的人员选择。
对于步骤S402~S404,本方案中的第二账号,是数据查询请求中与第一账号相邻的账号,如数据查询请求包括1-1、2-2和4-3,账号4的相邻账号为账号2。
实施例一:
通常账号是纵向排列的,因而在查询到第一账号的第一数据后,需以该第一数据为起点,通过先纵向后横向的方式,查询其他账号下符合数据查询请求的数据。具体地参见图5所示:
S501:依据位置方向和第一数据的上/下附属信息,获取第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;
S502:从所述数据查询请求中,获取位于所述第二账号下的待查询数据排列位置,判断所述排列位置是否处于待查询数据排列位置;
S503:若处于,则确定所述第二数据符合所述数据查询请求;
S504:若不处于,则依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第二数据的左/右附属信息中,获取所述第二账号下位于所述第二数据左/右、且相邻的数据的标识,进而获取相应数据;
S505:判断数据是否符合所述数据查询请求;
S506:若不符合,则重复上述数据获取操作,直至达到待查询数据排列位置停止,将待查询数据排列位置处的数据,作为所述第二账号下符合所述数据查询请求的数据。
同样以数据查询请求为1-1、2-2、4-3为例:
1、第一账号为账号1,相邻第二账号为账号2
在查询到1-1数据之后,从该数据的下附属信息中,查询位于1-1位置之下且相邻的2-1数据的标识,进而获得2-1数据,由于非2-2数据,因而需继续查询。之后以2-1数据为起点,从2-1数据的右附属信息中,查询2-2数据的标识,进而获得2-2数据。
2、第一账号为账号2,相邻第二账号为账号1
对于剩余待查询的账号1和账号4,由于账号1与账号2距离最近,因而在查询到2-2数据之后,首先从该数据的上附属信息中,查询到1-2数据的标识,进而获得1-2数据。由于并非1-1数据,因而需继续查询。之后以1-2数据为起点,从该数据的左附属信息中,查询到1-1数据的标识,进而获得1-1数据。
3、第一账号为账号4,相邻第二账号为账号2
由于账号1和账号2均位于账号4的上方,且距离账号4最近的账号2与账号4在表6中并不相邻,而需先确定位于两者之间的第三账号,此处为账号3。实际操作中,位于两个待查询账号之间的账号数量可能为一个或多个,但无论数量如何,此时均为纵向查询。但区别于现有技术中的纵向查询,此处的查询依据为previous-y、previous-x,且仅考虑纵向一列,并非多列。
在查询到4-3数据后,直接以4-3数据为起点,从该数据的上附属信息中,查询到3-3数据的标识,进而获得3-3数据。以3-3数据为起点,从该数据的上附属信息中,查询到2-3数据的标识,进而获得2-3数据。以2-3数据为起点,从该数据的左附属信息中,查询到2-2数据的标识,进而获得2-2数据。
实施例二:
虽账号是纵向排列,但同一账号下的数据均为横向排列,因而亦可以第一数据为起点,通过先横向后纵向的方式,查询其他账号下符合数据查询请求的数据。具体地参见图6所示:
S601:从数据查询请求中,获取位于第二账号下的待查询数据排列位置,判断第一数据在第一账号下所处的位置是否为待查询数据排列位置;
S602:若是,则依据位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;
S603:若否,则依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第一数据的左/右附属信息中,获取所述第一账号下位于所述第一数据左/右、且相邻的数据的标识,进而获得相应数据;
S604:重复上述位置判断、数据标识和获取数据操作,直至获取到所述第一账号下位于所述待查询数据排列位置的第四数据;
S605:依据所述第二账号相对于所述第一账号的位置方向、所述第四数据的上/下附属信息,获取所述第二账号下与所述第四数据位于同一排列位置的第二数据的标识,进而获得第二数据。
同样以数据查询请求为1-1、2-2、4-3为例:
1、第一账号为账号1,相邻第二账号为账号2
由于1-1与2-2不相邻,因而在查询到1-1数据之后,首先从该1-1数据的右附属信息中,查询到1-2数据的标识,进而获得1-2数据。与1-2数据为起点,从1-2数据的下附属信息中,查询2-2数据的标识,进而获得2-2数据。
2、第一账号为账号2,相邻第二账号为账号1
由于1-1与2-2不相邻,因而在查询到2-2数据之后,从该2-2数据的左附属信息中,查询到2-1数据的标识,进而获得2-1数据。以2-1数据为起点,从2-1数据的上附属信息中,查询到1-1数据的标识,进而获得1-1数据。
3、第一账号为账号4,相邻第二账号为账号2
由于2-2和4-2不相邻,因而在查询到4-3数据之后,从该4-3数据的左附属信息中,查询到4-2数据的标识,进而获得4-2数据。继续以4-2数据为起点,从4-2数据的上附属信息中,查询到3-2数据的标识,进而获得3-2数据。继续以3-2数据为起点,从3-2数据的上附属信息中,查询到2-2数据的标识,进而获得2-2数据
实施例三:
上述两种实施例查询方式虽不同,但对原账号-数据表格(也可以是其他形式)无影响。此处提供另一种方式,在第一账号和第二账号之间存在其他账号的情况下,通过删减其他无关账号,并更新第一账号和第二账号中各数据的附属信息,使得第一账号和第二账号无论是在数据查询请求,还是在账号-数据表格中,均处于相邻状态。
本实施方式适用于纵向查询情况,如通过4-2查询2-2数据。
具体参见图7所示:
S701:判断第一账号和第二账号之间是否存在其他账号;
S702:若不存在,则依据位置方向,从所述第一数据的上/下附属信息中,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识;
S703:若存在,则删除所述其他账号,并基于所述第一账号和第二账号下各数据的标识,更新所述第一账号和第二账号下各相邻数据的上/下附属信息;
S704:基于更新后的第一数据的上/下附属信息,结合所述位置方向,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识。
同样以数据查询请求为1-1、2-2、4-3为例:
1、第一账号为账号1,相邻第二账号为账号2/第一账号为账号2,相邻第二账号为账号1
虽1-1与2-2不相邻,但账号1和账号2相邻,因而不执行删除账号操作。仍通过上述先横向后纵向、或先纵向后横向的方式,查询第二账号下符合数据查询请求的数据。
2、第一账号为账号4,相邻第二账号为账号2
参见表6所示,账号2和账号4之间存在其他账号-账号3,因而需删除账号3以及位于该账号下的各数据。由于每个数据均存储有相邻四个数据的标识,因而在删除账号3及其数据后,需要适应性更新账号2和账号4下各数据的附属信息。具体地,基于账号4中各数据的标识,更新账号2中各相邻数据的下附属信息;以及基于账号2中各数据的标识,更新账号4中各相邻数据的上附属信息。
此时的表6更新为:
No.1 | No.2 | No.3 | No.4 | No.5 | No.6 | |
账号1 | 1--1 | 1--2 | 1--3 | 1--4 | 1--5 | 1--6 |
账号2 | 2--1 | 2--2 | 2--3 | 2--4 | 2--5 | 2--6 |
账号4 | 4--1 | 4--2 | 4--3 | 4--4 | 4--5 | 4--6 |
账号5 | 5--1 | 5--2 | 5--3 | 5--4 | 5--5 | 5--6 |
需要说明的是,虽可以在查询数据之前,直接删除表中除待查询账号(数据查询请求中的账号)之外的其他账号,但删除账号及数据后需更新其他相邻数据的附属信息,而有些删除是非必要的,例如表6中的账号5,因而本方案优选仅删除位于待查询账号之间的账号,对于剩余其他账号不做处理。
在删除账号3之后,对于通过4-3数据查询2-2数据,无论是采用先横向后纵向、或先纵向后横向的方式,均只操作两步。如通过4-3数据查询到4-2数据,之后依据4-2数据查询到2-2数据,相比现有依据4-3数据查询到4-2数据,依据4-2数据查询到3-2数据,再依据3-2数据查询2-2数据操作步骤有所减少。
实施例四:
有些操作中可能会删除账号中的部分数据,例如通过2-2数据查询4-3数据时,会删除4-2数据,以将4-3数据往前移一位,并更新其他相邻数据的附属信息。之后通过纵向方式,从3-2数据的下附属信息中,查询到4-3数据的标识,进而获得4-3数据。
此时的表6更新为:
No.1 | No.2 | No.3 | No.4 | No.5 | No.6 | |
账号1 | 1--1 | 1--2 | 1--3 | 1--4 | 1--5 | 1--6 |
账号2 | 2--1 | 2--2 | 2--3 | 2--4 | 2--5 | 2--6 |
账号3 | 3--1 | 3--2 | 3--3 | 3--4 | 3--5 | 3--6 |
账号4 | 4--1 | 4--3 | 4--4 | 4--5 | 4--6 | |
账号5 | 5--1 | 5--2 | 5--3 | 5--4 | 5--5 | 5--6 |
实施例三修改的是数据的上下附属信息,而该实施例除了修改数据的左右附属信息外,还会修改相邻账号的上下附属信息,操作相对而言较为复杂,因而优选采用前三种实施方式。
实施例五:
删除账号和删除账号内部分数据的结合。例如通过2-2数据查询4-3数据时,会删除账号3及其数据、4-2数据,以将4-3数据往前、往上移一位,并更新其他相邻数据的附属信息。之后通过纵向方式,从2-2数据的下附属信息中,查询到4-3数据的标识,进而获得4-3数据。
此时的表6更新为:
No.1 | No.2 | No.3 | No.4 | No.5 | No.6 | |
账号1 | 1--1 | 1--2 | 1--3 | 1--4 | 1--5 | 1--6 |
账号2 | 2--1 | 2--2 | 2--3 | 2--4 | 2--5 | 2--6 |
账号4 | 4--1 | 4--3 | 4--4 | 4--5 | 4--6 | |
账号5 | 5--1 | 5--2 | 5--3 | 5--4 | 5--5 | 5--6 |
此时需要经过删除账号及该账号下的全部数据、删除一些账号下的部分数据并需顺移剩余数据,操作相对前四种实施方式较为复杂,当查询数据较多时,可能需要更改表中大部分数据的附属信息。因而虽加快了查询速度,但查询数据之前的预处理操作耗时也较长,因而优选采用前三种实施方式。
但无论是删除账号及该账号下的全部数据,还是账号下的部分数据,均非在原账号-数据表格中操作,而是复制一份操作,在数据查询完毕后,删除修改后的账号-数据表格,以免影响后续数据查询操作。
综上描述可知,当待查询的账号为多个,而作为起点的第一账号处于多个账号的最大账号或最小账号时,可以按照一个纵向方向查询,例如账号1-账号2-账号4、账号4-账号2-账号1。但当作为起点的第一账号并非多个账号的最大账号或最小账号时,此时需要按照两个纵向方向查询,例如上述账号2-账号1、账号2-账号4。
上述实施例所提供的方法,摒弃现有纯横向和纯纵向方式,采用横纵方向相结合,每次查询时并非从账号下的首位数据开始,而是从相邻账号下已查询到的数据开始,且可以删除非查询账号,有效降低查询所经过的数据量,以此提高查询效率。
本发明实施例所提供的方法,可以解决现有LinkedHashMap容器消耗JVM堆内存过大,以及存取数据操作性能低下的问题,容器继承JDK的HashMap接口,可以适用于各种使用场景,有效减少代码量,且提供的TwoDTable数据结构支持二维数据的检索和增删。
参见图8,示出了本发明实施例提供的一种数据处理装置800的主要模块示意图,包括:
请求模块801,用于确定符合数据查询请求的多个账号,以所述多个账号中的第一账号为起点,查询所述第一账号下符合所述数据查询请求的第一数据;
分析模块802,用于分析所述多个账号的其余账号下与所述第一账号相邻的第二账号,确定所述第二账号相对于所述第一账号的位置方向;
获取模块803,用于依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据;
迭代模块804,用于重复上述分析账号、从附属信息中获取数据标识、获得数据的操作,直至查询到每个账号下符合所述数据查询请求的数据为止,返回查询到的多个数据。
本发明实施装置中,所述请求模块801,用于:从所述数据查询请求中,获取位于所述第一账号下的待查询数据排列位置,判断待查询数据排列位置是否为第一位;若是,则将所述第一账号下位于所述第一位的数据,作为所述第一数据;或若否,则从第一位数据的右附属信息中,获取位于所述第一位数据之后且相邻的第二位数据的标识,进而获得第二位数据;以及重复上述获取标识和数据的操作,直至达到待查询数据排列位置为止,将与待查询数据排列位置对应的数据作为所述第一数据。
本发明实施装置中,所述获取模块803,用于:依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;从所述数据查询请求中,获取位于所述第二账号下的待查询数据排列位置,判断所述排列位置是否处于待查询数据排列位置;若处于,则确定所述第二数据符合所述数据查询请求;或若不处于,则以所述第二数据为起点,依据所述第二数据的左/右附属信息,重新确定所述第二账号下符合所述数据查询请求的数据。
本发明实施装置中,所述获取模块803,用于:判断所述第一账号和所述第二账号之间是否存在其他账号;若不存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识;或若存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述其他账号下与所述第一数据位于同一排列位置的第三数据的标识,进而获得第三数据;和继续依据所述位置方向,从所述第三数据的上/下附属信息中,获取所述第二账号下与所述第三数据位于同一排列位置的第二数据的标识。
本发明实施装置中,所述获取模块803,用于:判断所述第一账号和所述第二账号之间是否存在其他账号;若不存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识;或若存在,则删除所述其他账号,并基于所述第一账号和第二账号下各数据的标识,更新所述第一账号和第二账号下各相邻数据的上/下附属信息;基于更新后的第一数据的上/下附属信息,结合所述位置方向,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识。
本发明实施装置中,所述获取模块803,用于:依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第二数据的左/右附属信息中,获取所述第二账号下位于所述第二数据左/右、且相邻的数据的标识,进而获取相应数据;判断数据是否符合所述数据查询请求,若不符合,则重复上述数据获取操作,直至达到待查询数据排列位置停止,将待查询数据排列位置处的数据,作为所述第二账号下符合所述数据查询请求的数据。
本发明实施装置中,所述获取模块803,用于:从所述数据查询请求中,获取位于所述第二账号下的待查询数据排列位置,判断所述第一数据在所述第一账号下所处的位置是否为待查询数据排列位置;若是,则依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;若否,则依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第一数据的左/右附属信息中,获取所述第一账号下位于所述第一数据左/右、且相邻的数据的标识,进而获得相应数据;和重复上述位置判断、数据标识和获取数据操作,直至获取到所述第一账号下位于所述待查询数据排列位置的第四数据;依据所述第二账号相对于所述第一账号的位置方向、所述第四数据的上/下附属信息,获取所述第二账号下与所述第四数据位于同一排列位置的第二数据的标识,进而获得第二数据。
本发明实施装置中,所述第一账号为所述多个账号下的任一账号;所述装置包括:若所述任一账号为所述多个账号的最小账号,则按照从最小账号向所述多个账号的最大账号的纵向方向,按序查询其他各账号下符合所述数据查询请求的数据;或若所述任一账号为所述多个账号的最大账号,则按照从最大账号向所述多个账号的最小账号的纵向方向,按序查询其他各账号下符合所述数据查询请求的数据;或若所述任一账号并非所述多个账号的最小账号和最大账号,则分别按照所述任一账号向最小账号和最大账号的两个纵向方向,按序查询其他各账号下符合所述数据查询请求的数据。
本发明实施装置还包括关系确定模块,用于:确定每个数据在所处账号下的排列位置并存储;以及确定每个数据与相邻其他数据之间的左右上下关系。
本发明实施装置中,所述关系确定模块,用于:对于一个账号下的一个数据,获取位于所述一个账号之上且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的上附属信息中;获取位于所述一个账号之下且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的下附属信息中;获取同处于所述一个账号、位于所述一个数据之前且相邻的数据,将数据的标识存储至所述一个数据的左附属信息中;获取同处于所述一个账号、位于所述一个数据之后且相邻的数据,将数据的标识存储至所述一个数据的右附属信息中。
本发明实施装置还包括:对所述一个数据创建双向链表,用于存储所述一个数据的左、右、上、下附属信息。
本发明实施装置还包括创建容器模块,用于:接收容器创建请求,依据所述容器创建请求中的数据类型,确定可创建的容器长度,进而基于所述容器长度创建容器;其中,容器用于存储不同账号下的数据,且数据按序排列。
另外,在本发明实施例中所述装置的具体实施内容,在上面所述方法中已经详细说明了,故在此重复内容不再说明。
图9示出了可以应用本发明实施例的示例性系统架构900,包括终端设备901、902、903,网络904和服务器905(仅仅是示例)。
终端设备901、902、903可以是具有显示屏并且支持网页浏览的各种电子设备,安装有各种通讯客户端应用,用户可以使用终端设备901、902、903通过网络904与服务器905交互,以接收或发送消息等。
网络904用以在终端设备901、902、903和服务器905之间提供通信链路的介质。网络904可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
服务器905可以是提供各种服务的服务器,用于执行查询不同账号下符合数据查询请求的数据的操作。
需要说明的是,本发明实施例所提供的方法一般由服务器905执行,相应地,装置一般设置于服务器905中。
应该理解,图9中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图10,其示出了适于用来实现本发明实施例的终端设备的计算机系统1000的结构示意图。图10示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图10所示,计算机系统1000包括中央处理单元(CPU)1001,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理。在RAM 1003中,还存储有系统1000操作所需的各种程序和数据。CPU 1001、ROM 1002以及RAM 1003通过总线1004彼此相连。输入/输出(I/O)接口1005也连接至总线1004。
以下部件连接至I/O接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理单元(CPU)1001执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括请求模块、分析模块、迭代模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,迭代模块还可以被描述为“重复迭代模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:确定符合数据查询请求的多个账号,以所述多个账号中的第一账号为起点,查询所述第一账号下符合所述数据查询请求的第一数据;分析所述多个账号的其余账号下与所述第一账号相邻的第二账号,确定所述第二账号相对于所述第一账号的位置方向;依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据;重复上述分析账号、从附属信息中获取数据标识、获得数据的操作,直至查询到每个账号下符合所述数据查询请求的数据为止,返回查询到的多个数据。
根据本发明实施例的技术方案,采用横纵方向相结合,且每次查询时并非从账号下的首位数据开始,而是从相邻账号下已查询到的数据开始,有效降低查询所经过的数据量,以此提高查询效率。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (14)
1.一种数据处理方法,其特征在于,包括:
确定符合数据查询请求的多个账号,以所述多个账号中的第一账号为起点,查询所述第一账号下符合所述数据查询请求的第一数据,包括:
从所述数据查询请求中,获取位于所述第一账号下的待查询数据排列位置,判断待查询数据排列位置是否为第一位;
若是,则将所述第一账号下位于所述第一位的数据,作为所述第一数据;
若否,则从第一位数据的右附属信息中,获取位于所述第一位数据之后且相邻的第二位数据的标识,进而获得第二位数据;以及
重复上述获取标识和数据的操作,直至达到待查询数据排列位置为止,将与待查询数据排列位置对应的数据作为所述第一数据;
分析所述多个账号的其余账号下与所述第一账号相邻的第二账号,确定所述第二账号相对于所述第一账号的位置方向;
依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据;其中,附属信息为Entry数据结构;
重复上述分析账号、从附属信息中获取数据标识、获得数据的操作,直至查询到每个账号下符合所述数据查询请求的数据为止,返回查询到的多个数据。
2.根据权利要求1所述的方法,其特征在于,所述依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据,包括:
依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;
从所述数据查询请求中,获取位于所述第二账号下的待查询数据排列位置,判断所述排列位置是否处于待查询数据排列位置;
若处于,则确定所述第二数据符合所述数据查询请求;或
若不处于,则以所述第二数据为起点,依据所述第二数据的左/右附属信息,重新确定所述第二账号下符合所述数据查询请求的数据。
3.根据权利要求2所述的方法,其特征在于,所述依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,包括:
判断所述第一账号和所述第二账号之间是否存在其他账号;
若不存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识;或
若存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述其他账号下与所述第一数据位于同一排列位置的第三数据的标识,进而获得第三数据;和
继续依据所述位置方向,从所述第三数据的上/下附属信息中,获取所述第二账号下与所述第三数据位于同一排列位置的第二数据的标识。
4.根据权利要求2所述的方法,其特征在于,所述依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,包括:
判断所述第一账号和所述第二账号之间是否存在其他账号;
若不存在,则依据所述位置方向,从所述第一数据的上/下附属信息中,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识;或
若存在,则删除所述其他账号,并基于所述第一账号和第二账号下各数据的标识,更新所述第一账号和第二账号下各相邻数据的上/下附属信息;
基于更新后的第一数据的上/下附属信息,结合所述位置方向,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识。
5.根据权利要求2所述的方法,其特征在于,所述以所述第二数据为起点,依据所述第二数据的左/右附属信息,重新确定所述第二账号下符合所述数据查询请求的数据,包括:
依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第二数据的左/右附属信息中,获取所述第二账号下位于所述第二数据左/右、且相邻的数据的标识,进而获取相应数据;
判断数据是否符合所述数据查询请求,若不符合,则重复上述数据获取操作,直至达到待查询数据排列位置停止,将待查询数据排列位置处的数据,作为所述第二账号下符合所述数据查询请求的数据。
6.根据权利要求1所述的方法,其特征在于,所述依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据,包括:
从所述数据查询请求中,获取位于所述第二账号下的待查询数据排列位置,判断所述第一数据在所述第一账号下所处的位置是否为待查询数据排列位置;
若是,则依据所述位置方向和所述第一数据的上/下附属信息,获取所述第二账号下与所述第一数据位于同一排列位置的第二数据的标识,进而获得第二数据;
若否,则依据所述排列位置相对于待查询数据排列位置的位置方向,从所述第一数据的左/右附属信息中,获取所述第一账号下位于所述第一数据左/右、且相邻的数据的标识,进而获得相应数据;和
重复上述位置判断、数据标识和获取数据操作,直至获取到所述第一账号下位于所述待查询数据排列位置的第四数据;
依据所述第二账号相对于所述第一账号的位置方向、所述第四数据的上/下附属信息,获取所述第二账号下与所述第四数据位于同一排列位置的第二数据的标识,进而获得第二数据。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述第一账号为所述多个账号下的任一账号;
所述方法包括:
若所述任一账号为所述多个账号的最小账号,则按照从最小账号向所述多个账号的最大账号的纵向方向,按序查询其他各账号下符合所述数据查询请求的数据;或
若所述任一账号为所述多个账号的最大账号,则按照从最大账号向所述多个账号的最小账号的纵向方向,按序查询其他各账号下符合所述数据查询请求的数据;或
若所述任一账号并非所述多个账号的最小账号和最大账号,则分别按照所述任一账号向最小账号和最大账号的两个纵向方向,按序查询其他各账号下符合所述数据查询请求的数据。
8.根据权利要求1所述的方法,其特征在于,在所述确定符合数据查询请求的多个账号之前,还包括:
确定每个数据在所处账号下的排列位置并存储;以及
确定每个数据与相邻其他数据之间的左右上下关系。
9.根据权利要求8所述的方法,其特征在于,所述确定每个数据与相邻其他数据之间的左右上下关系,包括:
对于一个账号下的一个数据,获取位于所述一个账号之上且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的上附属信息中;
获取位于所述一个账号之下且相邻、与所述一个数据处于同一排列位置的数据,将数据的标识存储至所述一个数据的下附属信息中;
获取同处于所述一个账号、位于所述一个数据之前且相邻的数据,将数据的标识存储至所述一个数据的左附属信息中;
获取同处于所述一个账号、位于所述一个数据之后且相邻的数据,将数据的标识存储至所述一个数据的右附属信息中。
10.根据权利要求9所述的方法,其特征在于,还包括:
对所述一个数据创建双向链表,用于存储所述一个数据的左、右、上、下附属信息。
11.根据权利要求8所述的方法,其特征在于,在所述确定每个数据在所处账号下的排列位置并存储之前,还包括:
接收容器创建请求,依据所述容器创建请求中的数据类型,确定可创建的容器长度,进而基于所述容器长度创建容器;其中,容器用于存储不同账号下的数据,且数据按序排列。
12.一种数据处理装置,其特征在于,包括:
请求模块,用于确定符合数据查询请求的多个账号,以所述多个账号中的第一账号为起点,查询所述第一账号下符合所述数据查询请求的第一数据,包括:
从所述数据查询请求中,获取位于所述第一账号下的待查询数据排列位置,判断待查询数据排列位置是否为第一位;
若是,则将所述第一账号下位于所述第一位的数据,作为所述第一数据;
若否,则从第一位数据的右附属信息中,获取位于所述第一位数据之后且相邻的第二位数据的标识,进而获得第二位数据;以及
重复上述获取标识和数据的操作,直至达到待查询数据排列位置为止,将与待查询数据排列位置对应的数据作为所述第一数据;
分析模块,用于分析所述多个账号的其余账号下与所述第一账号相邻的第二账号,确定所述第二账号相对于所述第一账号的位置方向;
获取模块,用于依据所述位置方向和所述第一数据的附属信息,获取所述第二账号下符合所述数据查询请求的第二数据的标识,进而获得第二数据;其中,附属信息为Entry数据结构;
迭代模块,用于重复上述分析账号、从附属信息中获取数据标识、获得数据的操作,直至查询到每个账号下符合所述数据查询请求的数据为止,返回查询到的多个数据。
13.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-11中任一所述的方法。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-11中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110453168.8A CN113190592B (zh) | 2021-04-26 | 2021-04-26 | 一种数据处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110453168.8A CN113190592B (zh) | 2021-04-26 | 2021-04-26 | 一种数据处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113190592A CN113190592A (zh) | 2021-07-30 |
CN113190592B true CN113190592B (zh) | 2023-09-22 |
Family
ID=76979565
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110453168.8A Active CN113190592B (zh) | 2021-04-26 | 2021-04-26 | 一种数据处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113190592B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7725421B1 (en) * | 2006-07-26 | 2010-05-25 | Google Inc. | Duplicate account identification and scoring |
CN107230044A (zh) * | 2017-06-14 | 2017-10-03 | 深圳象和动漫网络有限公司 | 数字媒体在线协作数据处理实现方法、装置及存储设备 |
CN109120496A (zh) * | 2017-06-22 | 2019-01-01 | 中兴通讯股份有限公司 | 一种基于融合通信的信息处理方法、服务器及终端 |
CN110414987A (zh) * | 2019-07-18 | 2019-11-05 | 中国工商银行股份有限公司 | 账户集合的识别方法、装置和计算机系统 |
CN110570179A (zh) * | 2019-09-11 | 2019-12-13 | 腾讯科技(深圳)有限公司 | 订单显示方法、装置、设备及存储介质 |
CN110852723A (zh) * | 2019-11-19 | 2020-02-28 | 象和文化科技(深圳)有限公司 | 多元叠态数据协作处理方法、系统、存储介质及智能终端 |
CN111881329A (zh) * | 2020-07-09 | 2020-11-03 | 中国建设银行股份有限公司 | 一种账户余额管理方法和系统 |
CN112334895A (zh) * | 2018-06-28 | 2021-02-05 | 微软技术许可有限责任公司 | 针对未成年人的安全性配置生命周期账户保护 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8958605B2 (en) * | 2009-02-10 | 2015-02-17 | Kofax, Inc. | Systems, methods and computer program products for determining document validity |
CA2738030C (en) * | 2010-04-23 | 2015-06-09 | Research In Motion Corporation | Method and apparatus for posting data to plurality of accounts |
-
2021
- 2021-04-26 CN CN202110453168.8A patent/CN113190592B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7725421B1 (en) * | 2006-07-26 | 2010-05-25 | Google Inc. | Duplicate account identification and scoring |
CN107230044A (zh) * | 2017-06-14 | 2017-10-03 | 深圳象和动漫网络有限公司 | 数字媒体在线协作数据处理实现方法、装置及存储设备 |
CN109120496A (zh) * | 2017-06-22 | 2019-01-01 | 中兴通讯股份有限公司 | 一种基于融合通信的信息处理方法、服务器及终端 |
CN112334895A (zh) * | 2018-06-28 | 2021-02-05 | 微软技术许可有限责任公司 | 针对未成年人的安全性配置生命周期账户保护 |
CN110414987A (zh) * | 2019-07-18 | 2019-11-05 | 中国工商银行股份有限公司 | 账户集合的识别方法、装置和计算机系统 |
CN110570179A (zh) * | 2019-09-11 | 2019-12-13 | 腾讯科技(深圳)有限公司 | 订单显示方法、装置、设备及存储介质 |
CN110852723A (zh) * | 2019-11-19 | 2020-02-28 | 象和文化科技(深圳)有限公司 | 多元叠态数据协作处理方法、系统、存储介质及智能终端 |
CN111881329A (zh) * | 2020-07-09 | 2020-11-03 | 中国建设银行股份有限公司 | 一种账户余额管理方法和系统 |
Non-Patent Citations (1)
Title |
---|
信息化背景下高校图书馆智能服务模式的构建研究;易荣;;无线互联科技(第22期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113190592A (zh) | 2021-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108197324B (zh) | 用于存储数据的方法和装置 | |
CN108897874A (zh) | 用于处理数据的方法和装置 | |
CN112650790A (zh) | 目标点云平面确定方法,装置,电子设备及存储介质 | |
CN112925859A (zh) | 数据存储方法和装置 | |
CN113190592B (zh) | 一种数据处理方法和装置 | |
CN111309455A (zh) | 一种视图节点布局的方法和系统 | |
CN111949648B (zh) | 内存缓存数据系统和数据索引方法 | |
CN106202456A (zh) | 发送图片的方法及装置 | |
CN112256254A (zh) | 一种生成布局代码的方法和装置 | |
CN113657525B (zh) | 基于KMeans的跨特征联邦聚类方法及相关设备 | |
CN115905322A (zh) | 业务处理方法、装置、电子设备及存储介质 | |
CN110908996A (zh) | 一种数据处理的方法和装置 | |
CN112883239B (zh) | 一种资源分配方法、装置、计算机设备及存储介质 | |
CN114896244A (zh) | 配置数据库表的方法、装置、设备和计算机可读介质 | |
CN112785213A (zh) | 一种仓库拣货单的组建方法和装置 | |
CN113094415B (zh) | 数据抽取方法、装置、计算机可读介质及电子设备 | |
CN112905604A (zh) | 一种数据处理方法和装置 | |
CN111125112A (zh) | 数据处理方法及装置、电子设备和计算机可读存储介质 | |
CN109087097B (zh) | 一种更新链码同一标识的方法和装置 | |
CN112711572A (zh) | 适用于分库分表的在线扩容方法和装置 | |
CN113760343A (zh) | 一种处理业务请求的方法和装置 | |
CN113704242A (zh) | 一种数据处理方法和装置 | |
CN113205288A (zh) | 一种物品入库方法和装置 | |
CN113191703A (zh) | 储位分配的方法和装置 | |
CN112783914A (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 |