CN111563091B - 非往返式的批量更新MongoDB的方法及系统 - Google Patents

非往返式的批量更新MongoDB的方法及系统 Download PDF

Info

Publication number
CN111563091B
CN111563091B CN202010385939.XA CN202010385939A CN111563091B CN 111563091 B CN111563091 B CN 111563091B CN 202010385939 A CN202010385939 A CN 202010385939A CN 111563091 B CN111563091 B CN 111563091B
Authority
CN
China
Prior art keywords
update
field
mongodb
lasttradatetime
lasttradate
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
Application number
CN202010385939.XA
Other languages
English (en)
Other versions
CN111563091A (zh
Inventor
肖碧怡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bank of China Ltd
Original Assignee
Bank of China Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Bank of China Ltd filed Critical Bank of China Ltd
Priority to CN202010385939.XA priority Critical patent/CN111563091B/zh
Publication of CN111563091A publication Critical patent/CN111563091A/zh
Application granted granted Critical
Publication of CN111563091B publication Critical patent/CN111563091B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种非往返式的批量更新MongoDB的方法及系统,其中,该方法包括:识别数据库操作;根据所述数据库操作生成写入模型;调用预设的Spark更新MongoDB的函数,将所述写入模型放入批量更新操作中,对MongoDB进行批量更新。该方法及系统能够按条件实时地批量更新MongoDB,通过非往返式的批量更新可以明显提升大数据下Spark按条件批量更新MongoDB的性能,并且在数据量大时可以满足实时性要求,在批量更新过程中不再造成消息堆积,有效减少了MongoDB服务器端的压力。

Description

非往返式的批量更新MongoDB的方法及系统
技术领域
本发明涉及数据库更新技术领域,尤指一种非往返式的批量更新MongoDB的方法及系统。
背景技术
在MongoDB+Spark的大数据解决方案中,Spark Streaming负责流式数据处理,将处理结果实时写入MongDB中。在一些实时应用场景下,需要根据不同条件,对MongoDB做不同操作,例如处理的不是最新消息时无动作,处理的是最新消息则更新数据库。这在MongoDB 4.2版本支持在更新语句中创建管道之前,必须包含一次往返式操作,即需要先查询一次数据库,根据查询获取的值和消息值进行对比,再决定不同的数据库操作动作,事实证明,这种方式在输入(实时数据流)和输出(更新的MongoDB集合)数据量均较大时存在时效性风险。
具体的,在银行系统中最常见的一个应用场景是:根据实时交易流,更新当日交易笔数和余额。由于上游系统和消息组件一般均不保证消息的有序性,因此在MongoDB集合设计时会设置字段“最后一笔金融交易时间”,通过比较消息时间戳和更新文档的“最后一笔金融交易时间”,判断该消息是否为最新交易,再执行相应的数据库操作,主要包括以下四种情况:
A、如果是当日的最新交易,则更新余额,更新最后一笔金融交易时间,今日交易笔数加1;
B、如果是跨日的最新交易,则更新余额,更新最后一笔金融交易时间,今日交易笔数置为1;
C、如果是当日的旧交易,则余额保持不变,最后一笔金融交易时间保持不变,今日交易笔数加1;
D、如果是跨日的旧交易,则不做任何更新。
在该应用中,由于统计的是全行账户余额和交易笔数,所以日均交易量和对应集合的文档数量均超过千万级。另外,考虑到其他场景,对应集合设计时每个文档都包含一个将近1000条记录的数组,文档平均大小较大(压缩完后超过15k)。
现有技术采用往返式操作,即查询出MongoDB中账户的“最后一笔金融交易时间”,和消息的交易时间戳进行对比,再决定不同的数据库更新操作。在上述数据量下,查询MongoDB的时间远远大于Spark Streaming的batch时间,造成了严重的消息堆积。另外,对于每一条消息,都需要建立一次和MongoDB的连接,且查询是慢查询,对MongoDB服务器造成了很大压力。在给查询的字段建立了索引后,会提升查询性能,但是在数据量大时仍然满足不了实时性要求。
综上来看,亟需一种不会造成MongoDB服务器压力,且满足spark流式计算时效性的批量更新MongoDB的方案。
发明内容
为解决上述问题,本发明提出了一种基于Spark的非往返式的批量更新MongoDB的方法及系统,可以满足数据量大且时效性要求高的应用场景,无需进行查询操作,该方法及系统根据设置的条件分离出多个更新操作,通过多个更新操作分别对字段进行更新,实现对MongoDB的批量更新操作,并且还可以通过对更新操作的查询条件字段建立索引,提高更新性能。
在本发明一实施例中,提出了一种非往返式的批量更新MongoDB的方法,该方法包括:
识别数据库操作;
根据所述数据库操作生成写入模型;
调用预设的Spark更新MongoDB的函数,将所述写入模型放入批量更新操作中,对MongoDB进行批量更新。
在本发明另一实施例中,还提出了一种非往返式的批量更新MongoDB的系统,该系统包括:
操作识别模块,用于识别数据库操作;
写入模型生成模块,用于根据所述数据库操作生成写入模型;
批量更新模块,用于调用预设的Spark更新MongoDB的函数,将所述写入模型放入批量更新操作中,对MongoDB进行批量更新。
在本发明另一实施例中,还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现非往返式的批量更新MongoDB的方法。
在本发明另一实施例中,还提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现非往返式的批量更新MongoDB的方法。
利用本发明提出的批量更新MongoDB的方法及系统,能够按条件实时地批量更新MongoDB,通过非往返式的批量更新可以明显提升大数据下Spark按条件批量更新MongoDB的性能,并且在数据量大时可以满足实时性要求,在批量更新过程中不再造成消息堆积,有效减少了MongoDB服务器端的压力。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明一实施例的非往返式的批量更新MongoDB的方法流程示意图。
图2是本发明一具体实施例的识别数据库操作的详细流程示意图。
图3是本发明一实施例的非往返式的批量更新MongoDB的系统架构示意图。
图4是本发明一具体实施例的操作识别模块的架构示意图。
图5是本发明另一实施例的非往返式的批量更新MongoDB的系统架构示意图。
图6是本发明一实施例的计算机设备结构示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种非往返式的批量更新MongoDB的方法及系统。
在本发明实施例中,需要说明的术语:
Spark:Spark是专为大规模数据处理而设计的快速通用的计算引擎。其中,SparkStreaming是Spark核心API的一个扩展,可以实现高吞吐量的,具备容错机制的实时数据流处理。
流式数据处理:针对大规模流动数据在不断变化的运动过程中实时地进行分析,捕捉到可能有用的信息,并把结果发送到下一计算节点。
MongoDB:一个开源的、模式自由的、面向文档存储的高性能分布式nosql数据库。其中,
1、文档的数据结构由键值(key、value)对组成,类似于JSON对象,字段值可以包含其他文档、数组以及文档数组。
2、集合就是数据库的表。
3、“_id”是系统为每一个MongoDB文档自动生成的12字节唯一标识。
MongoDB数据库的更新操作主要包括三部分,一部分是查询条件,另一部分是操作符和更新对象,还有一部分是可选项。只有满足查询条件,才会去执行对应的更新操作。例如db.test.update({age>65},{$set:{ageDes:‘old’}}),即对于集合test,如果某条记录的字段age的值大于65,就把这条记录的字段ageDes的值设置为‘old’;如果记录字段age的值小于等于65,不会执行任何更新操作。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
图1是本发明一实施例的非往返式的批量更新MongoDB的方法流程示意图。如图1所示,该方法包括:
步骤S110,识别数据库操作;
步骤S120,根据所述数据库操作生成写入模型;
步骤S130,调用预设的Spark更新MongoDB的函数,将所述写入模型放入批量更新操作中,对MongoDB进行批量更新。
为了对上述非往返式的批量更新MongoDB的方法进行更为清楚的解释,下面结合具体的实施例来进行说明。
步骤S110:
具体的,结合图2,为本发明一具体实施例的识别数据库操作的详细流程示意图。如图2所示,步骤S110,识别数据库操作的详细过程为:
步骤S111,获取实时消息;
步骤S112,根据预设条件和实时消息对应字段的值,对每一条实时消息生成涵盖所有场景的多个互斥的数据库操作。
在一具体实施例中,查询条件为t<lastTraDateTime且d=lastTraDate时,所述实时消息为当日的旧交易,数据库操作为:更新今日交易笔数对应的字段加1;
由于是旧交易,余额对应的字段无需进行更新,也就是针对该字段不会执行任何数据库操作。
其中,t为所述实时消息的时间戳;d为所述实时消息的交易日期;lastTraDateTime为集合中表示最后一笔金融交易时间的字段;lastTraDate为集合中表示最后一笔金融交易日期的字段;
查询条件为t>lastTraDateTime且d=lastTraDate时,所述实时消息为当日的新交易,数据库操作为更新余额对应的字段为交易后的余额,更新今日交易笔数对应的字段加1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t;
查询条件为d>lastTraDate时,所述实时消息为跨日的新交易,数据库操作为更新余额对应的字段为交易后的余额,更新今日交易笔数对应的字段为1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t,更新最后一笔金融交易日期对应的字段lastTraDate为d。在满足d>lastTraDate条件的情况下,t>lastTraDateTime是肯定成立的,因此在这种情况的查询条件中无需加入t>lastTraDateTime。
在上述三种情况下,对于每一条实时消息都会生成数据库操作,然后执行后续步骤将该些数据库操作提交给数据库,数据库会进一步根据查询条件判断更新操作是否会执行。
另外,在其它情况下,由于不满足查询条件,则不会执行任何更新操作;例如,d<lastTraDate时,所述实时消息为跨日的旧交易,这种情况下余额对应的字段及交易笔数对应的字段都无需更新,也就不会生成数据库操作。需要说明的是,在满足d<lastTraDate的情况下,t<lastTraDateTime必然成立,因此在这种情况下无需判断t。
将本发明与现有技术对比来看,现有技术采用的往返式操作的过程中,主要是在数据库中查询到要用的数据,再进行比较后,进行根据比较结果生成一个更新操作,而本发明无需进行数据库查询,直接根据预设的条件和实时消息对应字段的值,生成多个更新操作,每个更新操作对应不同的字段,进一步通过批量执行该些更新操作对MongoDB进行批量更新。
步骤S120:
根据所述数据库操作生成互斥的写入模型。
这里提到的互斥指的是,将步骤S110生成的多个数据库操作对应生成多个尽量互斥的写入模型(WriteModel);WriteModel是Spark提供的写入MongoDB的基类模型,其可以包含多种子类,例如,UpdateOneModel是更新一条记录的模型,即如果匹配多条记录,只更新匹配到的第一条记录。
步骤S130:
调用预设的Spark更新MongoDB的函数,将所述写入模型放入批量更新操作中,对MongoDB进行批量更新。
因为现有Spark没有提供MongoDB UPDATE操作,其只提供了SAVE操作,即如果有“_id”字段则根据“_id”进行更新操作,否则直接插入,所以需要编写Spark更新MongoDB的函数。
本发明通过调用Spark更新MongoDB的函数,将所有WriteModel放入批量更新操作bulkWrite(用于接收批量更新操作,然后执行它们中的每一个;默认是有序的执行)中,对数据库进行批量更新。
具体而言,现有Spark只提供了SAVE操作来更新MongoDB,即上述提到的查询条件必须包括_id,而_id是MongoDB系统自动生成的字段,对于实时消息来说,不查询一次数据库就不知道_id的值。例如,现有Spark更新MongoDB只支持db.test.update({_id:‘123456’},{$set:{‘ageDesc’:old}}),即知道_id字段为123456时,更新ageDesc的值为’old’。
本发明对Spark更新MongoDB的函数进行了拓展,使其支持UPDATE操作,即可以根据任意字段更新MongoDB(即本发明可以对任意字段设定查询条件,而不要求查询条件必须包含_id)。该函数支持db.collection.update(<query>,<update>,{option}),其中,collection为数据库中的集合;query为查询条件,根据需要进行设定,如步骤S112中设定的查询条件;update为更新对象和操作符,例如$set可设置对象的值,$inc增加对象的值等。option为选项,例如upsert(自动新增/更新)为true时,当匹配不到查询条件时,直接插入数据,默认为false,即匹配不到查询条件,不更新也不插入。
进一步的,以步骤S112的三种情况为例:
1、查询条件为t<lastTraDateTime且d=lastTraDate时,Spark更新MongoDB的函数为:
db.test.update({t:{$lt:lastTraDateTime},d:lastTraDate},{$inc:{TodayTraNum:1}});
即,更新今日交易笔数(TodayTraNum)对应的字段加1;test为数据库中对应的集合,$lt表示小于(less than)。
2、查询条件为t>lastTraDateTime且d=lastTraDate时,Spark更新MongoDB的函数为:
db.test.update({t:{$gt:lastTraDateTime},d:lastTraDate},{$set:{Bal:TraBal,lastTraDateTime:‘t’},$inc:{TodayTraNum:1}});
即,更新余额对应的字段(Bal)为交易后的余额(TraBal),更新今日交易笔数(TodayTraNum)对应的字段加1,更新最后一笔金融交易时间对应的字段(lastTraDateTime)为t;$gt表示大于(greater than)。
3、查询条件为d>lastTraDate时,Spark更新MongoDB的函数为:
db.test.update({d:{$gt:lastTraDate}},{$set:{Bal:TraBal,TodayTraNum:‘1’,lastTraDateTime:‘t’,lastTraDate:‘d’}});
即,更新余额对应的字段(Bal)为交易后的余额(TraBal),更新今日交易笔数(TodayTraNum)对应的字段为1,更新最后一笔金融交易时间对应的字段(lastTraDateTime)为t,更新最后一笔金融交易日期对应的字段(lastTraDate)为d。
在本实施例中,在执行步骤S130时,该方法还包括:
根据所述写入模型对更新操作的查询条件字段建立索引;
在对MongoDB进行批量更新时,利用所述索引在MongoDB进行条件字段的查询,查询完成后进行批量更新;通过建立合适的索引可以提高更新性能。
在实际应用中,在建立索引时,需要注意计算机的内存大小等因素,例如当内存装不下索引时,将会不断发生内存和磁盘交换,性能也将会受到影响。
利用上述批量更新MongoDB的方法,可以明显提升大数据下Spark按条件批量更新MongoDB的性能,不仅使得Spark Streaming能实时按条件更新MongoDB,不再造成消息堆积,还有效减少了MongoDB服务器端的压力。
需要说明的是,尽管在上述实施例及附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
在介绍了本发明示例性实施方式的方法之后,接下来,参考图3至图5对本发明示例性实施方式的非往返式的批量更新MongoDB的系统进行介绍。
非往返式的批量更新MongoDB的系统的实施可以参见上述方法的实施,重复之处不再赘述。以下所使用的术语“模块”或者“单元”,可以是实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
基于同一发明构思,本发明还提出了一种非往返式的批量更新MongoDB的系统,如图3所示,该系统包括:
操作识别模块310,用于识别数据库操作;
写入模型生成模块320,用于根据所述数据库操作生成写入模型;
批量更新模块330,用于调用预设的Spark更新MongoDB的函数,将所述写入模型放入批量更新操作中,对MongoDB进行批量更新。
在一实施例中,结合图4,为本发明一具体实施例的操作识别模块的架构示意图。如图4所示,操作识别模块310包括:实时消息获取单元311及操作识别单元312;其中,
所述实时消息获取单元311,用于获取实时消息;
所述操作识别单元312,用于根据预设条件和实时消息对应字段的值,对每一条实时消息生成对应的多个数据库操作;其中,
查询条件为t<lastTraDateTime且d=lastTraDate时,所述实时消息为当日的旧交易,数据库操作为更新今日交易笔数对应的字段加1;
其中,t为所述实时消息的时间戳;d为所述实时消息的交易日期;lastTraDateTime为集合中表示最后一笔金融交易时间的字段;lastTraDate为集合中表示最后一笔金融交易日期的字段;
查询条件为t>lastTraDateTime且d=lastTraDate时,所述实时消息为当日的新交易,数据库操作为更新余额对应的字段为交易后的余额,更新今日交易笔数对应的字段加1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t;
查询条件为d>lastTraDate时,所述实时消息为跨日的新交易,数据库操作为更新余额对应的字段为交易后的余额,更新今日交易笔数对应的字段为1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t,更新最后一笔金融交易日期对应的字段lastTraDate为d。
在一实施例中,所述写入模型生成模块320具体用于:
根据所述数据库操作生成互斥的写入模型;其中,所述写入模型是由Spark提供的写入MongoDB的基类模型。
在一实施例中,结合图5,为本发明另一实施例的非往返式的批量更新MongoDB的系统架构示意图。如图5所示,该系统还包括:
索引建立模块340,用于根据所述写入模型对更新操作的查询条件字段建立索引;
基于建立的索引,批量更新模块330还用于在对MongoDB进行批量更新时,利用所述索引在MongoDB进行条件字段的查询,查询完成后进行批量更新。
应当注意,尽管在上文详细描述中提及了非往返式的批量更新MongoDB的系统的若干模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
基于前述发明构思,如图6所示,本发明还提出了一种计算机设备600,包括存储器610、处理器620及存储在存储器610上并可在处理器620上运行的计算机程序630,所述处理器620执行所述计算机程序630时实现前述非往返式的批量更新MongoDB的方法。
在本发明另一实施例中,还提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现前述非往返式的批量更新MongoDB的方法。
利用本发明提出的批量更新MongoDB的方法及系统,能够按条件实时地批量更新MongoDB,通过非往返式的批量更新可以明显提升大数据下Spark按条件批量更新MongoDB的性能,并且在数据量大时可以满足实时性要求,在批量更新过程中不再造成消息堆积,有效减少了MongoDB服务器端的压力。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (8)

1.一种非往返式的批量更新MongoDB的方法,其特征在于,该方法包括:
识别数据库操作;
根据所述数据库操作生成写入模型;
调用预设的Spark更新MongoDB的函数,将所述写入模型放入批量更新操作中,对MongoDB进行批量更新;
其中,识别数据库操作,包括:
获取实时消息,根据预设条件和实时消息对应字段的值,对每一条实时消息生成对应的多个数据库操作;包括:
查询条件为t<lastTraDateTime且d=lastTraDate时,所述实时消息为当日的旧交易,数据库操作为更新今日交易笔数对应的字段加1;其中,t为所述实时消息的时间戳;d为所述实时消息的交易日期;lastTraDateTime为集合中表示最后一笔金融交易时间的字段;lastTraDate为集合中表示最后一笔金融交易日期的字段;
查询条件为t>lastTraDateTime且d=lastTraDate时,所述实时消息为当日的新交易,数据库操作为更新余额对应的字段为交易后的余额,更新今日交易笔数对应的字段加1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t;
查询条件为d>lastTraDate时,所述实时消息为跨日的新交易,数据库操作为更新余额对应的字段为交易后的余额,更新今日交易笔数对应的字段为1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t,更新最后一笔金融交易日期对应的字段lastTraDate为d;
其中,调用预设的Spark更新MongoDB的函数,将所述写入模型放入批量更新操作中,对MongoDB进行批量更新,包括:
对Spark更新MongoDB的函数进行拓展,使Spark支持UPDATE操作,用于根据任意字段更新MongoDB;该函数支持db.collection.update(<query>,<update>,{option}),其中,collection为数据库中的集合;query为查询条件,根据需要进行设定;update为更新对象和操作符,$set为设置对象的值,$inc为增加对象的值;option为选项;
Spark更新MongoDB的函数包括:
查询条件为t<lastTraDateTime且d=lastTraDate时,Spark更新MongoDB的函数为:
db.test.update({t:{$lt:lastTraDateTime},d:lastTraDate},{$inc:{TodayTraNum:1}});
函数表示,更新今日交易笔数TodayTraNum对应的字段加1;test为数据库中对应的集合,$lt表示小于;
查询条件为t>lastTraDateTime且d=lastTraDate时,Spark更新MongoDB的函数为:
db.test.update({t:{$gt:lastTraDateTime},d:lastTraDate},{$set:{Bal:TraBal,lastTraDateTime:‘t’},$inc:{TodayTraNum:1}});
函数表示,更新余额对应的字段Bal为交易后的余额TraBal,更新今日交易笔数TodayTraNum对应的字段加1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t;$gt表示大于;
查询条件为d>lastTraDate时,Spark更新MongoDB的函数为:
db.test.update({d:{$gt:lastTraDate}},{$set:{Bal:TraBal,TodayTraNum:‘1’,lastTraDateTime:‘t’,lastTraDate:‘d’}});
函数表示,更新余额对应的字段Bal为交易后的余额TraBal,更新今日交易笔数TodayTraNum对应的字段为1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t,更新最后一笔金融交易日期对应的字段lastTraDate为d。
2.根据权利要求1所述的非往返式的批量更新MongoDB的方法,其特征在于,根据所述数据库操作生成写入模型,还包括:
根据所述数据库操作生成互斥的写入模型;其中,所述写入模型是由Spark提供的写入MongoDB的基类模型。
3.根据权利要求2所述的非往返式的批量更新MongoDB的方法,其特征在于,该方法还包括:
根据所述写入模型对更新操作的查询条件字段建立索引;
在对MongoDB进行批量更新时,利用所述索引在MongoDB进行条件字段的查询,查询完成后进行批量更新。
4.一种非往返式的批量更新MongoDB的系统,其特征在于,该系统包括:
操作识别模块,用于识别数据库操作;
写入模型生成模块,用于根据所述数据库操作生成写入模型;
批量更新模块,用于调用预设的Spark更新MongoDB的函数,将所述写入模型放入批量更新操作中,对MongoDB进行批量更新;
其中,所述操作识别模块包括:实时消息获取单元及操作识别单元;
所述实时消息获取单元,用于获取实时消息;
所述操作识别单元,用于根据预设条件和实时消息对应字段的值,对每一条实时消息生成对应的多个数据库操作;包括:
查询条件为t<lastTraDateTime且d=lastTraDate时,所述实时消息为当日的旧交易,数据库操作为更新今日交易笔数对应的字段加1;其中,t为所述实时消息的时间戳;d为所述实时消息的交易日期;lastTraDateTime为集合中表示最后一笔金融交易时间的字段;lastTraDate为集合中表示最后一笔金融交易日期的字段;
查询条件为t>lastTraDateTime且d=lastTraDate时,所述实时消息为当日的新交易,数据库操作为更新余额对应的字段为交易后的余额,更新今日交易笔数对应的字段加1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t;
查询条件为d>lastTraDate时,所述实时消息为跨日的新交易,数据库操作为更新余额对应的字段为交易后的余额,更新今日交易笔数对应的字段为1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t,更新最后一笔金融交易日期对应的字段lastTraDate为d;
其中,所述批量更新模块具体用于:
对Spark更新MongoDB的函数进行拓展,使Spark支持UPDATE操作,用于根据任意字段更新MongoDB;该函数支持db.collection.update(<query>,<update>,{option}),其中,collection为数据库中的集合;query为查询条件,根据需要进行设定;update为更新对象和操作符,$set为设置对象的值,$inc为增加对象的值;option为选项;
Spark更新MongoDB的函数包括:
查询条件为t<lastTraDateTime且d=lastTraDate时,Spark更新MongoDB的函数为:
db.test.update({t:{$lt:lastTraDateTime},d:lastTraDate},{$inc:{TodayTraNum:1}});
函数表示,更新今日交易笔数TodayTraNum对应的字段加1;test为数据库中对应的集合,$lt表示小于;
查询条件为t>lastTraDateTime且d=lastTraDate时,Spark更新MongoDB的函数为:
db.test.update({t:{$gt:lastTraDateTime},d:lastTraDate},{$set:{Bal:TraBal,lastTraDateTime:‘t’},$inc:{TodayTraNum:1}});
函数表示,更新余额对应的字段Bal为交易后的余额TraBal,更新今日交易笔数TodayTraNum对应的字段加1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t;$gt表示大于;
查询条件为d>lastTraDate时,Spark更新MongoDB的函数为:
db.test.update({d:{$gt:lastTraDate}},{$set:{Bal:TraBal,TodayTraNum:‘1’,lastTraDateTime:‘t’,lastTraDate:‘d’}});
函数表示,更新余额对应的字段Bal为交易后的余额TraBal,更新今日交易笔数TodayTraNum对应的字段为1,更新最后一笔金融交易时间对应的字段lastTraDateTime为t,更新最后一笔金融交易日期对应的字段lastTraDate为d。
5.根据权利要求4所述的非往返式的批量更新MongoDB的系统,其特征在于,所述写入模型生成模块具体用于:
根据所述数据库操作生成互斥的写入模型;其中,所述写入模型是由Spark提供的写入MongoDB的基类模型。
6.根据权利要求5所述的非往返式的批量更新MongoDB的系统,其特征在于,该系统还包括:索引建立模块;其中,
所述索引建立模块,用于根据所述写入模型对更新操作的查询条件字段建立索引;
所述批量更新模块,还用于在对MongoDB进行批量更新时,利用所述索引在MongoDB进行条件字段的查询,查询完成后进行批量更新。
7.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至3任一所述方法。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至3任一所述方法。
CN202010385939.XA 2020-05-09 2020-05-09 非往返式的批量更新MongoDB的方法及系统 Active CN111563091B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010385939.XA CN111563091B (zh) 2020-05-09 2020-05-09 非往返式的批量更新MongoDB的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010385939.XA CN111563091B (zh) 2020-05-09 2020-05-09 非往返式的批量更新MongoDB的方法及系统

Publications (2)

Publication Number Publication Date
CN111563091A CN111563091A (zh) 2020-08-21
CN111563091B true CN111563091B (zh) 2023-04-28

Family

ID=72070920

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010385939.XA Active CN111563091B (zh) 2020-05-09 2020-05-09 非往返式的批量更新MongoDB的方法及系统

Country Status (1)

Country Link
CN (1) CN111563091B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105045656A (zh) * 2015-06-30 2015-11-11 深圳清华大学研究院 基于虚拟容器的大数据存储与管理方法
CN109241193A (zh) * 2018-09-26 2019-01-18 联想(北京)有限公司 分布式数据库的处理方法和装置,及服务器集群
CN110032558A (zh) * 2019-04-12 2019-07-19 重庆天蓬网络有限公司 一种数据同步方法、装置、系统及存储介质
EP3557435A1 (en) * 2018-04-19 2019-10-23 Risk Management Solutions, Inc. Data storage system for providing low latency search query responses

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105045656A (zh) * 2015-06-30 2015-11-11 深圳清华大学研究院 基于虚拟容器的大数据存储与管理方法
EP3557435A1 (en) * 2018-04-19 2019-10-23 Risk Management Solutions, Inc. Data storage system for providing low latency search query responses
CN109241193A (zh) * 2018-09-26 2019-01-18 联想(北京)有限公司 分布式数据库的处理方法和装置,及服务器集群
CN110032558A (zh) * 2019-04-12 2019-07-19 重庆天蓬网络有限公司 一种数据同步方法、装置、系统及存储介质

Also Published As

Publication number Publication date
CN111563091A (zh) 2020-08-21

Similar Documents

Publication Publication Date Title
CN108536761B (zh) 报表数据查询方法及服务器
CN107958010B (zh) 用于在线数据迁移的方法及系统
CN106649828B (zh) 一种数据查询方法及系统
CN107977396B (zh) 一种KeyValue数据库的数据表的更新方法与表数据更新装置
CN111553652B (zh) 业务处理方法及装置
CN113448752A (zh) 一种指标数据获取方法、装置、电子设备和存储介质
CN111159300A (zh) 基于区块链的数据处理方法及装置
CN112948473A (zh) 数据仓库的数据处理方法、装置、系统及存储介质
CN112035530B (zh) 一种分布式实时支付系统中的交易报文匹配方法及系统
CN111563091B (zh) 非往返式的批量更新MongoDB的方法及系统
CN109389271B (zh) 应用性能管理方法及系统
CN115687392A (zh) 一种sql语句的优化执行方法、装置、电子设备及介质
US20210141791A1 (en) Method and system for generating a hybrid data model
CN110266610B (zh) 流量识别方法、装置、电子设备
CN113656410A (zh) 一种订单存储方法及相关装置
CN110046172B (zh) 在线计算数据处理方法及系统
CN109739883B (zh) 提升数据查询性能的方法、装置和电子设备
CN111984662A (zh) 批量更新数据库的方法及装置
CN112286506B (zh) 数据关联方法、装置、服务器及存储介质
CN107566478B (zh) 数据推送方法、系统及计算机可读存储介质
CN116795835A (zh) 关联查询方法和装置
CN111753141B (zh) 一种数据管理方法及相关设备
CN114564538A (zh) 一种数据同步方法、装置、设备及存储介质
CN114416886A (zh) 一种确定数据关系的方法、装置、设备及存储介质
CN114328746A (zh) 数据管理方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant