一种基于多数据源插入到数据库的方法与流程

文档序号:13760437阅读:489来源:国知局

本发明涉及互联网技术领域,尤其涉及一种基于多数据源插入到数据库的方法。



背景技术:

语音话务系统中CDR(calling detail records)是一个重要的数据参数,每一次呼叫、通话、挂机等操作系统都会有较多的CDR数据,而且这些所有产生的CDR数据都要实时插入到数据库,以便在系统页面上能够实现查询展示出来。

现有系统中实现的技术方案大多数都是一条条地插入到数据库,系统中每次产生一条CDR记录,都马上地调用插入到数据库的方法,然后等待返回,最后在页面上显示处理结果。

使用一条条地插入到数据库的方案,当然话务量不大的情况下是可以满足要求的,但是当话务量大的时候,会产生比较大的问题。当CDR数据产生得多的时候,一条条数据插入的时候,响应速度会大大变慢,由于每一次入库的反应速度变慢,用户在页面上会有不好的用户体验,而且一条条数据插入也会对数据库产生很大的性能影响,到时其他对数据库的操作也会变慢。

除了上述方案,还有的处理方案是采用异步的方式,当系统产生CDR数据时,调用插入数据库的方法,此时把这操作存放到队列中,再定时地从队列中取出数据进行插入到数据库。

使用队列的方式可以解决用户在界面上响应慢的问题,但是定时地从队列中取出数据再一条条地进行数据库插入还是会存在插入速度慢,影响数据库性能,并不能有效地解决根本的问题。



技术实现要素:

本发明的目的是为了克服现有技术的缺陷,提供一种基于多数据源插入到数据库的方法,此方法能够快速地把大量数据实时地插入到数据库,减轻一个数据库频繁插入所带来的压力,提升数据库性能。

为实现上述目的,本发明提供了一种基于多数据源插入到数据库的方法,该方法包括以下步骤:

步骤1:通过对业务需求划分为多个数据源,并且每一个数据源对应创建一个不固定大小的消息队列,每个队列创建一个定时获取队列数据的线程,最后每个线程再创建相应的线程池。

步骤2:系统提供一个插入CDR数据的接口,当CDR产生数据时调用插入CDR数据的接口进行数据存放到对应的数据源消息队列。

步骤3:通过定时获取队列的线程数据进行分组存放到对应的线程池中。

步骤4:线程池在空闲线程的情况下马上调用自己的任务,把任务中分好组的CDR数据进行一次性批量提交到对应的数据库。

进一步地,CDR数据的接口是根据调用方传进来的CDR数据中的业务标示,对数据进行划分,把数据存放到对应数据源的消息队列中。

进一步地,每个定时获取队列的线程中,每隔100毫秒就在对应的队列中最多获取700条CDR数据,然后对不同类型的CDR数据进行分组,再存放到自己的线程池中进行任务执行。其中时间间隔100毫秒和每次最多获取CDR数据的条数700条这2个参数要根据CDR数据接口的调用情况进行调整,以达到最优的效果。

进一步地,还能够根据CDR产生的数量进行多服务的分布式部署,用以提供CDR数据入库的数量和速度。

本发明技术方案带来的有益效果:

第一,采用本发明能够快速地把大量同时产生的CDR数据批量实时地插入到数据库。

第二,使用多数据源的方式能够减轻一个数据库频繁插入所带来的压力,使数据库在插入CDR数据的同时也能快速响应其他的操作,提升数据库性能。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1是本发明的方法流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在呼叫平台的使用中,每时每刻会产生大量的CDR数据,这些数据都要插入数据库,一条一条地插入数据库会产生延时、数据库阻塞等问题出现。为了解决此问题,本发明提出一种基于多数据源快速插入到数据库的方法,通过该方法能够达到CDR数据实时快速批量插入到数据库、减少数据库压力,提升数据库性能。

如图1所示为本发明的方法流程图,本发明的目的是在高并发和大量CDR产生的情况下快速地插入到数据库,并且一定程度地减少数据库的压力,具体实现如下:

步骤1:系统在初始化的时候根据业务需求划分多个数据源,并且每一个数据源对应创建一个不固定大小的消息队列,每个队列创建一个定时获取队列数据的线程,最后每个线程再创建相应的线程池。

步骤2:系统提供一个插入CDR数据的接口,当CDR产生数据时,调用此接口。此接口的实现功能是根据调用方传进来的CDR数据中的业务标示,对数据进行划分,把数据存放到对应数据源的消息队列中。

步骤3:每个定时获取队列的线程中,每隔100毫秒就在对应的队列中最多获取700条CDR数据,然后对不同类型的CDR数据进行分组,再存放到自己的线程池中进行任务执行。其中时间间隔100毫秒和每次最多获取CDR数据的条数700条这2个参数要根据CDR数据接口的调用情况进行调整,以达到最优的效果。

步骤4:每个线程对应的线程池中在空闲线程的情况下马上调用自己的任务,把任务中分好组的CDR数据进行一次性地批量提交到自己对应的数据库中。

步骤5:还可以根据CDR产生的数量进行多服务的分布式部署,用以提供CDR数据入库的数量和速度。

以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1