CN114510490B - 提升数据库数据插入性能的方法和装置 - Google Patents
提升数据库数据插入性能的方法和装置 Download PDFInfo
- Publication number
- CN114510490B CN114510490B CN202210401408.4A CN202210401408A CN114510490B CN 114510490 B CN114510490 B CN 114510490B CN 202210401408 A CN202210401408 A CN 202210401408A CN 114510490 B CN114510490 B CN 114510490B
- Authority
- CN
- China
- Prior art keywords
- data
- cache
- distributed table
- database
- table name
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种提升数据库数据插入性能的方法和装置。其中,该方法应用于客户端,包括:响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与所述缓存中指定相同分布式表名的数据合并;判断缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值,并判断定时器是否达到预先设定的时间阈值;若缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,将缓存中指定分布式表名的数据插入数据库。本发明可以减少数据库对高并发的处理,提高数据插入的效率,节省数据插入对数据库的资源消耗,提升数据库数据插入的性能。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种提升数据库数据插入性能的方法和装置。
背景技术
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。在将数据插入ClickHouse中的分布式表时,客户端只需要指定插入数据的分布式表名。ClickHouse在接收到数据后会在对应的数据表的目录下生成缓存目录,在缓存目录下将对应的插入数据以二进制bin文件的形式缓存起来,并返回客户端插入成功的信息。缓存后的bin文件会再进行处理。处理缓存文件有两种方式:一种是将bin文件逐个处理,每个bin文件作为一次插入的数据,将数据读取并写入分布式表;另一种是在插入数据的同时,将多个缓存的bin文件合并成一个bin文件。逐个处理bin文件作为一批次插入的数据,写入分布式表。
客户端每一次插入数据都直接与ClickHouse连接,这样一方面会造成ClickHouse的压力过大,需要对每一次数据插入进行响应,如果连接很多客户端ClickHouse的CPU内存资源会被大量消耗,导致ClickHouse负载过高;另一方面如果每一次插入的数据量很少但插入数据的频率很高会导致生成大量的临时缓存文件,ClickHouse需要大量的资源与时间处理这些临时的缓存文件。导致数据真正插入的时间被延迟。
发明内容
本发明提供一种提升数据库数据插入性能的方法和装置,用以解决现有技术ClickHouse负载过高,资源消耗大,数据插入效率低的缺陷,可以减少数据库对高并发的处理,提高数据插入的效率,节省数据插入对数据库的资源消耗,提升数据库数据插入的性能。
第一方面,本发明提供一种提升数据库数据插入性能的方法,应用于客户端,包括:
响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与所述缓存中指定相同分布式表名的数据合并;
判断所述缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值,并判断定时器是否达到预先设定的时间阈值;其中,所述定时器是在所述缓存中存入第一个指定分布式表名的数据时开始计时;
若所述缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,将所述缓存中指定分布式表名的数据插入所述数据库。
根据本发明提供的提升数据库数据插入性能的方法,所述响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与所述缓存中指定相同分布式表名的数据合并,包括:
响应于向数据库中的分布式表插入数据,基于所插入数据指定的分布式表名,判断所述缓存中是否存在指定相同分布式表名的数据;
若所述缓存中存在指定相同分布式表名的数据,则基于所指定的分布式表名,将所插入数据与所述缓存中指定相同分布式表名的数据合并;
若所述缓存中不存在指定相同分布式表名的数据,则将所插入数据及其所指定的分布式表名保存于所述缓存中。
根据本发明提供的提升数据库数据插入性能的方法,所述响应于向数据库的分布式表插入数据,基于所插入数据指定的分布式表名,判断所述缓存中是否存在指定相同分布式表名的数据,包括:
响应于向数据库中的分布式表插入数据,基于所插入数据指定的分布式表名,判断所述缓存中的map数据结构中是否存在相同分布式表名的key值;
若所述缓存中存在指定相同分布式表名的数据,则将所插入数据与所述缓存中指定相同分布式表名的数据合并,包括:
若所述缓存中的map数据结构中存在相同分布式表名的key值,则将所插入数据与所述map数据结构中所述相同分布式表名的key值对应的value值合并;
若所述缓存中不存在指定相同分布式表名的数据,则将所插入数据及其所指定的分布式表名保存于所述缓存中,包括:
若所述缓存中的map数据结构中不存在相同分布式表名的key值,则将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在所述map数据结构中创建key-value对。
根据本发明提供的提升数据库数据插入性能的方法,所述响应于向数据库中的分布式表插入数据,基于所插入数据指定的分布式表名,判断所述缓存中的map数据结构中是否存在相同分布式表名的key值,包括:
响应于向数据库中的分布式表插入数据,判断所述缓存中是否存在所述map数据结构;
若所述缓存中存在所述map数据结构,则基于所插入数据指定的分布式表名,判断所述缓存中的所述map数据结构中是否存在相同分布式表名的key值;
若所述缓存中不存在所述map数据结构,则在所述缓存中创建所述map数据结构,将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在所述map数据结构中创建key-value对,并启动所述定时器开始计时。
根据本发明提供的提升数据库数据插入性能的方法,将所述缓存中指定分布式表名的数据插入所述数据库之后,还包括:
删除所述缓存中插入所述数据库的指定分布式表名的数据,并停止所述定时器将所述定时器清零。
根据本发明提供的提升数据库数据插入性能的方法,删除所述缓存中插入所述数据库的指定分布式表名的数据,并停止所述定时器将所述定时器清零之前,还包括:
响应于接收到所述数据库反馈的数据插入成功的信息,生成记录数据插入成功的日志。
根据本发明提供的提升数据库数据插入性能的方法,删除所述缓存中插入所述数据库的指定分布式表名的数据,并停止所述定时器将所述定时器清零之前,还包括:
响应于接收到所述数据库反馈的数据插入失败的信息,判断数据插入失败的次数是否达到预先设置的次数阈值;
若数据插入失败的次数达到预先设置的次数阈值,则生成记录数据插入失败的日志;
若数据插入失败的未达到预先设置的次数阈值,则将所述缓存中指定分布式表名的数据插入所述数据库。
第二方面,本发明还提供一种提升数据库数据插入性能的装置,应用于客户端,包括:
存储模块,用于响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与所述缓存中指定相同分布式表名的数据合并;
第一判断模块,用于判断所述缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值,并判断定时器是否达到预先设定的时间阈值;其中,所述定时器是在所述缓存中存入第一个指定分布式表名的数据时开始计时;
插入模块,用于根据所述第一判断模块的判断结果,若所述缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,将所述缓存中指定分布式表名的数据插入所述数据库。
第三方面,本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述升数据库数据插入性能的方法的步骤。
第四方面,发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述升数据库数据插入性能的方法的步骤。
第五方面,发明还提供一种计算机程序产品,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述升数据库数据插入性能的方法的步骤。
本发明提供的提升数据库数据插入性能的方法和装置,通过在客户端设置缓存机制,利用客户端对插入数据库中的分布式表的数据进行缓存,可以降低数据库对客户端的响应次数,减少数据库对高并发的处理,利用客户端根据指定的分布式表名对缓存的数据进行合并,并且通过预先设定的时间阈值,可以保证一段时间内缓存的数据一定会被插入数据库,通过预先设定的数据量阈值,可以保证每一次插入数据库的数据量足够大小,可以提高数据插入数据库的效率,节省数据插入对数据库的资源消耗,提升数据库数据插入的性能。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的提升数据库数据插入性能的方法的流程示意图;
图2是本发明提供的一将所插入数据及其指定的分布式表名保存于缓存中的流程示意图;
图3是本发明提供的另一将所插入数据及其指定的分布式表名保存于缓存中的流程示意图;
图4是本发明提供的另一提升数据库数据插入性能的方法的流程示意图;
图5是客户端采用本发明提供的提升数据库数据插入性能的方法向ClickHouse数据库插入数据的一应用场景的示意图;
图6是图5中客户端向ClickHouse数据库插入数据的流程示意图
图7是本发明提供的提升数据库数据插入性能的装置的组成结构示意图;
图8是本发明提供的电子设备的组成结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图5描述本发明的提升数据库数据插入性能的方法。
请参阅图1,图1是本发明提供的提升数据库数据插入性能的方法的流程示意图,图1所示的提升数据库数据插入性能的方法应用于客户端,可以由客户端设置的提升数据库数据插入性能的装置执行,例如客户端可以为智能手机、台式计算机、笔记型计算机、车载计算机、可穿戴式设备、机器人等,本发明实施例对此不作限定。如图1所示,该提升数据库数据插入性能的方法至少包括:
101,响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与缓存中指定相同分布式表名的数据合并。
在本发明实施例中,数据库可以为由计算机集群组成的分布式数据库,例如ClickHouse等,本发明实施例对分布式数据库的类型不作限定,在分布式数据库包括本地表和分布式表,其中,分布式表为一个逻辑上的表,可以理解为数据库中的视图,本地表为实际存储数据的表。在客户端向分布式数据库中指定分布式表名的分布式表插入数据时,客户端可以将所插入数据及其指定的分布式表名保存于客户端的缓存中,若在客户端的缓存中存在与所插入数据指定相同分布式表名的数据,可以根据所指定的分布式表名,将所插入数据与客户端缓存中指定相同分布式表名的数据合并。
可选地,客户端响应于向数据库中的分布式表插入数据,可以基于所插入数据指定的分布式表名,判断缓存中是否存在指定相同分布式表名的数据;若缓存中存在指定相同分布式表名的数据,则将所插入数据与缓存中指定相同分布式表名的数据合并;若缓存中不存在指定相同分布式表名的数据,则将所插入数据及其所指定的分布式表名保存于缓存中。
在本发明实施例中,客户端向分布式数据库中指定分布式表名的分布式表插入的数据量可以很少,插入数据的频率可以很高。本发明实施例对客户端向分布式数据库中指定分布式表名的分布式表插入数据的类型和插入数据的实现方式不作限定,例如,客户端可以将实时采集的网络游戏数据,包括在线用户人数、玩家等级、玩家类型、玩家时间等,实时向分布式数据库中指定分布式表名的分布式表插入。
102,判断缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值。
103,判断定时器是否达到预先设定的时间阈值。
若缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,则执行104;否则,执行101。
104,将缓存中指定分布式表名的数据插入数据库。
在本发明实施例中,在客户端可以预先设定数据量阈值和时间阈值,客户端在将向分布式数据库中指定分布式表名的分布式表插入的数据及其指定的分布式表名保存于缓存中,并与缓存中指定相同分布式表名的数据合并之后,可以根据预先设定的数据量阈值,判断客户端缓存中指定分布式表名的数据量是否达到该预先设定的数据量阈值,以及根据预先设定的时间阈值,判断定时器是否达到该预先设定的时间阈值。
若客户端缓存中指定分布式表名的数据量达到该预先设定的数据量阈值,而定时器未达到该预先设定的时间阈值,客户端可以将缓存中所有指定分布式表名的数据插入分布式数据库。若定时器达到该预先设定的时间阈值,而客户端缓存中指定分布式表名的数据量未达到该预先设定的数据量阈值,客户端可以将缓存中所有指定分布式表名的数据插入分布式数据库。若客户端缓存中指定分布式表名的数据量达到该预先设定的数据量阈值,并且定时器达到该预先设定的时间阈值,客户端可以将缓存中所有指定分布式表名的数据插入分布式数据库。也就是说,两个条件中至少有一个满足时,客户端就会将缓存中所有指定分布式表名的数据插入分布式数据库。
若客户端缓存中指定分布式表名的数据量未达到该预先设定的数据量阈值,并且定时器未达到该预先设定的时间阈值,客户端将继续响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与缓存中指定相同分布式表名的数据合并。其中,定时器是在客户端缓存中每次存入第一个指定分布式表名的数据时开始计时。
本发明实施例对客户端向分布式数据库中插入指定分布式表名的数据的实现方式不作限定,例如,分布式数据库为ClickHouse,客户端可以通过调用 Java数据库连接(Java Database Connectivity,简称JDBC)接口将缓存中所有指定分布式表名的数据插入ClickHouse。本发明实施例对客户端预先设定的数据量阈值和时间阈值的大小不作限定,例如,可以根据客户端的类型、应用场景等确定数据量阈值和时间阈值的大小。
可选地,客户端在将缓存中指定分布式表名的数据插入数据库之后,还可以删除缓存中插入数据库的指定分布式表名的数据,并停止定时器将定时器清零。
本发明实施例提供的提升数据库数据插入性能的方法,通过在客户端设置缓存机制,利用客户端对插入数据库中的分布式表的数据进行缓存,可以降低数据库对客户端的响应次数,减少数据库对高并发的处理,利用客户端根据指定的分布式表名对缓存的数据进行合并,并且通过预先设定的时间阈值,可以保证一段时间内缓存的数据一定会被插入数据库,通过预先设定的数据量阈值,可以保证每一次插入数据库的数据量足够大小,可以提高数据插入数据库的效率,节省数据插入对数据库的资源消耗,提升数据库数据插入的性能。
请参阅图2,图2是本发明提供的一将所插入数据及其指定的分布式表名保存于缓存中的流程示意图,如图2所示,将所插入数据及其指定的分布式表名保存于缓存中至少包括:
201,响应于向数据库中的分布式表插入数据,基于所插入数据指定的分布式表名,判断缓存中的map数据结构中是否存在相同分布式表名的key值。
若缓存中的map数据结构中存在相同分布式表名的key值,则执行202;若缓存中的map数据结构中不存在相同分布式表名的key值,则执行203。
202,将所插入数据与map数据结构中相同分布式表名的key值对应的value值合并。
203,将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在map数据结构中创建key-value对。
在本发明实施例中,可以通过在客户端的缓存中创建map数据结构来保存客户端向数据库中的分布式表插入的数据及其指定的分布式表名,由于map数据结构是key-value对集合,可以以key-value对中的key值保存插入分布式数据库中分布式表的数据指定的分布式表名,可以以key-value对中的value值保存对应的插入分布式数据库中分布式表的数据。可以根据预先设定的规则在客户端开始向分布式数据库插入数据之前,在客户端的缓存中创建map数据结构,例如,可以根据客户端启动游戏软件,在客户端的缓存中创建map数据结构,本发明实施例对在客户端的缓存中创建map数据结构的实现方式不作限定。
在本发明实施例中,在客户端响应于向分布式数据库中的分布式表插入数据时,客户端可以根据所插入数据指定的分布式表名,判断缓存中的map数据结构中是否存在相同分布式表名的key值。若缓存中的map数据结构中存在相同分布式表名的key值,则可以将所插入数据与map数据结构中相同分布式表名的key值对应的value值合并,实现对插入分布式数据库中的分布式表的数据及其指定的分布式表名的保存。若缓存中的map数据结构中不存在相同分布式表名的key值,则可以将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在map数据结构中创建key-value对,实现对插入分布式数据库中的分布式表的数据及其指定的分布式表名的保存。
本实施例通过在客户端的缓存中采用map数据结构保存向数据库中的分布式表插入的数据及其指定的分布式表名,利用map数据结构中key-value对的形式方便建立起数据与指定的分布式表名之间的对应关系,利用key值的唯一性可以满足对指定相同分布式表名的数据进行合并的需求,其数据存储方式灵活、简单、适合查找。
请参阅图3,图3是本发明提供的另一将所插入数据及其指定的分布式表名保存于缓存中的流程示意图,如图3所示,将所插入数据及其指定的分布式表名保存于缓存中至少包括:
301,响应于向数据库中的分布式表插入数据,判断缓存中是否存在map数据结构。
若缓存中存在map数据结构,则执行302;若缓存中不存在map数据结构,则执行305。
302,基于所插入数据指定的分布式表名,判断缓存中的map数据结构中是否存在相同分布式表名的key值。
若缓存中的map数据结构中存在相同分布式表名的key值,则执行303;若缓存中的map数据结构中不存在相同分布式表名的key值,则执行304。
303,将所插入数据与map数据结构中相同分布式表名的key值对应的value值合并。
304,将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在map数据结构中创建key-value对。
305,在缓存中创建map数据结构,将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在map数据结构中创建key-value对,并启动定时器开始计时。
在本发明实施例中,在通过在客户端的缓存中创建map数据结构来保存客户端向数据库中的分布式表插入的数据及其指定的分布式表名时,可以在客户端开始向分布式数据库插入数据时,在客户端的缓存中创建map数据结构,客户端可以在每一次响应于向分布式数据库中的分布式表插入数据时,首先判断缓存中是否存在map数据结构;若缓存中存在map数据结构,则客户端可以根据所插入数据指定的分布式表名,进一步判断缓存中的map数据结构中是否存在相同分布式表名的key值;若缓存中不存在map数据结构,则客户端可以在缓存中创建map数据结构,将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在map数据结构中创建key-value对,并启动定时器开始计时。
在本发明实施例中,关于302、303和304的说明可以参见图2中关于201、202和203的说明,故此处不再复述。
本实施例通过客户端在向缓存中保存向数据库中的分布式表插入的数据及其指定的分布式表名时,在客户端的缓存中创建map数据结构,可以保证对客户端缓存合理、有效的利用,避免提前在客户端的缓存中创建map数据结构对客户端缓存在占用。
请参阅图4,图4是本发明提供的另一提升数据库数据插入性能的方法的流程示意图,如图4所示,该提升数据库数据插入性能的方法至少包括:
401,响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与缓存中指定相同分布式表名的数据合并。
402,判断缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值。
403,判断定时器是否达到预先设定的时间阈值。
若缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,则执行404;否则,执行401。
404,将缓存中指定分布式表名的数据插入数据库。
405,响应于接收到数据库反馈的数据插入成功的信息,生成记录数据插入成功的日志。
406,响应于接收到数据库反馈的数据插入失败的信息,判断数据插入失败的次数是否达到预先设置的次数阈值。
若数据插入失败的次数达到预先设置的次数阈值,则执行407;若数据插入失败的未达到预先设置的次数阈值,则执行404。
407,生成记录数据插入失败的日志。
408,删除缓存中插入数据库的指定分布式表名的数据,并停止定时器将定时器清零。
在本发明实施例中,关于401、402、403和404的说明可以参见图1中关于101、102、103和104的说明,故此处不再复述。
在本发明实施例中,客户端在将缓存中保存的所有指定分布式表名的数据插入分布式数据库之后,可以根据数据库反馈的数据插入成功的信息,在客户端可以生成记录本次数据插入成功的日志,或者也可以根据数据库反馈的数据插入失败的信息,通过判断数据插入失败的次数是否达到预先设置的次数阈值,在数据插入失败的次数达到预先设置的次数阈值时,在客户端可以生成记录本次数据插入失败的日志,在数据插入失败的次数未达到预先设置的次数阈值时,客户端可以将缓存中保存的所有指定分布式表名的数据继续插入分布式数据库,并且在客户端生成记录本次数据插入成功的日志或者记录本次数据插入失败的日志之后,客户端可以删除缓存中所保存的插入分布数据库的指定分布式表名的数据,并停止定时器将定时器清零。本发明实施例对预先设置的次数阈值的次数不作限定,例如,预先设置的次数阈值可以为3次。
请参阅图5和图6,图5是客户端采用本发明提供的提升数据库数据插入性能的方法向ClickHouse数据库插入数据的一应用场景的示意图,图6是图5中客户端向ClickHouse数据库插入数据的流程示意图,如图5所示,在客户端的JDBC驱动中设置分布式表插入的缓存机制。如图6所示,在客户端通过JDBC驱动中设置的分布式表插入的缓存机制向ClickHouse数据库中的分布式表插入数据的步骤包括:
步骤一:客户端按照现有方式向ClickHouse数据库中的分布式表插入数据;
步骤二:客户端调用JDBC接口插入数据;
步骤三:客户端判断缓存中是否存在保存插入数据的map数据结构;
如果存在map数据结构,则跳转到步骤四;
如果不存在map数据结构,则跳转到步骤十二;
步骤四:根据插入数据指定的分布式表名,判断map中是存在该指定的分布式表名的key值;
如果存在该指定的分布式表名的key值,则跳转到步骤五;
如果不存在该指定的分布式表名的key值,则跳转到步骤十三;
步骤五:将新插入的数据与缓存的map数据结构中相同key值对应的value值合并;
步骤六:判断map数据结构中的插入数据量是否达到用户设置的数据量阈值;
如果达到用户设置的数据量阈值,则跳转到步骤七;
如果未达到用户设置的数据量阈值,则不做处理;
步骤七:将本批次数据插入ClickHouse数据库,将map数据结果中的数据删除,将对应的定时器清零;
步骤八:判断本批次数据插入是否成功;
如果插入成功,则跳转到步骤九;
如果插入失败,则跳转到步骤十;
步骤九:记录本批次数据插入成功日志
步骤十:判断本次插入失败是否为第3次插入失败;
如果是第3次插入失败,则跳转到步骤十一;
如果不是第3次插入失败,则跳转到步骤七;
步骤十一:记录本批次数据插入失败的日志;
步骤十二:在缓存中创建保存插入数据的map数据结构,在map数据结构中key为表名,value为插入数据;
步骤十三:以表名为key,插入数据为value,将将插入数据保存到map数据结构中;
步骤十四:启动表名对应的定时器,定时时间为用户设置的缓存时间。定时器触发时跳转到步骤七。
下面对本发明提供的提升数据库数据插入性能的装置进行描述,下文描述的提升数据库数据插入性能的装置与上文描述的提升数据库数据插入性能的方法可相互对应参照。
请参阅图7,图7是本发明提供的提升数据库数据插入性能的装置的组成结构示意图,图7所示的提升数据库数据插入性能的装置应用于客户端,可以用来执行图1的提升数据库数据插入性能的方法,如图7所示,该提升数据库数据插入性能的装置至少包括:
存储模块710,用于响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与缓存中指定相同分布式表名的数据合并。
第一判断模块720,用于判断缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值,并判断定时器是否达到预先设定的时间阈值;其中,定时器是在缓存中存入第一个指定分布式表名的数据时开始计时。
插入模块730,用于根据第一判断模块720的判断结果,若缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,将缓存中指定分布式表名的数据插入数据库。
可选地,存储模块710包括:
第一判断单元,用于响应于向数据库中的分布式表插入数据,基于所插入数据指定的分布式表名,判断缓存中是否存在指定相同分布式表名的数据。
第一存储单元,用于根据第一判断单元的判断结果,若缓存中存在指定相同分布式表名的数据,则基于所指定的分布式表名,将所插入数据与缓存中指定相同分布式表名的数据合并。
第二存储单元,用于根据第一判断单元的判断结果,若缓存中不存在指定相同分布式表名的数据,则将所插入数据及其所指定的分布式表名保存于缓存中。
可选地,第一判断单元,用于响应于向数据库中的分布式表插入数据,基于所插入数据指定的分布式表名,判断缓存中的map数据结构中是否存在相同分布式表名的key值。
第一存储单元,用于根据第一判断单元的判断结果,若缓存中的map数据结构中存在相同分布式表名的key值,则将所插入数据与map数据结构中相同分布式表名的key值对应的value值合并。
第二存储单元,用于根据第一判断单元的判断结果,若缓存中的map数据结构中不存在相同分布式表名的key值,则将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在map数据结构中创建key-value对。
可选地,存储模块710还包括:
第二判断单元,用于响应于向数据库中的分布式表插入数据,判断缓存中是否存在map数据结构。
第一判断单元,还用于根据第二判断单元的判断结果,若缓存中存在map数据结构,则基于所插入数据指定的分布式表名,判断缓存中的map数据结构中是否存在相同分布式表名的key值。
第二存储单元,还用于根据第二判断单元的判断结果,若缓存中不存在map数据结构,则在缓存中创建map数据结构,将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在map数据结构中创建key-value对,并启动定时器开始计时。
可选地,该提升数据库数据插入性能的装置还包括:
清理模块,用于删除缓存中插入数据库的指定分布式表名的数据,并停止定时器将定时器清零。
可选地,该提升数据库数据插入性能的装置还包括:
日志模块,用于响应于接收到数据库反馈的数据插入成功的信息,生成记录数据插入成功的日志。
可选地,该提升数据库数据插入性能的装置还包括:
第二判断模块,用于响应于接收到数据库反馈的数据插入失败的信息,判断数据插入失败的次数是否达到预先设置的次数阈值。
日志模块,还用于根据第二判断模块的判断结果,若数据插入失败的次数达到预先设置的次数阈值,则生成记录数据插入失败的日志。
插入模块730,还用于根据第二判断模块的判断结果,若数据插入失败的未达到预先设置的次数阈值,则将缓存中指定分布式表名的数据插入数据库。
图8示例了一种电子设备的实体结构示意图,如图8所示,该电子设备可以包括:处理器(processor)810、通信接口(CommunicationsInterface)820、存储器(memory)830和通信总线840,其中,处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。处理器810可以调用存储器830中的逻辑指令,以执行提升数据库数据插入性能的方法,该方法包括:
响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与所述缓存中指定相同分布式表名的数据合并;
判断所述缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值,并判断定时器是否达到预先设定的时间阈值;其中,所述定时器是在所述缓存中存入第一个指定分布式表名的数据时开始计时;
若所述缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,将所述缓存中指定分布式表名的数据插入所述数据库。
此外,上述的存储器830中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各实施例所提供的提升数据库数据插入性能的方法,该方法包括:
响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与所述缓存中指定相同分布式表名的数据合并;
判断所述缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值,并判断定时器是否达到预先设定的时间阈值;其中,所述定时器是在所述缓存中存入第一个指定分布式表名的数据时开始计时;
若所述缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,将所述缓存中指定分布式表名的数据插入所述数据库。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的提升数据库数据插入性能的方法,该方法包括:
响应于向数据库中的分布式表插入数据,将所插入数据及其指定的分布式表名保存于缓存中,并基于所指定的分布式表名,将所插入数据与所述缓存中指定相同分布式表名的数据合并;
判断所述缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值,并判断定时器是否达到预先设定的时间阈值;其中,所述定时器是在所述缓存中存入第一个指定分布式表名的数据时开始计时;
若所述缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,将所述缓存中指定分布式表名的数据插入所述数据库。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (7)
1.一种提升数据库数据插入性能的方法,其特征在于,应用于客户端,包括:
响应于向数据库中的分布式表插入数据,判断缓存中是否存在map数据结构;
若缓存中存在map数据结构,则基于所插入数据指定的分布式表名,判断所述缓存中的所述map数据结构中是否存在相同分布式表名的key值;
若缓存中不存在map数据结构,则在所述缓存中创建所述map数据结构,将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在所述map数据结构中创建key-value对,并启动定时器开始计时;
若所述缓存中的map数据结构中存在相同分布式表名的key值,则将所插入数据与所述map数据结构中所述相同分布式表名的key值对应的value值合并;
若所述缓存中的map数据结构中不存在相同分布式表名的key值,则将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在所述map数据结构中创建key-value对;
判断所述缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值,并判断定时器是否达到预先设定的时间阈值;其中,所述定时器是在所述缓存中存入第一个指定分布式表名的数据时开始计时;
若所述缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,将所述缓存中指定分布式表名的数据插入所述数据库。
2.根据权利要求1所述的提升数据库数据插入性能的方法,其特征在于,将所述缓存中指定分布式表名的数据插入所述数据库之后,还包括:
删除所述缓存中插入所述数据库的指定分布式表名的数据,并停止所述定时器将所述定时器清零。
3.根据权利要求2所述的提升数据库数据插入性能的方法,其特征在于,删除所述缓存中插入所述数据库的指定分布式表名的数据,并停止所述定时器将所述定时器清零之前,还包括:
响应于接收到所述数据库反馈的数据插入成功的信息,生成记录数据插入成功的日志。
4.根据权利要求2所述的提升数据库数据插入性能的方法,其特征在于,删除所述缓存中插入所述数据库的指定分布式表名的数据,并停止所述定时器将所述定时器清零之前,还包括:
响应于接收到所述数据库反馈的数据插入失败的信息,判断数据插入失败的次数是否达到预先设置的次数阈值;
若数据插入失败的次数达到预先设置的次数阈值,则生成记录数据插入失败的日志;
若数据插入失败的未达到预先设置的次数阈值,则将所述缓存中指定分布式表名的数据插入所述数据库。
5.一种提升数据库数据插入性能的装置,其特征在于,应用于客户端,包括:
第二判断单元,用响应于向数据库中的分布式表插入数据,判断缓存中是否存在map数据结构;
第一判断单元,还用于根据所述第二判断单元的判断结果,若缓存中存在map数据结构,则基于所插入数据指定的分布式表名,判断所述缓存中的所述map数据结构中是否存在相同分布式表名的key值;
第二存储单元,用于根据所述第二判断单元的判断结果,若缓存中不存在map数据结构,则在所述缓存中创建所述map数据结构,将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在所述map数据结构中创建key-value对,并启动定时器开始计时;
第一存储单元,用于根据所述第一判断单元的判断结果,若所述缓存中的map数据结构中存在相同分布式表名的key值,则将所插入数据与所述map数据结构中所述相同分布式表名的key值对应的value值合并;
所述第二存储单元,还用于根据所述第一判断单元的判断结果,若所述缓存中的map数据结构中不存在相同分布式表名的key值,则将所插入数据指定的分布式表名作为key值,所插入数据作为对应的value值,在所述map数据结构中创建key-value对;
第一判断模块,用于判断所述缓存中指定分布式表名的数据量是否达到预先设定的数据量阈值,并判断定时器是否达到预先设定的时间阈值;其中,所述定时器是在所述缓存中存入第一个指定分布式表名的数据时开始计时;
插入模块,用于根据所述第一判断模块的判断结果,若所述缓存中指定分布式表名的数据量达到预先设定的数据量阈值,或者定时器达到预先设定的时间阈值,将所述缓存中指定分布式表名的数据插入所述数据库。
6.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至4任一项所述升数据库数据插入性能的方法的步骤。
7.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述升数据库数据插入性能的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210401408.4A CN114510490B (zh) | 2022-04-18 | 2022-04-18 | 提升数据库数据插入性能的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210401408.4A CN114510490B (zh) | 2022-04-18 | 2022-04-18 | 提升数据库数据插入性能的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114510490A CN114510490A (zh) | 2022-05-17 |
CN114510490B true CN114510490B (zh) | 2022-08-02 |
Family
ID=81555478
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210401408.4A Active CN114510490B (zh) | 2022-04-18 | 2022-04-18 | 提升数据库数据插入性能的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114510490B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104050276A (zh) * | 2014-06-26 | 2014-09-17 | 北京思特奇信息技术股份有限公司 | 一种分布式数据库的缓存处理方法及系统 |
WO2019130289A1 (en) * | 2017-12-28 | 2019-07-04 | Cyberbit Ltd. | A database throttling system and method |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8195605B2 (en) * | 2006-10-27 | 2012-06-05 | Purdue Pharma L.P. | Data cache techniques in support of synchronization of databases in a distributed environment |
CN101276364B (zh) * | 2007-03-30 | 2010-12-22 | 阿里巴巴集团控股有限公司 | 一种分布式计算数据合并方法、系统及其装置 |
CN113051250A (zh) * | 2021-03-24 | 2021-06-29 | 北京金山云网络技术有限公司 | 数据库集群的扩容方法和装置、电子设备和存储介质 |
-
2022
- 2022-04-18 CN CN202210401408.4A patent/CN114510490B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104050276A (zh) * | 2014-06-26 | 2014-09-17 | 北京思特奇信息技术股份有限公司 | 一种分布式数据库的缓存处理方法及系统 |
WO2019130289A1 (en) * | 2017-12-28 | 2019-07-04 | Cyberbit Ltd. | A database throttling system and method |
Non-Patent Citations (1)
Title |
---|
ClickHouse最佳实战之分布表写入流程分析;九师兄;《CSDN clickhouse》;20210201;第1-6页 * |
Also Published As
Publication number | Publication date |
---|---|
CN114510490A (zh) | 2022-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391628B (zh) | 数据同步方法及装置 | |
US7853770B2 (en) | Storage system, data relocation method thereof, and recording medium that records data relocation program | |
CN112084161B (zh) | 基于数据库的数据处理方法、装置以及可读存储介质 | |
CN110309122B (zh) | 获取增量数据的方法、装置、服务器和存储介质 | |
CN107153643B (zh) | 数据表连接方法及装置 | |
US11868333B2 (en) | Data read/write method and apparatus for database | |
CN105653635A (zh) | 数据库管理方法与装置 | |
CN113239012B (zh) | 一种数据库迁移方法、装置、电子设备和存储介质 | |
CN111385294B (zh) | 数据处理方法、系统、计算机设备和存储介质 | |
CN109947712A (zh) | 计算框架内自动合并文件的方法、系统、设备及介质 | |
CN111488736A (zh) | 自学习分词方法、装置、计算机设备和存储介质 | |
CN111913913B (zh) | 访问请求的处理方法和装置 | |
CN114510490B (zh) | 提升数据库数据插入性能的方法和装置 | |
CN115114232A (zh) | 一种历史版本对象列举方法、装置及其介质 | |
CN112363841B (zh) | 应用进程的查杀方法、装置、电子设备及存储介质 | |
CN112487028A (zh) | 服务器数据存储的方法、系统、电子装置和存储介质 | |
CN117632860A (zh) | 基于Flink引擎的小文件合并方法、装置及电子设备 | |
CN110851437A (zh) | 一种存储方法、装置及设备 | |
CN112000289B (zh) | 全闪存储服务器系统数据管理方法及相关组件 | |
CN112402955B (zh) | 游戏日志记录方法及系统 | |
CN110908821B (zh) | 任务失败管理的方法、装置、设备和存储介质 | |
CN109522124B (zh) | 存储管理系统加载方法、装置、设备及可读存储介质 | |
CN113434344A (zh) | 文件存储方法、装置、计算设备及计算机存储介质 | |
CN115062044B (zh) | 一种数据查询方法、装置、设备及存储介质 | |
CN111930735A (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 |