基于MongoDB的大数据队列堆栈高效操作的方法与流程

文档序号:12119413阅读:695来源:国知局

本发明涉及大数据存储技术领域,尤其是一种基于MongoDB的大数据进行队列或堆栈的高效处理的方法。



背景技术:

随着计算机软件应用程序业务的发展,应用程序使用队列堆栈的场景越来越多,而且应用的数据量、并发量也越来越大;如进行证券数据的实时分析、电子商务的实时交易分析等情况,在单位时间内需进行大量的数据存储。对于一般编程工具提供的自带程序,由于应用程序的运行环境的限制,无法很好地满足大数据量、高并发的请求;造成应用程序在运行上的瓶颈。



技术实现要素:

本发明解决的技术问题在于提供一种基于MongoDB,可用于进行大数据量、高并发的队列堆栈高效处理的操作方法,可以使在一些大数据量、高并发的应用上,解决一般编程工具无法提供的大存储量、高并发进行队列堆栈进行操作的问题,可应用于证券实时分析、大数据量并发电子交易等实时性较高的场景。

本发明解决上述技术问题的技术方案是:

所述的方法包括以下几个步骤:

步骤1:将MongoDB当作一个高效的数据存取空间,搭建一个独立的MongoDB或由多个MongoDB形成的集群;

步骤2:通过分析进行高并发大数据量存取的业务逻辑,从需要进行队列或堆栈操作的数据中抽取出进行存数据与取数据的排序顺序特征,把相关的特征配置到系统上;

步骤3:按配置的排序顺序特征,在MongoDB上建立起索引支持,用于快速的数据排序查询;如没有指定排序顺序,可建立一个自增的特征,用于快速的数据排序查询;

步骤4:通过配置的排序顺序特征已建立的相关索引,并调用MongoDB的查询接口,分别实现队列堆栈的增加PUSH、获取POP、统计COUNT等操作方法,并提供线程安全的调用接口。

所述的搭建MongoDB是在应用程序另外的服务器上搭建MongoDB,用于数据的高速并发的存储;当数据高速并发存储要求不断增加时,搭建集群的MongoDB。

对于时间顺序特征比较明显的,可按存储的时间顺序,按毫秒级别甚至微秒的级别进行排序,选择为顺序排序的特征;对于无时间特征的,选择相对散列值比较高的特征进行排序;

对于无明显的顺序排序特征的,通过建立一个自增的特征,并调用MongoDB自带的自增方法,在每次存储数据时自动获取增量的值,最终按存储的顺序作为排序特征;

如果选取的单个特征无法很明显地进行顺序排序,通过选择多个特征的方法,原则上尽量选择少的特征,以免影响后续的数据存取效率。

所述的在MongoDB上建立顺序排序索引是:

对于单独的MongoDB,使用单一的索引来建立顺序排序索引;

对于集群的MongoDB,使用两个的组合索引来建立顺序排序索引;包括使用“固定值+增量值”两字段做组合索引,使数据在多个MongoDB实例之间是分散写入,在实例内部是顺序写入;

对顺序排序索引的建立语句进行保存,用于后续进行新采集Collection建立时的使用。

所述实现队列堆栈的COUNT操作方法是调用MongoDB的count方法,实现数据总数的统计,进行统计时进行数据存取的同步锁操作,确保数据的准确性;

所述实现队列堆栈的PUSH操作方法是:

主要使用MongoDB的批量插入BatchInsert方法,进行数据的增加操作,把数据批量按顺序放到存储空间上;

增加数据的PUSH过程,确保与COUNT方法进行同步锁的操作,以保证获取数据统计的准确性;

对于堆栈的PUSH过程,与POP进行同步锁的操作,以确保数据后进先出;

所述实现队列堆栈的POP操作方法是:

主要操作是进行数据的获取操作,并对已经获取了的操作从存储空间上进行删除;查询的操作使用MongoDB的查询Find方法;获取了数据后,使用MongoDB的批量删除BatchDelete方法把获取后的数据进行删除;

获取数据的POP过程,确保与COUNT方法进行同步锁的操作,以保证获取数据统计的准确性;

队列的Find方法按分类Sort方法进行排序时,按建立的顺序排序索引按正序进行获取数据;

对于堆栈的POP过程,与PUSH进行同步锁的操作,以确保数据后进先出;堆栈的Find方法按Sort方法进行排序时,按建立的顺序排序索引,按倒序进行获取数据。

在进行同步锁的操作过程,以时间为准,哪个操作首先获取到同步锁,就进行相关的操作,操作完成后即刻进行同步锁释放,用于后续的操作。

本发明的有益效果是:

本发明方法通过利用MongonDB的高效存储及丰富的查询支持、较多类型的索引支持以及自动分片Auto-Sharding的功能,把MongoDB当作一个高效的数据存取空间,通过配置相关的计数器顺序特征,并实现队列或堆栈在操作过程中的POP与PUSH方法,从而解决在应用中大批量的数据进行队列或堆栈的操作时,由于运行环境的空间不足、维护新空间的增加导致效率不高的问题。通过这种方法,使高并发、大数据量的应用在进行队列或堆栈操作时,可以实现数据的高效存储,并可以实现均衡负载,把对数据存取操作,转换到MongoDBh,从而极大提高了大数据量队列堆栈操作的效率。

本发明方法通过基于MongoDB作为存储介质,利用MongoDB面向文档型非关系数据库、基于内存操作,具体速度快、操作方便等特点,并可低扩展难度的优点,适合后大数据量高并发的数据存取操作,通过对MongoDB进行数据操作线程安全的控制,实现进行大数据量高并发的数据存储,解决应用过程中特定的数据处理问题。

附图说明

下面结合附图对本发明进一步说明:

附图1是本发明计算机软件系统功能组件化的流程图。

具体实施方式

如图1所示,本发明的方法实施步骤如下:

步骤1:在与应用程序同个服务器或另外独立的服务器上,搭建一个独立的MongoDB或由多个MongoDB形成的集群,用于数据的存取操作;

步骤2:通过分析进行高并发大数据量存取的业务逻辑,对需要进行队列或堆栈操作的数据中抽取出进行存数据与取数据的排序顺序特征,把相关的特征配置到系统上;

步骤3:按配置的排序顺序特征,在MongoDB上建立起索引支持,用于快速的数据排序查询;如没有指定排序顺序,可通过建立一个自增的特征,用于快速的数据排序查询;

步骤4:通过程序实现类似于队列堆栈的操作的接口程序,实现PUSH、POP、COUNT等线程安全的方法,接收数据的存取命令,并把命令转换为调用MongoDB的相关方法,把数据的存取操作通过MongoDB实现;

步骤5:把实现的类似于队列堆栈的接口程序,部署到应用服务器上,用于应用程序的队列堆栈数据存取调用,从而实现支持大数据量高并发的队列堆栈高效操作。

所述搭建MongoDB具体步骤为:

步骤一、可在应用程序另外的服务器上搭建MongoDB,用于数据的高速并发的存储,从而降低应用程序所在服务器的资源压力;

步骤二、在数据高速并发存储要求不断增加的情况下,可通过搭建集群的MongoDB来应对,从而无需修改应用程序,就能达到降低服务器的资源压力,做到资源均衡负载;

步骤三、通过独立的应用服务器上搭建MongoDB或集群,要求服务器与应用服务器的网络达到100M或者更高的标准,从而使数据的存取过程的通讯链路不成为瓶颈。

所述分析高并发大数据量业务逻辑,抽取顺序排序特征的具体步骤为:

步骤一、不同的业务逻辑,对队列堆栈进行操作时的排序顺序特征不相同,所以在应用前需进行排序顺序特征的分析;

步骤二、对于时间顺序特征比较明显的,可按存储的时间顺序,按毫秒级别甚至微秒的级别进行排序,选择为顺序排序的特征;对于无时间特征的,选择相对散列值比较高的特征进行排序;

步骤三、对于无明显的顺序排序特征的,可通过建立一个自增的特征,并调用MongoDB自带的自增方法,在每次存储数据时自动获取增量的值,最终按存储的顺序作为排序特征;

步骤四、如果选取的单个特征无法很明显地进行顺序排序,可通过选择多个特征的方法,只是原则上尽量选择少的特征,以免影响后续的数据存取效率。

所述在MongoDB上建立顺序排序索引的具体步骤为:

步骤一、对于单独的MongoDB,尽量使用单一的索引来建立顺序排序索引,尽量使在数据进行写入时提交效率;

步骤二、对于集群的MongoDB,可使用两个的组合索引来提高顺序排列的效率,例如使用“固定值+增量值”两字段做组合索引,使数据在多个MongoDB实例之间是分散写入,在实例内部是顺序写入;

步骤三、顺序排序索引的建立语句需进行保存,以用于后续进行新Collection建立时的使用。

所述实现队列堆栈的COUNT操作方法的具体为:调用MongoDB的count方法,实现数据总数的统计,进行统计时需进行数据存取的同步锁操作,以确保数据的准确性。

所述实现队列堆栈的PUSH操作方法的具体步骤为:

步骤一、队列堆栈的PUSH方法,主要操作是进行数据的增加操作,通过PUSH方法,把数据批量批顺序放到存储空间上,主要使用到MongoDB的BatchInsert方法;

步骤二、增加的数据的PUSH过程,需确保与COUNT方法的同步锁操作,以保证获取数据统计的准确性;

步骤三、对于队列的PUSH过程,由于队列的特点是先进先出,所以在PUSH的过程,与POP获取数据无冲突,无需与POP进行同步锁的操作;

步骤四、对于堆栈的PUSH过程,由于堆栈的特点是后进先出,所以在PUSH的过程,与POP获取数据有冲突,需与POP进行同步锁的操作,以确保数据后进先出。

所述实现队列堆栈的POP操作方法的具体步骤为:

步骤一、队列堆栈的POP方法,主要操作是进行数据的获取操作,并对已经获取了的操作从存储空间上进行删除,查询的操作使用MongoDB的Find方法;获取了数据后,使用MongoDB的BatchDelete方法把获取后的数据进行删除;

步骤二、获取数据的POP过程,需确保与COUNT方法的同步锁操作,以保证获取数据统计的准确性;

步骤三、对于队列的POP过程,由于队列的特点是先进先出,所以在POP的过程,与PUSH增加数据无冲突,无需与PUSH进行同步锁的操作;队列的Find方法按Sort方法进行排序时,按建立的顺序排序索引按正序进行获取数据;

步骤四、对于堆栈的POP过程,由于堆栈的特点是后进先出,所以在PUSH的过程,与PUSH增加数据有冲突,需与PUSH进行同步锁的操作,以确保数据后进先出;堆栈的Find方法按Sort方法进行排序时,按建立的顺序排序索引按倒序进行获取数据。

在进行同步锁的操作过程,以时间为准,哪个操作首先获取到同步锁,就进行相关的操作,操作完成后即刻进行同步锁释放,用于后续的操作。

基于MongoDB的高效存储数据的特点,存储引擎使用的内存映射文件(MMAP的方式),将内存管理工作交给操作系统去处理,并提供了高效的数据存取方法,从而提供了一种按队列堆栈进行数据存取的方法,解决一般队列堆栈存储空间小的问题。

本发明涉及的MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

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