掌桥专利:专业的专利平台
掌桥专利
首页

一种基于预扫描的字符串替换方法、装置及存储介质

文献发布时间:2024-04-18 20:00:25


一种基于预扫描的字符串替换方法、装置及存储介质

技术领域

本申请涉及数据处理的领域,尤其是涉及一种基于预扫描的字符串替换方法、装置及存储介质。

背景技术

在以互联网为主的新媒体,包括手机APP、在线网站或在线显示屏上,产生了数亿计的广告展示机会。这些广告展示机会也被称为广告流量,随着广告流量交易技术的逐渐发展,广告流量被汇集到一个称为“互联网广告流量交易平台”的在线系统中,互联网广告流量交易平台又称流量交易平台,这种在线系统一方面汇集了各方媒体资源的广告流量,一方面对接了大量上游需求方或广告主。互联网广告流量交易平台的作用类似一个流量的在线集中交易市场,将数以亿万计的流量通过在线系统高效地售卖给流量需求方。

在流量交易平台的架构下,根据供量方、平台方与需求方三方的对接协议要求,流经流量交易平台的流量被封装为json数据格式的请求数据和响应数据。其中,响应数据中会包含相关的宏,宏用于标记对应的数据或者反馈数据被执行的操作,而在需要流量交易平台将这些宏替换为实际的真实值。针对每一条内容为字符串的响应数据,流量交易平台都要针对这些宏进行字符串替换操作,流量交易平台中每秒有10万笔以上的请求或响应,因此这是一个非常高频的处理模块,宏替换的性能对系统整体性能的影响极大。

现有的字符串替换方法,是对每一个响应数据进行多个宏的字符替换,每个宏的字符替换则需要分配一块新的内存,分配次数=宏个数*宏在字符串中出现的次数。因此完成一个响应数据的替换操作则需要分配多次内存,在流通数以亿万计的流量的流量交易平台中,多频次少量的内存分配的代价是非常大的。

发明内容

为了降低流量交易平台实现宏替换而进行的内存分配的次数,本申请提供一种基于预扫描的字符串替换方法、装置及存储介质。

第一方面,本申请提供的一种基于预扫描的字符串替换方法,采用如下的技术方案:

一种基于预扫描的字符串替换方法,包括如下步骤:

获取待替换字符集、宏与替换字符;

扫描待替换字符集,识别出所述待替换字符集中的宏;

标记所述宏的位置;

获取待替换步数;

根据所述待替换步数将所述待替换字符集分成替换区域,所述替换区域的数量与所述待替换步数的值反相关设置;

根据所述替换区域的数量申请对应数量的内存;

遍历所有的所述替换区域,根据所述替换区域中被标记的宏与对应的所述替换字符在对应的内存中拼接出目标字符串,其中,所述目标字符串中的内容为所述待替换字符串中所述宏被替换成所述替换字符而得到的内容;

根据所述替换区域的数量按照拼接的顺序将所述目标字符串拼接成最终字符串。

通过采用上述技术方案,无需对每个宏的替换过程均分配新的内存,而是通过扫描得到所有宏的位置,然后根据替换步骤计算得到替换区域,在替换区域的替换过程分配新的内存,替换区域中能够替换多个或多种的宏;减少了内存分配次数,减少了对宏的全字符串查找次数,降低了内存释放的次数。

可选地,所述扫描待替换字符集,识别出所述待替换字符集中的宏的步骤中,还包括如下子步骤:

输入待替换字符集到字符数组;

获取一个所述宏,在所述字符数组中扫描所述宏的位置,记录所述宏的数量和所述宏的位置;

遍历计算所有的所述宏。

通过采用上述技术方案,实现了通过扫描得到所有宏的位置,利于减少对宏的全字符串查找次数。

可选地,方法还包括如下步骤:

根据所述宏的数量与所述宏的位置计算所需的内存大小,所述所需的内存大小=所述字符数组的长度-所有出现的所述宏的长度+所需的所述替换字符的长度;

分配一块长度为所需的内存大小的所述内存;

获取一个扫描出来的所述宏,根据对应的所述宏的位置,将对应位置的所述宏替换为所述替换字符,并将替换后的结果放入所述内存;

遍历计算所有扫描出来的所述宏。

通过采用上述技术方案,实现了在替换区域中能够替换多个或多种的宏,利于减少内存分配次数,利于降低内存释放的次数。

可选地,所述待替换步数为1。

通过采用上述技术方案,无论有多少个待替换的宏,只分配一次内存,也只有一次内存释放,只需一次预扫描标记所有待替换的宏的位置。

可选地,所述待替换步数大于1。

通过采用上述技术方案,能够降低分配的内存的大小要求,在内存余量不足时,能够少批量地进行处理。

可选地,方法还包括如下步骤:

获取平台在最近的设定时间段内的流量值,根据所述耗时值反相关调节所述待替换步数的值;

和/或,获取上一次遍历所有的所述替换区域的耗时值,根据所述耗时值反相关调节所述待替换步数的值;

和/或,获取平台在最近的设定时间段内的剩余算力值,根据所述剩余算力值正相关调节所述待替换步数的值。

通过采用上述技术方案,根据平台的运行状态实时调节待替换步数的值,从而让处理过程具有自适应性。

可选地,方法还包括如下步骤:

获取平台在最近的设定时间段内的流量值A;

获取上一次遍历所有的所述替换区域的耗时值B;

获取根据平台在最近的设定时间段内的剩余算力值C;

计算所述待替换步数的值D=C/(A*B)。

通过采用上述技术方案,根据平台的多个状态运行状态实时调节待替换步数的值,从而让处理过程具有更好的自适应性。

可选地,方法还包括如下步骤:

获取平台在最近的设定时间段内的流量值A与流量增长值a;

获取上一次遍历所有的所述替换区域的耗时值B与耗时增长值b;

获取根据平台在最近的设定时间段内的剩余算力值C与算力增长值c;

计算所述待替换步数的值D=(C/(A*B))

通过采用上述技术方案,根据平台的多个状态运行状态以及多个运行状态趋势实时调节待替换步数的值,从而让处理过程具有更好的自适应性。

第二方面,本申请提供的一种基于预扫描的字符串替换装置,采用如下的技术方案:

一种基于预扫描的字符串替换装置,处理器,所述处理器中运行有上述中任意一项所述的基于预扫描的字符串替换方法的程序。

第三方面,本申请提供的一种存储介质,采用如下的技术方案:

一种存储介质,存储有上述中任意一项所述的基于预扫描的字符串替换方法的程序。

综上所述,本申请包括以下至少一种有益技术效果:

无需对每个宏的替换过程均分配新的内存,而是通过扫描得到所有宏的位置,然后根据替换步骤计算得到替换区域,在替换区域的替换过程分配新的内存;减少了内存分配次数,减少了对宏的全字符串查找次数,降低了内存释放的次数。

无论有多少个待替换的宏,只分配一次内存,也只有一次内存释放,只需一次预扫描标记所有待替换的宏的位置。

根据平台的多个状态运行状态以及多个运行状态趋势实时调节待替换步数的值,从而让处理过程具有更好的自适应性。

附图说明

图1是流量交易平台的功能示意图。

图2是现有字符串替换算法的方法流程图。

图3是现有字符串替换算法中需要改进的步骤的示意图。

图4是本申请实施例中基于预扫描的字符串替换方法的方法流程示意图。

图5是本申请实施例中预扫描阶段与执行替换阶段的方法流程示意图。

图6是本申请实施例中预扫描阶段与执行替换阶段显示分配内存步骤的方法流程示意图。

具体实施方式

下面详细描述本申请的实施方式,实施方式的示例在附图1-6中示出。

在本说明书的描述中,参考术语“某些实施方式”、“一个实施方式”、“一些实施方式”、“示意性实施方式”、“示例”、“具体示例”、或“一些示例”的描述意指结合所述实施方式或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施方式或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施方式或示例中以合适的方式结合。

流量交易平台的功能如图1所示。需要替换的宏如下表所示:

在现有传统的字符串替换算法的实现中,字符串替换算法的方法流程如图2与图3所示。由于字符串的不可变特性,针对每一个要替换的宏,都需要分配一块新的内存,内存分配是代价比较大,因此随着宏的数量越多,时间复杂度线性增加。每次替换一个宏,都需要查找该宏所在位置,由于考虑到相同的宏可能多次出现,每次查找都要从头到尾执行完整的扫描。时间复杂度与待扫描的字符串的长度和待替换的宏的个数成等比例相关。另外,流量交易平台分配的内存块越多,导致用完以后,流量交易平台需要释放的内存块也愈多,释放内存同样需要陷入操作系统内核,导致较大的CPU耗费。

本申请实施例公开一种基于预扫描的字符串替换方法,参照图4,包括如下步骤:

获取待替换字符集、宏与替换字符。流量交易平台从接收到的流量中按照预设的格式要求获得待替换字符,并将所有待替换字符组合成待替换字符集。宏与替换字符则是由流量交易平台预先设置好的内容。

扫描待替换字符集,识别出待替换字符集中的宏。扫描可使用逐字符扫描的方法,识别可使用逐一对比的算法。或者,调用字符串操作API来实现扫描与识别的操作。输入待替换字符集到字符数组;获取一个宏,在字符数组中扫描宏的位置,记录宏的数量和宏的位置;遍历计算所有的宏。实现了通过扫描得到所有宏的位置,利于减少对宏的全字符串查找次数。

标记宏的位置。标记可使用记录的方式实现。

获取待替换步数。其中,待替换步数为1,无论有多少个待替换的宏,只分配一次内存,也只有一次内存释放,只需一次预扫描标记所有待替换的宏的位置。在另一实施方式中,待替换步数大于1,能够降低分配的内存的大小要求,在内存余量不足时,能够少批量地进行处理。

根据待替换步数将待替换字符集分成替换区域,替换区域的数量与待替换步数的值反相关设置。根据替换区域的数量申请对应数量的内存。

遍历所有的替换区域,根据替换区域中被标记的宏与对应的替换字符在对应的内存中拼接出目标字符串,其中,目标字符串中的内容为待替换字符串中宏被替换成替换字符而得到的内容。先根据替换区域中的宏的数量与宏的位置计算所需的内存大小,所需的内存大小=字符数组的长度-所有出现的宏的长度+所需的替换字符的长度;分配一块长度为所需的内存大小的内存;获取一个扫描出来的宏,根据对应的宏的位置,将对应位置的宏替换为替换字符,并将替换后的结果放入内存;遍历计算所有扫描出来的宏。实现了在替换区域中能够替换多个或多种的宏,利于减少内存分配次数,利于降低内存释放的次数。

根据替换区域的数量按照拼接的顺序将目标字符串拼接成最终字符串。

无需对每个宏的替换过程均分配新的内存,而是通过扫描得到所有宏的位置,然后根据替换步骤计算得到替换区域,在替换区域的替换过程分配新的内存,替换区域中能够替换多个或多种的宏;减少了内存分配次数,减少了对宏的全字符串查找次数,降低了内存释放的次数。

如图5与图6所示,具体实例中的步骤包括两个阶段:

第一阶段为预扫描:先进行一阶段扫描流程开始,然后输入原始字符串到数组A,数组A为字符数组。从待替换的宏列表中拉取一个宏,待替换的宏列表包括OS1:NS1、OS2:NS2、OS3:NS3等。OSn为宏,也为待替换的子字符串,NSn为新的字符串。在数组A中扫描宏所在的位置,同一个宏可能出现多次,并全部添加到扫描结果列表中。获取下一个待替换的宏,在进行上述步骤,直到所有的宏都扫描完成。扫描结果列表为:

OS1:起止位置P1b,P1e,NS1;

OS2:起止位置P2b,P2e,NS2;

OS3:起止位置P3b,P3e,NS3;等。其中,Pnb与Pne为待替换的宏的起止坐标。

第二阶段为执行替换:

先进行二阶段替换流程开始,然后输入原始字符串到数组A。根据阶段一的扫描结果计算需要分配的用于保存替换结果的内存长度。再分配内存,依次读取阶段一的扫描结果记录,将替换结果拼接复制到新分配的内存中。最后完成所有针对扫描结果记录的替换。

在一些实施方式中,获取平台在最近的设定时间段内的流量值,根据流量值反相关调节待替换步数的值。和/或,获取上一次遍历所有的替换区域的耗时值,根据耗时值反相关调节待替换步数的值。和/或,获取平台在最近的设定时间段内的剩余算力值,根据剩余算力值正相关调节待替换步数的值。流量值越多,则需要平台将更多的内存用于新入流量的分类、识别等运算,因此需要降低待替换步数的值,降低内存的分配次数。耗时值越长,则需要平台降低在处理内存操作上的耗时,因此需要降低待替换步数的值,降低内存的分配次数即降低在处理内存操作上的耗时。剩余算力值越大,则平台的空余算力越多,则有更多的内存可分配,因此能够适当地增加待替换步数的值,让内存的运用更具有兼容性,不影响其它算法或数据的计算。根据平台的运行状态实时调节待替换步数的值,从而让处理过程具有自适应性。

在另一些实施方式中,获取平台在最近的设定时间段内的流量值A,获取上一次遍历所有的替换区域的耗时值B,获取根据平台在最近的设定时间段内的剩余算力值C,计算待替换步数的值D=C/(A*B)。根据平台的多个状态运行状态实时调节待替换步数的值,从而让处理过程具有更好的自适应性。

在其它一些实施方式中,获取平台在最近的设定时间段内的流量值A与流量增长值a,获取上一次遍历所有的替换区域的耗时值B与耗时增长值b,获取根据平台在最近的设定时间段内的剩余算力值C与算力增长值c,计算待替换步数的值D=(C/(A*B))

针对流量交易平台中,非常高频的广告素材内容的宏替换进行了优化改进。基于cpu-intel至强2.8GHZ,16核心,64G内存操作系统centos7.9,显著地减少减少了CPU的指令执行数和内存的分配次数,以下是流量交易平台线上实时抽样测试程序显示的结果:

本申请实施例还公开了一种基于预扫描的字符串替换装置,包括处理器,处理器中运行有上述中任意一项所述的基于预扫描的字符串替换方法的程序。

本申请实施例还公开了一种存储介质,存储有上述中任意一项所述的基于预扫描的字符串替换方法的程序。

尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

相关技术
  • 一种鼻胃管固定装置及鼻胃管
  • 鼻胃管固定装置及包含该装置的鼻胃管
技术分类

06120116532921