本公开实施例涉及人工智能,具体涉及一种特征计算的批请求处理方法、装置、电子设备及存储介质。
背景技术:
1、随着人工智能的发展,在使用机器学习处理在线服务请求(例如在线推荐请求)的过程中,特征计算是非常重要的一环。在特定的服务场景下(例如推荐场景),在线特征计算的请求是以批(batch)的形式到达计算系统。
2、目前,对于特征计算的批请求的朴素处理方式为:遍历批中的每个请求,对每个请求单独调用内部计算逻辑,最后将所有计算结果合并在一起返回。这种方式有下述缺陷:
3、(1)输入输出数据过大
4、一次批请求输入包含多个请求输入,返回结果包含多个请求的计算结果,当批比较大(即批中包含的请求数量较多)时,会产生较高的数据传输压力。
5、(2)计算量大,效率低
6、一次批请求输入包含多个请求输入,当批比较大时,遍历批中的每个请求,对每个请求单独调用内部计算逻辑,计算量大,效率低。
7、上述对问题的发现过程的描述,仅用于辅助理解本公开的技术方案,并不代表承认上述内容是现有技术。
技术实现思路
1、为了解决现有技术存在的至少一个问题,本公开的至少一个实施例提供了一种特征计算的批请求处理方法、装置、电子设备及存储介质。
2、第一方面,本公开实施例提出一种特征计算的批请求处理方法,包括:
3、接收特征计算的批请求;其中,所述批请求包括多个数据行,所述多个数据行共享计算目标和输入字段信息,所述输入字段信息用于指定所述数据行包括的多个列的信息;
4、基于所述输入字段信息和所述计算目标生成第一执行计划;其中,所述第一执行计划包括多个计算步骤和每个所述计算步骤的输入和输出;
5、确定所述输入字段信息中一个或多个公共列的信息,并基于所述公共列的信息优化所述第一执行计划中的计算步骤和/或计算步骤的输入,得到第二执行计划;
6、基于所述第二执行计划,得到所述批请求的批计算结果。
7、在一些实施例中,所述确定所述输入字段信息中一个或多个公共列的信息包括:
8、通过用于预先建立的公共列接口获取所述输入字段信息中一个或多个公共列的信息;
9、或,
10、基于所述批请求包括的多个数据行确定所述输入字段信息中一个或多个公共列的信息。
11、在一些实施例中,所述基于所述公共列的信息优化所述第一执行计划中的计算步骤和/或计算步骤的输入,得到第二执行计划包括:
12、针对所述第一执行计划中的每个计算步骤:
13、判断该计算步骤是否满足第一优化条件,其中,所述第一优化条件为:
14、该计算步骤基于一个或多个所述公共列中的数据进行计算,且不基于任一非公共列中的数据进行计算;
15、若满足所述第一优化条件,则优化该计算步骤的输入为所述一个或多个所述公共列中的数据。
16、在一些实施例中,若判断该计算步骤不满足所述第一优化条件,则:
17、判断该计算步骤是否满足第二优化条件,其中,所述第二优化条件为:该计算步骤基于一个或多个所述公共列中的数据进行计算,且基于一个或多个非公共列中的数据进行计算;
18、若满足所述第二优化条件,则优化该计算步骤为至少一个第一子步骤和至少一个第二子步骤;其中,所述第一子步骤仅基于一个或多个所述公共列中的数据进行计算;所述第二子步骤至少基于一个或多个非公共列中的数据进行计算。
19、在一些实施例中,针对该计算步骤为时间窗口拉取,所述输入字段信息中包括主键列和时间列,且所述时间窗口拉取基于所述主键列中的数据和所述时间列中的数据拉取符合所述计算目标的窗口数据;
20、若所述主键列和所述时间列均为公共列,则优化所述时间窗口拉取的输入为所述主键列中的数据和所述时间列中的数据。
21、在一些实施例中,针对该计算步骤为表拼接,所述表拼接基于拼接条件对左表和右表进行拼接,其中,所述左表基于所述批请求得到,所述右表基于数据库中存储的表得到;
22、若所述拼接条件为公共列,则优化所述表拼接为一个第一子步骤和两个第二子步骤;
23、其中,该第一子步骤用于:对所述左表中所有公共列的数据和所述右表中所有公共列的数据,进行基于所述拼接条件的第一拼接;
24、所述两个第二子步骤包括:右拼接子步骤和左拼接子步骤;
25、所述右拼接子步骤用于:对该第一子步骤的输出和所述右表中所有非公共列的数据,进行基于所述右表的唯一索引的第二拼接;
26、所述左拼接子步骤用于:对所述右拼接子步骤的输出和所述左表中所有非公共列的数据,进行第三拼接;
27、所述左拼接子步骤的输出作为所述表拼接的计算结果。
28、在一些实施例中,针对该计算步骤为聚合计算,所述聚合计算产生多个计算结果,每个所述计算结果为公共计算结果、第一非公共计算结果或第二非公共计算结果;
29、其中,所述公共计算结果仅基于一个或多个所述公共列中的数据进行计算得到;所述第一非公共计算结果基于一个或多个所述公共列中的数据以及一个或多个非公共列中的数据进行计算得到;所述第二非公共计算结果基于一个或多个非公共列中的数据进行计算得到。
30、在一些实施例中,将所述聚合计算优化为多个第一子步骤和多个第二子步骤;其中,所述多个第一子步骤包括至少一个第一公共计算步骤和至少一个第二公共计算步骤;所述多个第二子步骤包括至少一个第一非公共计算步骤和至少一个第二非公共计算步骤;
31、所述第一公共计算步骤的输入为一个或多个所述公共列中的数据,输出为公共中间数据;
32、所述第二公共计算步骤的输入为一个或多个所述公共列中的数据,输出为公共计算结果;
33、所述第一非公共计算步骤的输入为一个或多个所述第一公共计算步骤输出的公共中间数据以及一个或多个非公共列中的数据,输出为第一非公共计算结果;
34、所述第二非公共计算步骤的输入为一个或多个非公共列中的数据,输出为第二非公共计算结果。
35、在一些实施例中,所述确定所述输入字段信息中一个或多个公共列的信息后,所述方法还包括:
36、建立共享存储区;
37、将公共数据存储到所述共享存储区中;其中,所述公共数据包括:所述公共列中的数据、公共中间数据和公共计算结果;
38、其中,所述公共中间数据为所述第二执行计划中的第一公共计算步骤产生的中间数据,所述第一公共计算步骤为基于一个或多个所述公共列中的数据产生中间数据的步骤;
39、其中,所述公共计算结果为所述第二执行计划中的第二公共计算步骤产生的计算结果,所述第二公共计算步骤为基于一个或多个所述公共列中的数据产生计算结果的步骤。
40、在一些实施例中,所述基于所述第二执行计划,得到所述批请求的批计算结果包括:
41、针对所述批请求中的每个所述数据行,分别执行所述第二执行计划,得到每个所述数据行的计算结果,并合并为所述批请求的批计算结果。
42、在一些实施例中,在执行所述第二执行计划时:
43、针对所述第二执行计划中的第一公共计算步骤:
44、查询索引关系,所述索引关系为公共计算步骤的标识与公共计算步骤产生的数据在共享存储区的存储位置之间的关系;
45、若查询到该第一公共计算步骤的标识,则从所述索引关系中确定该第一公共计算步骤的标识对应的第一存储位置;
46、基于所述第一存储位置,从所述共享存储区中获取数据作为该第一公共计算步骤产生的公共中间数据。
47、在一些实施例中,所述方法还包括:
48、若查询不到该第一公共计算步骤的标识,则基于所述公共列中的数据,通过该第一公共计算步骤产生公共中间数据;
49、将该第一公共计算步骤产生的公共中间数据存储到所述共享存储区中,并在所述索引关系中记录该第一公共计算步骤的标识与存储位置之间的关系。
50、在一些实施例中,在执行所述第二执行计划时:
51、针对所述第二执行计划中的第二公共计算步骤:
52、查询索引关系,所述索引关系为公共计算步骤的标识与公共计算步骤产生的数据在共享存储区的存储位置之间的关系;
53、若查询到该第二公共计算步骤的标识,则从所述索引关系中确定该第二公共计算步骤的标识对应的第二存储位置;
54、基于所述第二存储位置,从所述共享存储区中获取数据作为该第二公共计算步骤产生的公共计算结果。
55、在一些实施例中,所述方法还包括:
56、若查询不到该第二公共计算步骤的标识,则基于所述公共列中的数据,通过该第二公共计算步骤产生公共计算结果;
57、将该第二公共计算步骤产生的公共计算结果存储到所述共享存储区中,并在所述索引关系中记录该第二公共计算步骤的标识与存储位置之间的关系。
58、在一些实施例中,所述查询索引关系包括:
59、通过预先建立的公共数据缓存接口查询索引关系。
60、在一些实施例中,所述将公共数据存储到所述共享存储区中包括:
61、通过预先建立的数据编码存储接口将公共数据存储到所述共享存储区中。
62、第二方面,本公开实施例还提出一种特征计算的批请求处理装置,包括:
63、接收单元,用于接收特征计算的批请求;其中,所述批请求包括多个数据行,所述多个数据行共享计算目标和输入字段信息,所述输入字段信息用于指定所述数据行包括的多个列的信息;
64、生成单元,用于基于所述输入字段信息和所述计算目标生成第一执行计划;其中,所述第一执行计划包括多个计算步骤和每个所述计算步骤的输入和输出;
65、优化单元,用于确定所述输入字段信息中一个或多个公共列的信息,并基于所述公共列的信息优化所述第一执行计划中的计算步骤和/或计算步骤的输入,得到第二执行计划;
66、计算单元,用于基于所述第二执行计划,得到所述批请求的批计算结果。
67、在一些实施例中,所述优化单元确定所述输入字段信息中一个或多个公共列的信息包括:
68、通过用于预先建立的公共列接口获取所述输入字段信息中一个或多个公共列的信息;
69、或,
70、基于所述批请求包括的多个数据行确定所述输入字段信息中一个或多个公共列的信息。
71、在一些实施例中,所述优化单元基于所述公共列的信息优化所述第一执行计划中的计算步骤和/或计算步骤的输入,得到第二执行计划包括:
72、针对所述第一执行计划中的每个计算步骤:
73、判断该计算步骤是否满足第一优化条件,其中,所述第一优化条件为:
74、该计算步骤基于一个或多个所述公共列中的数据进行计算,且不基于任一非公共列中的数据进行计算;
75、若满足所述第一优化条件,则优化该计算步骤的输入为所述一个或多个所述公共列中的数据。
76、在一些实施例中,所述优化单元若判断该计算步骤不满足所述第一优化条件,则:
77、判断该计算步骤是否满足第二优化条件,其中,所述第二优化条件为:该计算步骤基于一个或多个所述公共列中的数据进行计算,且基于一个或多个非公共列中的数据进行计算;
78、若满足所述第二优化条件,则优化该计算步骤为至少一个第一子步骤和至少一个第二子步骤;其中,所述第一子步骤仅基于一个或多个所述公共列中的数据进行计算;所述第二子步骤至少基于一个或多个非公共列中的数据进行计算。
79、在一些实施例中,针对该计算步骤为时间窗口拉取,所述输入字段信息中包括主键列和时间列,且所述时间窗口拉取基于所述主键列中的数据和所述时间列中的数据拉取符合所述计算目标的窗口数据;
80、若所述主键列和所述时间列均为公共列,则所述优化单元优化所述时间窗口拉取的输入为所述主键列中的数据和所述时间列中的数据。
81、在一些实施例中,针对该计算步骤为表拼接,所述表拼接基于拼接条件对左表和右表进行拼接,其中,所述左表基于所述批请求得到,所述右表基于数据库中存储的表得到;
82、若所述拼接条件为公共列,则所述优化单元优化所述表拼接为一个第一子步骤和两个第二子步骤;
83、其中,该第一子步骤用于:对所述左表中所有公共列的数据和所述右表中所有公共列的数据,进行基于所述拼接条件的第一拼接;
84、所述两个第二子步骤包括:右拼接子步骤和左拼接子步骤;
85、所述右拼接子步骤用于:对该第一子步骤的输出和所述右表中所有非公共列的数据,进行基于所述右表的唯一索引的第二拼接;
86、所述左拼接子步骤用于:对所述右拼接子步骤的输出和所述左表中所有非公共列的数据,进行第三拼接;
87、所述左拼接子步骤的输出作为所述表拼接的计算结果。
88、在一些实施例中,针对该计算步骤为聚合计算,所述聚合计算产生多个计算结果,每个所述计算结果为公共计算结果、第一非公共计算结果或第二非公共计算结果;
89、其中,所述公共计算结果仅基于一个或多个所述公共列中的数据进行计算得到;所述第一非公共计算结果基于一个或多个所述公共列中的数据以及一个或多个非公共列中的数据进行计算得到;所述第二非公共计算结果基于一个或多个非公共列中的数据进行计算得到。
90、在一些实施例中,所述优化单元将所述聚合计算优化为多个第一子步骤和多个第二子步骤;其中,所述多个第一子步骤包括至少一个第一公共计算步骤和至少一个第二公共计算步骤;所述多个第二子步骤包括至少一个第一非公共计算步骤和至少一个第二非公共计算步骤;
91、所述第一公共计算步骤的输入为一个或多个所述公共列中的数据,输出为公共中间数据;
92、所述第二公共计算步骤的输入为一个或多个所述公共列中的数据,输出为公共计算结果;
93、所述第一非公共计算步骤的输入为一个或多个所述第一公共计算步骤输出的公共中间数据以及一个或多个非公共列中的数据,输出为第一非公共计算结果;
94、所述第二非公共计算步骤的输入为一个或多个非公共列中的数据,输出为第二非公共计算结果。
95、在一些实施例中,所述优化单元确定所述输入字段信息中一个或多个公共列的信息后,还用于:
96、建立共享存储区;
97、将公共数据存储到所述共享存储区中;其中,所述公共数据包括:所述公共列中的数据、公共中间数据和公共计算结果;
98、其中,所述公共中间数据为所述第二执行计划中的第一公共计算步骤产生的中间数据,所述第一公共计算步骤为基于一个或多个所述公共列中的数据产生中间数据的步骤;
99、其中,所述公共计算结果为所述第二执行计划中的第二公共计算步骤产生的计算结果,所述第二公共计算步骤为基于一个或多个所述公共列中的数据产生计算结果的步骤。
100、在一些实施例中,所述计算单元用于:
101、针对所述批请求中的每个所述数据行,分别执行所述第二执行计划,得到每个所述数据行的计算结果,并合并为所述批请求的批计算结果。
102、在一些实施例中,所述计算单元在执行所述第二执行计划时:
103、针对所述第二执行计划中的第一公共计算步骤:
104、查询索引关系,所述索引关系为公共计算步骤的标识与公共计算步骤产生的数据在共享存储区的存储位置之间的关系;
105、若查询到该第一公共计算步骤的标识,则从所述索引关系中确定该第一公共计算步骤的标识对应的第一存储位置;
106、基于所述第一存储位置,从所述共享存储区中获取数据作为该第一公共计算步骤产生的公共中间数据。
107、在一些实施例中,所述计算单元还用于:
108、若查询不到该第一公共计算步骤的标识,则基于所述公共列中的数据,通过该第一公共计算步骤产生公共中间数据;
109、将该第一公共计算步骤产生的公共中间数据存储到所述共享存储区中,并在所述索引关系中记录该第一公共计算步骤的标识与存储位置之间的关系。
110、在一些实施例中,所述计算单元在执行所述第二执行计划时:
111、针对所述第二执行计划中的第二公共计算步骤:
112、查询索引关系,所述索引关系为公共计算步骤的标识与公共计算步骤产生的数据在共享存储区的存储位置之间的关系;
113、若查询到该第二公共计算步骤的标识,则从所述索引关系中确定该第二公共计算步骤的标识对应的第二存储位置;
114、基于所述第二存储位置,从所述共享存储区中获取数据作为该第二公共计算步骤产生的公共计算结果。
115、在一些实施例中,所述计算单元还用于:
116、若查询不到该第二公共计算步骤的标识,则基于所述公共列中的数据,通过该第二公共计算步骤产生公共计算结果;
117、将该第二公共计算步骤产生的公共计算结果存储到所述共享存储区中,并在所述索引关系中记录该第二公共计算步骤的标识与存储位置之间的关系。
118、在一些实施例中,所述计算单元查询索引关系包括:
119、通过预先建立的公共数据缓存接口查询索引关系。
120、在一些实施例中,所述计算单元将公共数据存储到所述共享存储区中包括:通过预先建立的数据编码存储接口将公共数据存储到所述共享存储区中。
121、第三方面,本公开实施例还提出一种电子设备,包括:处理器和存储器;所述处理器通过调用所述存储器存储的程序或指令,用于执行如第一方面任一实施例所述方法的步骤。
122、第四方面,本公开实施例还提出一种非暂态计算机可读存储介质,用于存储程序或指令,所述程序或指令使计算机执行如第一方面任一实施例所述方法的步骤。
123、可见,本公开的至少一个实施例中,生成批请求的执行计划但不直接执行该计划,结合人工启发式信息即公共列信息,挖掘批中多个请求内部的关联,进而优化执行计划,再执行优化后的执行计划,相比目前批请求的朴素处理方式,有效地减少了批请求计算的通信开销和计算开销,从而提高了批请求的处理效率。