CN105868023B - 一种分布式系统中的数据处理方法及计算节点 - Google Patents
一种分布式系统中的数据处理方法及计算节点 Download PDFInfo
- Publication number
- CN105868023B CN105868023B CN201610173862.3A CN201610173862A CN105868023B CN 105868023 B CN105868023 B CN 105868023B CN 201610173862 A CN201610173862 A CN 201610173862A CN 105868023 B CN105868023 B CN 105868023B
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- public memory
- public
- mark
- 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
- 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
Abstract
本发明公开了一种分布式系统中的数据处理方法,用于解决在分布式系统中进行数据查询时会造成内存浪费的技术问题。所述方法包括:接收所述主节点发送的第一任务;所述第一任务用于读取第一数据;确定所述第一数据是否存储在公共内存中;所述公共内存为所述第一从节点的任意一个线程池均能够访问的内存;若所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中;或,若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据;从所述公共内存中读取所述第一数据。本发明还公开了相应的计算节点。
Description
技术领域
本发明涉及分布式系统技术领域,特别涉及一种分布式系统中的数据处理方法及计算节点。
背景技术
在分布式系统中,主节点往往会向从节点发起一些查询从节点中的数据表的任务,为了实现这样的功能,可以将大数据计算框架应用到分布式系统中,比如,MapReduce(一种编程模型)、Spark(一种基于内存的分布式计算框架),等等。目前,很大一部分的查询任务都需要引用或参考相同的数据表,那么在执行不同的查询任务时,可能会重复使用同一个数据表。
现有技术中,每执行一次查询任务,就需要将待查询的数据表加载到内存中,也就是说,如果有多个查询任务都针对的是同一个数据表,那么在执行每个查询任务时都需要在内存中加载一份同样的数据表,在查询任务较多时,内存中可能会加载大量的相同的数据表,造成了内存的浪费。
发明内容
本发明实施例提供一种分布式系统中的数据处理方法及计算节点,用于解决在分布式系统中进行数据查询时会造成内存浪费的技术问题。
第一方面,提供一种分布式系统中的数据处理方法,应用于第一从节点中,所述分布式系统包括主节点和多个从节点,所述第一从节点为所述分布式系统中的任意一个从节点,所述方法包括:
接收所述主节点发送的第一任务;所述第一任务用于读取第一数据;
确定所述第一数据是否存储在公共内存中;所述公共内存为所述第一从节点的任意一个线程池均能够访问的内存;
若所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中;或,若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据;
从所述公共内存中读取所述第一数据。
可选的,
在所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中之后,还包括:记录所述第一数据在所述公共内存中的地址;或,若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据,包括:若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址;
读取所述第一数据,包括:
根据所述第一数据在所述公共内存中的地址,读取所述第一数据。
可选的,
确定所述第一数据是否存储在公共内存中,包括:
查询是否记录了已加载到所述公共内存中的数据在所述公共内存中的地址与所述第一数据的标识的对应关系,所述第一数据的标识用于指示所述第一数据;
若所述第一数据未存储在所述公共内存中,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据在所述公共内存中的地址,包括:若未记录所述第一数据的标识,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据的标识及所述第一数据在所述公共内存中的地址的对应关系;或,若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址,包括:若记录了所述第一数据的标识,则根据所述第一数据的标识获取对应的所述第一数据在所述公共内存中的地址。
可选的,所述方法还包括:
若所述记录信息中记录的标识的数量超过第一预设值,则基于所述记录信息,确定访问次数少的前M个标识对应的M个数据;其中,M为正整数;
释放所述M个数据占用的全部内存。
可选的,所述方法还包括:
若所述记录信息中记录的标识的数量超过第二预设值,则基于所述记录信息,分别确定访问所述记录信息包括的每个标识的线程池的数量,并确定访问的线程池的数量少的前N个标识对应的N个数据;其中,N为正整数;
释放所述N个数据占用的全部内存。
第二方面,提供一种计算节点,应用于分布式系统中,所述计算节点包括:
存储器,包括公共内存;所述公共内存为所述计算节点的任意一个线程池均能够访问的内存;
处理器,与所述存储器连接,用于;
接收所述分布式系统中的另一计算节点发送的第一任务;所述第一任务用于读取第一数据;
确定所述第一数据是否存储在所述公共内存中;
若所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中;或,若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据;从所述公共内存中读取所述第一数据。
可选的,所述处理器还用于:
在所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中之后,记录所述第一数据在所述公共内存中的地址;或,若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址;
根据所述第一数据在所述公共内存中的地址,读取所述第一数据。
可选的,所述处理器用于:
查询是否记录了所述第一数据的标识,所述第一数据的标识用于指示所述第一数据;
若所述第一数据未存储在所述公共内存中,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据在所述公共内存中的地址,包括:若未记录所述第一数据的标识,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据的标识及所述第一数据在所述公共内存中的地址;或,若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址,包括:若记录了所述第一数据的标识,则根据所述第一数据的标识获取对应的所述第一数据在所述公共内存中的地址。
可选的,所述处理器还用于:
若记录信息中记录的标识的数量超过第一预设值,则基于所述记录信息,确定访问次数少的前M个标识对应的M个数据;其中,所述记录信息用于记录已加载到所述公共内存中的数据的标识与已加载到所述公共内存中的数据在所述公共内存中的地址之间的对应关系;M为正整数;
释放所述M个数据占用的全部内存。
可选的,所述处理器还用于:
若记录信息中记录的标识的数量超过第二预设值,则基于所述记录信息,分别确定访问所述记录信息包括的每个标识的线程池的数量,并确定访问的线程池的数量少的前N个标识对应的N个数据;其中,所述记录信息用于记录已加载到所述公共内存中的数据的标识与已加载到所述公共内存中的数据在所述公共内存中的地址之间的对应关系;N为正整数;
释放所述N个数据占用的全部内存。
第三方面,提供另一种计算节点,应用于分布式系统中,所述计算节点包括:
接收模块,用于接收所述分布式系统中的另一计算节点发送的第一任务;所述第一任务用于读取第一数据;
第一确定模块,用于确定所述第一数据是否存储在公共内存中;所述公共内存为所述计算节点的任意一个线程池均能够访问的内存;
加载模块,用于若所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中;或,
第二确定模块,用于若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据;
读取模块,用于从所述公共内存中读取所述第一数据。
在分布式系统中,从节点在接收主节点发送的读取第一数据的任务后,可以先在公共内存中确定是否存储了第一数据,如果公共内存中没有存储第一数据,则可以从存储设备中将第一数据加载到公共内存中再进行读取,如果公共内存中存储了第一数据,就可以直接从公共内存中读取第一数据,无需再重新加载。通过这样的方式,从节点无需在每次接收到读取数据的任务时都将数据加载到内存,减小了加载数据的工作量,节省了时间,同时,同一个数据可能只需在公共内存中存储一份,只要是读取该数据的任务都能够从公共内存直接读取,节省了内存的空间,且节省出的内存空间可以用于存储其他的数据,也提高了内存的利用率。
附图说明
图1为本发明实施例中分布式系统中的数据处理方法的流程图;
图2为本发明实施例中计算节点的结构示意图;
图3为本发明实施例中计算节点的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中的主节点和从节点可以是相同或不同的电子设备,例如,主节点和从节点都可以是服务器,或者,主节点可以是PC(个人计算机),从节点可以是服务器,或者,主节点可以是服务器,从节点可以是PC,等等,本发明对此不作限制。
下面结合附图对本发明优选的实施方式进行详细说明。
请参见图1,本发明实施例提供一种分布式系统中的数据处理方法,该分布式系统包括主节点和多个从节点,该方法可以应用于第一从节点,第一从节点可以是该分布式系统中的任意一个从节点,该方法的流程描述如下。
步骤101:接收主节点发送的第一任务;第一任务用于读取第一数据;
步骤102:确定第一数据是否存储在公共内存中;公共内存为第一从节点的任意一个线程池均能够访问的内存;其中,若第一数据未存储在公共内存中,则执行步骤103,若第一数据存储在公共内存中,则执行步骤104;
步骤103:若第一数据未存储在公共内存中,则将第一数据从存储设备加载到公共内存中;
步骤104:若第一数据存储在公共内存中,则在公共内存中确定第一数据;
步骤105:从公共内存中读取第一数据。
本发明实施例中,分布式系统可以包括主节点和多个从节点,主节点的数量可以是一个也可以是多个,一个主节点可以对应多个从节点,至于一个主节点对应多少个从节点,本发明实施例不作限定。其中,主节点可以向从节点发送任务,从节点可以执行这些任务,并可以将执行任务后得到的结果返回给主节点。
第一数据可以是存储在第一从节点中的任意一个数据,对于第一数据的类型本发明实施例不作限定,只要是存储在第一从节点中的数据都可以是本发明实施例中的第一数据。例如第一数据可以是数据表类型的数据,例如可以是一个完整的数据表,或者也可以是一个数据表中的一个或多个表项,或者第一数据也可以是其他类型的数据。
当主节点需要从第一从节点中读取第一数据时,可以发送用于读取第一数据的任务给第一从节点,例如将该任务称为第一任务,第一从节点可以通过第一从节点的任意一个线程池来执行主节点发送的第一任务。
可选的,可以在第一从节点的内存中设置公共内存,公共内存可以占用第一从节点的全部内存空间,或者也可以占用第一从节点的部分内存空间。第一从节点的任意一个线程池都能够访问存储在公共内存中的数据,例如,在同一时刻可以允许一个线程池访问公共内存,或者在同一时刻也可以允许多个线程池访问公共内存,本发明实施例对此不作限定。对于公共内存的大小可根据需要设定,例如,第一从节点总共有4GB的内存,可以设置其中的1GB为公共内存。
第一从节点在接收第一任务之后,可以首先确定要读取的第一数据是否存储在公共内存中,对于如何确定第一数据有没有存储在公共内存中,本发明实施例不作限定。例如,可以通过记录信息来记录已加载到公共内存中的数据的标识与已加载到公共内存中的数据在公共内存中的地址之间的对应关系。
记录信息可以用来记录公共内存中已经加载了哪些数据,以及这些数据在公共内存中的地址,第一从节点在接收到读取第一数据的任务时,可以在记录信息中进行查询,以确定公共内存中是否已经加载了第一数据。对于记录信息的类型,本发明实施例对此不作限定,例如,记录信息的类型可以是数据表,那么用于存储记录信息的数据表中可以包括至少一个表项,其中每个表项可以用于记录一个已加载到公共内存中的数据的信息,例如可以记录该数据的标识,以及可以记录该数据在公共内存中的地址,等等。或者,也可以通过其他的方式记载公共内存中存储了哪些数据。
可选的,若确定第一数据未存储在公共内存中,则第一从节点可以从存储了第一数据的存储设备中将所述第一数据加载到公共内存中,并且第一从节点可以记录第一数据在公共内存中的地址,以便于在公共内存中查询第一数据。或者,若确定第一数据存储在公共内存中,第一从节点可以直接获取第一数据在公共内存中的地址,从而可以根据第一数据在公共内存中的地址从公共内存中读取第一数据。
根据第一数据是否存储在公共内存中,可能有以下几种不同的读取第一数据的方式。
第一种方式:公共内存中没有存储要读取的第一数据,那么第一从节点有可能是第一次接收到读取第一数据的任务,或者可能是在公共内存被清理之后,第一从节点是第一次接收到读取第一数据的任务。这种情况下,需要第一从节点从存储设备中将第一数据加载到公共内存中,以便能够读取第一数据。可选的,在将第一数据加载到公共内存中之后,还可以记录第一数据在公共内存中的地址,以便下一次接收到要读取第一数据的任务时能够根据记录的地址直接在公共内存中找到并读取第一数据。
例如,第一从节点接收主节点发送的读取数据1的任务,第一从节点确定数据1没有存储在公共内存中,那么第一从节点可以从存储设备,比如硬盘中将数据1加载到公共内存中,还可以记录数据1在公共内存中的地址,比如可以记录数据1在公共内存中的地址为地址1。
第二种方式:公共内存中存储了要读取的第一数据,也就是说,第一数据之前已经被读取过,那么在公共内存中可能已经存储了第一数据以及存储了第一数据在公共内存中的地址,那么第一从节点可以根据第一数据的地址,在公共内存中找到并读取第一数据。
例如,第一从节点接收主节点发送的读取数据1的任务,第一从节点确定数据1存储在公共内存中,第一从节点可以获取数据1在公共内存中的地址,比如为地址1,根据地址1在公共内存中找到并读取数据1。
通过以上的方式,第一从节点只有在初次读取某一数据的时候才需要将该数据从存储设备加载到公共内存,再次读取的时候都能过从公共内存中直接读取,多次读取同一数据时,省去了每次都要重新加载该数据的步骤,提升了第一从节点的响应速度,且对于同样的数据,公共内存中只需存储一份,节省了内存空间。
可选的,可以通过查询是否记录了第一数据的标识确定第一数据是否存储在公共内存中,其中第一数据的标识可以用于指示第一数据,若未记录第一数据的标识,那么可以将第一数据从存储设备加载到公共内存中,并记录第一数据的标识及第一数据在公共内存中的地址,或,若记录了第一数据的标识,那么可以根据第一数据的标识获取对应的第一数据在公共内存中的地址。
在公共内存中,可能存储了很多的数据,每一个数据可能有对应的标识,每个标识可以用于指示一个数据,例如标识可以是数据的名称,或者可以是其他用于标识数据的信息。对于标识的表现形式,本发明实施例不作限定,例如,可以通过字符来表示,也可以通过数字编号来表示,等等,只要能够唯一指示对应的数据的,都可以是本发明实施例中的数据的标识。
第一从节点可以在公共内存中记录存储在公共内存中的每一个数据的标识以及对应的数据在公共内存中的地址,标识和地址可以一一对应,只要记录了一个数据的标识,那么也就记录了这个数据在公共内存中的地址。可以通过查找公共内存中是否记录了第一数据的标识来确定第一数据是否存储在公共内存中,如果记录了第一数据的标识,则表示公共内存中存储了第一数据,那么可以直接获取记录的第一数据的地址,或者,如果没有记录第一数据的标识,则表示公共内存中没有存储第一数据,那么可以将第一数据加载到公共内存中,并记录第一数据在公共内存中的地址,以便下次读取第一数据时能够直接读取。
例如,第一从节点接收到主节点发送的用于读取数据1的任务,第一从节点可以首先查询公共内存中是否记录了数据1的标识,比如数据1的标识可以是字符信息“数据1”,如果查询到公共内存中记录了数据1的标识,那么可以直接获取数据1的标识所对应的地址,根据地址就能够直接从公共内存读取数据1。
或者例如,第一从节点接收到主节点发送的用于读取数据2的任务,第一从节点可以首先查询公共内存中是否记录了数据2的标识,比如数据2的标识可以是字符信息“数据2”,如果没有查询到数据2的标识,那么可能是第一次接收到读取用于数据2的任务,那么第一从节点可以将数据2从存储设备中加载到公共内存中,并记录数据2的标识以及数据2在公共内存中的地址。
通过为数据设置标识的方式,第一从节点可以较为方便准确地确定要读取的数据是否已经存储在公共内存中,设备的信息处理能力较强。
可选的,若记录信息中记录的标识的数量超过第一预设值,那么可以基于记录信息,确定访问次数少的前M个标识对应的M个数据,并释放M个数据对应的全部内存。
对于第一预设值具体是多少,本发明实施例不作限定,可以是在电子设备出厂时设置好的,也可以是由用户自行设定,以及设定之后还能根据需要进行修改。例如,记录信息的类型可以是数据表,第一预设值比如为1000,那么也就是说如果数据记录表中的表项大于1000项,则可以认为记录的标识的数量超过了第一预设值。
释放数据对应的内存,可以是删除数据在记录信息中的记录,同时也将数据从公共内存中删除,或者也可以是其他的释放内存的方式,本发明实施例对此不作限定。
在实际使用中,预留给记录信息的存储空间可能是有限的,比如记录信息的类型可以是数据表,比如该数据表最多能够记录5000个表项。若记录信息中记录的标识的数量超过第一预设值时,有可能记录信息中记录的数据已经较多,甚至可能已经没有空间再记录新加载到公共内存中的数据,这时可以删除一些记录信息中的表项,以便能够记录新加载到内存中的数据的信息。对于删除哪些表项,本发明实施例不作限定,例如可以按照访问次数对记录信息中记录的数据进行排序,然后释放访问次数较少的前M个数据对应的内存,对于M的值具体为多少,本发明实施例同样不作限定,可以是在电子设备出厂时设置好的,也可以是由用户自行设定,以及设定之后还能根据需要进行修改。
例如,记录信息的类型可以是数据表,该数据表中的每个表项都记录了一个已加载到公共内存的数据的标识,以及该数据在公共内存中的地址,例如第一预设值为5000,M为100,那么在该数据表中记录的表项超过5000项时,可以确定5000个表项对应的5000个数据的标识的访问次数,以及确定其中访问次数少的前100个数据的标识对应的100个数据,并释放这100个数据对应的全部内存,比如可以从公共内存中删除这100个数据,以及删除这100个数据在记录表中的表项。
通过以上的方式,在记录信息中记录的表项较多的情况下,可以首先释放访问次数较少的表项所指示的数据的内存,这些可能是用户很少使用的数据,即使删除可能也不会给用户带来较大影响,而对于用户经常读取的数据,并不会受到影响,依然能够直接从公共内存中读取,设备较为智能化。
可选的,若记录信息中记录的标识的数量超过第二预设值,则可以基于记录信息,分别确定访问该记录信息包括的每个标识的线程池的数量,并确定访问的线程池的数量少的前N个标识对应的N个数据,可以释放N个数据对应的全部内存。其中,记录信息可以用于记录已加载到公共内存中的数据的标识与已加载到公共内存中的数据在公共内存中的地址之间的对应关系,N可以为正整数。
对于第二预设值具体是多少,本发明实施例不作限定,可以与第一预设值相同,也可以与第一预设值不同,第二预设值同样可以是在电子设备出厂时设置好的,也可以是由用户自行设定,以及设定之后还能根据需要进行修改。例如,记录信息的类型可以是数据表,第二预设值比如为1000,那么也就是说如果该数据表中的表项超过了1000项,则可以认为记录的标识的数量超过了第二预设值。
也就是说,预留给记录信息的空间可能是有限的,若记录信息中记录的标识的数量超过第二预设值,同样有可能记录信息中记录的数据已经较多,甚至可能没有空间再记录新加载到公共内存中的数据了,这时可以删除一些记录信息中的表项,以便能够记录记录加载到内存中的数据。可以确定访问该记录信息包括的每个数据的标识的线程池的数量,基于访问不同标识的线程池的数量对数据的标识进行排序,可以确定访问的线程池的数量少的前N个数据的标识,可以直接释放确定的N个数据的标识对应的数据的内存。对于N的值具体为多少,本发明实施例同样不作限定,可以是在电子设备出厂时设置好的,也可以是由用户自行设定,以及设定之后还能根据需要进行修改。
例如,记录信息的类型可以是数据表,该数据表中的每个表项都记录了一个已加载到公共内存的数据的标识,以及该数据在公共内存中的地址,例如第二预设值为5000,N为200,那么可以在该数据表中记录的表项超过5000项时,可以确定这5000个表项对应的5000个数据的标识中的每个标识分别被多少个线程池访问过,比如其中的200个数据的标识仅被一个线程池访问过,其他的数据的标识可能都是被两个或两个以上的线程池访问过,那么可以释放这200个数据对应的全部内存,比如可以从公共内存中删除这200个数据,以及删除这200个数据在记录表中的表项,或者比如,其中的150个数据的标识被一个线程访问过,有100个数据的标识被两个线程池访问过,其他的数据的标识可能都是被三个或三个以上的线程池访问过,这种情况下,可以释放被一个线程池访问过的150个数据的标识对应的数据占用的内存,以及可以从100个被两个线程池访问过的数据的标识中随机选取50个标识,释放这50个标识对应的数据占用的内存,或者也可以从100个被两个线程池访问过的数据标识中确被定访问次数少的前50个标识,并释放这50个标识对应的数据占用的内存,等等。
由于访问一个数据的线程池少的时候,可以认为主节点发送的任务中可能只有较少的任务需要访问该数据,那么可以优先释放这类数据占用的内存,从而节省内存空间,也不会影响大部分任务的执行,而在执行大多数的任务的时候,依然能够直接从公共内存中读取数据,设备较为智能化。
可选的,第一从节点在接收到主节点发送的第一任务之后,还可以分别为公共内存和执行第一任务的线程池分配资源。
本发明实施例中,第一从节点在通过线程池执行读取数据的任务的时候,可以将数据加载到公共内存,因此,对于线程池而言,不需要存储数据,也就可能并不需要太多的内存空间,但由于线程池在执行任务过程中可能需要进行在存储设备中查找数据、读取数据等操作,因此可能需要较多的CPU(Central Processing Unit,中央处理器)资源,因此在分配资源时,可以为线程池分配少量的内存空间,比如分配1MB的内存空间,以及可以为线程池分配较多的处理器资源,比如分配2个CPU。而对于公共内存而言,需要存储的数据较多,需要处理的数据较少,因此,在分配资源时,可以为公共内存分配较多的内存空间,比如分配1GB的内存空间,以及可以为公共内存分配较少的处理器资源,比如分配1个CPU内核。当然,每个任务可能都需要一个线程池来执行,那么线程池在执行完一个任务之后,可以将该线程池占用的资源全部释放,以供下一个线程池执行任务时能够使用。而由于公共内存能够服务于全部的线程池,不同的线程池在执行不同的任务时有可能都需要访问公共内存,因此公共内存可以持续占用分配的资源。通过这样的方式,可以根据使用的需求来分配资源,资源的利用率较高。
请参见图2,基于同一发明构思,本发明实施例提供一种计算节点,该计算节点可以是分布式系统包括的任意一个计算节点,例如可以是用来实现图1所示的方法的从节点。该计算节点可以包括:
存储器201,包括公共内存;公共内存为计算节点的任意一个线程池均能够访问的内存;
处理器202,与存储器201连接,用于:
接收分布式系统中的另一计算节点发送的第一任务;第一任务用于读取第一数据;
确定第一数据是否存储在公共内存中;
若第一数据未存储在公共内存中,则将第一数据从存储设备加载到公共内存中;或,若第一数据存储在公共内存中,则在公共内存中确定第一数据;
从公共内存中读取第一数据。
可选的,处理器202还用于:
在第一数据未存储在公共内存中,则将第一数据从存储设备加载到公共内存中之后,记录第一数据在公共内存中的地址;或,若第一数据存储在公共内存中,则获取第一数据在公共内存中的地址;
根据第一数据在公共内存中的地址,读取第一数据。
可选的,处理器202用于:
查询是否记录了第一数据的标识,第一数据的标识用于指示第一数据;
若第一数据未存储在公共内存中,则将第一数据从存储设备加载到公共内存中,并记录第一数据在公共内存中的地址,包括:若未记录第一数据的标识,则将第一数据从存储设备加载到公共内存中,并记录第一数据的标识及第一数据在公共内存中的地址;或,若第一数据存储在公共内存中,则获取第一数据在公共内存中的地址,包括:若记录了第一数据的标识,则根据第一数据的标识获取对应的第一数据在公共内存中的地址。
可选的,处理器202还用于:
若记录信息中记录的标识的数量超过第一预设值,则基于记录信息,确定访问次数少的前M个标识对应的M个数据;其中,记录信息用于记录已加载到公共内存中的数据的标识与已加载到公共内存中的数据在公共内存中的地址之间的对应关系;M为正整数;
释放M个数据占用的全部内存。
可选的,处理器202还用于:
若记录信息中记录的标识的数量超过第二预设值,则基于记录信息,分别确定访问记录信息包括的每个标识的线程池的数量,并确定访问的线程池的数量少的前N个标识对应的N个数据;其中,记录信息用于记录已加载到公共内存中的数据的标识与已加载到公共内存中的数据在公共内存中的地址之间的对应关系;N为正整数;
释放N个数据占用的全部内存。
请参见图3,基于同一发明构思,本发明实施例提供另一种计算节点,该计算节点可以是分布式系统包括的任意一个计算节点,例如可以是用来实现图1所示的方法的从节点。该计算节点可以包括:
接收模块301,用于接收分布式系统中的另一计算节点发送的第一任务;第一任务用于读取第一数据;
第一确定模块302,用于确定第一数据是否存储在公共内存中;公共内存为计算节点的任意一个线程池均能够访问的内存;
加载模块303,用于若第一数据未存储在公共内存中,则将第一数据从存储设备加载到公共内存中;或,
第二确定模块304,用于若第一数据存储在公共内存中,则在公共内存中确定第一数据;
读取模块305,用于从公共内存中读取第一数据。
可选的,计算节点还包括:
记录模块,用于在第一数据未存储在公共内存中,则将第一数据从存储设备加载到公共内存中之后,记录第一数据在公共内存中的地址;
第二确定模块304用于:
若第一数据存储在公共内存中,则获取第一数据在公共内存中的地址;
读取模块305用于:
根据第一数据在公共内存中的地址,读取第一数据。
可选的,第一确定模块302用于:
查询是否记录了第一数据的标识,第一数据的标识用于指示第一数据;
加载模块303用于:
若未记录第一数据的标识,则将第一数据从存储设备加载到公共内存中,并记录第一数据的标识及第一数据在公共内存中的地址;或,
第二确定模块304用于:
若记录了第一数据的标识,则根据第一数据的标识获取对应的第一数据在公共内存中的地址。
可选的,计算节点还包括:
第三确定模块,用于若记录信息中记录的标识的数量超过第一预设值,则基于记录信息,确定访问次数少的前M个标识对应的M个数据;其中,记录信息用于记录已加载到公共内存中的数据的标识与已加载到公共内存中的数据在公共内存中的地址之间的对应关系;M为正整数;
第一释放模块,用于释放M个数据占用的全部内存。
可选的,计算节点还包括:
第四确定模块,用于若记录信息中记录的标识的数量超过第二预设值,则基于记录信息,分别确定访问记录信息包括的每个标识的线程池的数量,并确定访问的线程池的数量少的前N个标识对应的N个数据;其中,记录信息用于记录已加载到公共内存中的数据的标识与已加载到公共内存中的数据在公共内存中的地址之间的对应关系;N为正整数;
第二释放模块,用于释放N个数据占用的全部内存。
本发明实施例中,在分布式系统中,从节点在接收主节点发送的读取第一数据的任务后,可以先在公共内存中确定是否存储了第一数据,如果公共内存中没有存储第一数据,则可以从存储设备中将第一数据加载到公共内存中再进行读取,如果公共内存中存储了第一数据,就可以直接从公共内存中读取第一数据,无需再重新加载。通过这样的方式,从节点无需在每次接收到读取数据的任务时都将数据加载到内存,减小了加载数据的工作量,节省了时间,同时,同一个数据可能只需在公共内存中存储一份,只要是读取该数据的任务都能够从公共内存直接读取,节省了内存的空间,且节省出的内存空间可以用于存储其他的数据,也提高了内存的利用率。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
具体来讲,本发明实施例中的一种分布式系统中的数据处理方法对应的计算机程序指令可以被存储在光盘,硬盘,U盘等存储介质上,当存储介质中的与一种分布式系统中的数据处理方法对应的计算机程序指令被一计算节点读取或被执行时,包括如下步骤:
接收所述主节点发送的第一任务;所述第一任务用于读取第一数据;
确定所述第一数据是否存储在公共内存中;所述公共内存为所述第一从节点的任意一个线程池均能够访问的内存;
若所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中;或,若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据;
从所述公共内存中读取所述第一数据。
可选的,所述存储介质中存储的与步骤:所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中,对应的计算机指令在被执行之后,还包括:记录所述第一数据在所述公共内存中的地址;或,
所述存储介质中存储的与步骤:若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据,对应的计算机指令在被执行过程中,包括:若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址;
所述存储介质中存储的与步骤:读取所述第一数据,对应的计算机指令在被执行过程中,包括:
根据所述第一数据在所述公共内存中的地址,读取所述第一数据。
可选的,所述存储介质中存储的与步骤:确定所述第一数据是否存储在公共内存中,对应的计算机指令在被执行过程中,包括:
查询是否记录了所述第一数据的标识,所述第一数据的标识用于指示所述第一数据;
所述存储介质中存储的与步骤:若所述第一数据未存储在所述公共内存中,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据在所述公共内存中的地址,对应的计算机指令在被执行过程中,包括:若未记录所述第一数据的标识,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据的标识及所述第一数据在所述公共内存中的地址;或,所述存储介质中存储的与步骤:若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址,对应的计算机指令在被执行过程中,包括:若记录了所述第一数据的标识,则根据所述第一数据的标识获取对应的所述第一数据在所述公共内存中的地址。
可选的,所述存储介质中还存储另外一些计算机指令,该另外一些计算机指令在被执行过程中,包括:
若记录信息中记录的标识的数量超过第一预设值,则基于所述记录信息,确定访问次数少的前M个标识对应的M个数据;其中,所述记录信息用于记录已加载到所述公共内存中的数据的标识与已加载到所述公共内存中的数据在所述公共内存中的地址之间的对应关系;M为正整数;
释放所述M个数据占用的全部内存。
可选的,所述存储介质中还存储另外一些计算机指令,该另外一些计算机指令在被执行过程中,包括:
若记录信息中记录的标识的数量超过第二预设值,则基于所述记录信息,分别确定访问所述记录信息包括的每个标识的线程池的数量,并确定访问的线程池的数量少的前N个标识对应的N个数据;其中,所述记录信息用于记录已加载到所述公共内存中的数据的标识与已加载到所述公共内存中的数据在所述公共内存中的地址之间的对应关系;N为正整数;
释放所述N个数据占用的全部内存。
以上所述,以上实施例仅用以对本发明的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,不应理解为对本发明的限制。本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (11)
1.一种分布式系统中的数据处理方法,应用于第一从节点中,所述分布式系统包括主节点和多个从节点,所述第一从节点为所述分布式系统中的任意一个从节点,所述方法包括:
接收所述主节点发送的第一任务;所述第一任务用于读取第一数据;
在第一从节点的内存中设置公共内存,确定所述第一数据是否存储在公共内存中;所述公共内存为所述第一从节点的任意一个线程池均能够访问的内存;
若所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中;或,若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据;
从所述公共内存中读取所述第一数据。
2.如权利要求1所述的方法,其特征在于,
在所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中之后,还包括:记录所述第一数据在所述公共内存中的地址;或,若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据,包括:若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址;
读取所述第一数据,包括:
根据所述第一数据在所述公共内存中的地址,读取所述第一数据。
3.如权利要求2所述的方法,其特征在于,
确定所述第一数据是否存储在公共内存中,包括:
查询是否记录了所述第一数据的标识,所述第一数据的标识用于指示所述第一数据;
若所述第一数据未存储在所述公共内存中,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据在所述公共内存中的地址,包括:若未记录所述第一数据的标识,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据的标识及所述第一数据在所述公共内存中的地址;或,若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址,包括:若记录了所述第一数据的标识,则根据所述第一数据的标识获取对应的所述第一数据在所述公共内存中的地址。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
若记录信息中记录的标识的数量超过第一预设值,则基于所述记录信息,确定访问次数少的前M个标识对应的M个数据;其中,所述记录信息用于记录已加载到所述公共内存中的数据的标识与已加载到所述公共内存中的数据在所述公共内存中的地址之间的对应关系;M为正整数;
释放所述M个数据占用的全部内存。
5.如权利要求3所述的方法,其特征在于,所述方法还包括:
若记录信息中记录的标识的数量超过第二预设值,则基于所述记录信息,分别确定访问所述记录信息包括的每个标识的线程池的数量,并确定访问的线程池的数量少的前N个标识对应的N个数据;其中,所述记录信息用于记录已加载到所述公共内存中的数据的标识与已加载到所述公共内存中的数据在所述公共内存中的地址之间的对应关系;N为正整数;
释放所述N个数据占用的全部内存。
6.一种计算节点,应用于分布式系统中,所述计算节点包括:
存储器,包括公共内存;所述公共内存为所述计算节点的任意一个线程池均能够访问的内存,在所述计算节点的内存中设置公共内存;
处理器,与所述存储器连接,用于:
接收所述分布式系统中的另一计算节点发送的第一任务;所述第一任务用于读取第一数据;
确定所述第一数据是否存储在所述公共内存中;
若所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中;或,若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据;
从所述公共内存中读取所述第一数据。
7.如权利要求6所述的计算节点,其特征在于,所述处理器还用于:
在所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中之后,记录所述第一数据在所述公共内存中的地址;或,若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址;
根据所述第一数据在所述公共内存中的地址,读取所述第一数据。
8.如权利要求7所述的计算节点,其特征在于,所述处理器用于:
查询是否记录了所述第一数据的标识,所述第一数据的标识用于指示所述第一数据;
若所述第一数据未存储在所述公共内存中,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据在所述公共内存中的地址,包括:若未记录所述第一数据的标识,则将所述第一数据从所述存储设备加载到所述公共内存中,并记录所述第一数据的标识及所述第一数据在所述公共内存中的地址;或,若所述第一数据存储在所述公共内存中,则获取所述第一数据在所述公共内存中的地址,包括:若记录了所述第一数据的标识,则根据所述第一数据的标识获取对应的所述第一数据在所述公共内存中的地址。
9.如权利要求8所述的计算节点,其特征在于,所述处理器还用于:
若记录信息中记录的标识的数量超过第一预设值,则基于所述记录信息,确定访问次数少的前M个标识对应的M个数据;其中,所述记录信息用于记录已加载到所述公共内存中的数据的标识与已加载到所述公共内存中的数据在所述公共内存中的地址之间的对应关系;M为正整数;
释放所述M个数据占用的全部内存。
10.如权利要求8所述的计算节点,其特征在于,所述处理器还用于:
若记录信息中记录的标识的数量超过第二预设值,则基于所述记录信息,分别确定访问所述记录信息包括的每个标识的线程池的数量,并确定访问的线程池的数量少的前N个标识对应的N个数据;其中,所述记录信息用于记录已加载到所述公共内存中的数据的标识与已加载到所述公共内存中的数据在所述公共内存中的地址之间的对应关系;N为正整数;
释放所述N个数据占用的全部内存。
11.一种计算节点,应用于分布式系统中,所述计算节点包括:
接收模块,用于接收所述分布式系统中的另一计算节点发送的第一任务;所述第一任务用于读取第一数据;
第一确定模块,用于在第一从节点的内存中设置公共内存,确定所述第一数据是否存储在公共内存中;所述公共内存为所述计算节点的任意一个线程池均能够访问的内存;
加载模块,用于若所述第一数据未存储在所述公共内存中,则将所述第一数据从存储设备加载到所述公共内存中;或,
第二确定模块,用于若所述第一数据存储在所述公共内存中,则在所述公共内存中确定所述第一数据;
读取模块,用于从所述公共内存中读取所述第一数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610173862.3A CN105868023B (zh) | 2016-03-24 | 2016-03-24 | 一种分布式系统中的数据处理方法及计算节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610173862.3A CN105868023B (zh) | 2016-03-24 | 2016-03-24 | 一种分布式系统中的数据处理方法及计算节点 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105868023A CN105868023A (zh) | 2016-08-17 |
CN105868023B true CN105868023B (zh) | 2019-11-26 |
Family
ID=56624702
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610173862.3A Active CN105868023B (zh) | 2016-03-24 | 2016-03-24 | 一种分布式系统中的数据处理方法及计算节点 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105868023B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106656525B (zh) * | 2016-09-21 | 2019-12-24 | 华为技术有限公司 | 一种数据广播系统、数据广播方法及设备 |
CN106909624B (zh) * | 2017-01-19 | 2020-05-22 | 中国科学院信息工程研究所 | 一种海量数据实时排序优化方法 |
CN111813783B (zh) * | 2020-07-27 | 2024-03-26 | 南方电网数字电网研究院有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103390061A (zh) * | 2013-07-31 | 2013-11-13 | 浙江大学 | 以用户为中心且基于多级缓存的海洋时空数据访问方法 |
-
2016
- 2016-03-24 CN CN201610173862.3A patent/CN105868023B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103390061A (zh) * | 2013-07-31 | 2013-11-13 | 浙江大学 | 以用户为中心且基于多级缓存的海洋时空数据访问方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105868023A (zh) | 2016-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101315628B (zh) | 内存数据库系统及实现内存数据库的方法和装置 | |
CN110209490B (zh) | 一种内存管理方法及相关设备 | |
CN106294352B (zh) | 一种文件处理方法、装置和文件系统 | |
CN107247778A (zh) | 用于实施可扩展数据存储服务的系统和方法 | |
CN108900626B (zh) | 一种云环境下数据存储方法、装置及系统 | |
CN103544153A (zh) | 一种基于数据库的数据更新方法和系统 | |
CN105868023B (zh) | 一种分布式系统中的数据处理方法及计算节点 | |
CN106708968A (zh) | 分布式数据库系统和分布式数据库系统中的数据处理方法 | |
US9854037B2 (en) | Identifying workload and sizing of buffers for the purpose of volume replication | |
CN109240607B (zh) | 一种文件读取方法和装置 | |
CN108319496A (zh) | 资源访问方法、业务服务器、分布式系统及存储介质 | |
CN104270412A (zh) | 一种基于Hadoop分布式文件系统的三级缓存方法 | |
CN105874426B (zh) | 一种系统调用命令的批处理方法及装置 | |
CN110287152A (zh) | 一种数据管理的方法以及相关装置 | |
US9836491B1 (en) | Method and apparatus for hardware-implemented AVL tree updates | |
CN111159140A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN110688065A (zh) | 一种存储空间管理方法、系统、电子设备及存储介质 | |
CN110019083A (zh) | 分布式文件系统的存储方法、装置、电子设备及存储介质 | |
CN112019577A (zh) | 专属云存储实现方法、装置、计算设备及计算机存储介质 | |
CN102209016A (zh) | 一种数据处理方法、装置和数据处理系统 | |
CN114816272B (zh) | Kubernetes环境下的磁盘管理系统 | |
CN104166596A (zh) | 一种内存分配方法及节点 | |
CN106056329A (zh) | 商品库存的校验方法及校验系统 | |
CN110334034A (zh) | 映射表动态加载的方法、装置、计算机设备及存储介质 | |
CN106775450B (zh) | 一种混合存储系统中的数据分布方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |