本发明属于数据库应用技术领域,特别涉及一种分布式内存数据库长连接使用的实现方法及系统、电子设备、存储介质。
背景技术:
随着通讯技术的发展,电信行业也取得突飞猛进的发展,需要接入大量电信行业的数据来进行分析和处理,对数据采集平台提出了很高的要求,既要实现大量的实时数据快速采集,同时又要快速存储到数据库。现有的分布式内存数据库通过单例模式建立连接后,后续发起建立连接会获取之前已经建立的连接,达到长连接效果,此连接如果遇到执行内存数据库操作的并发请求,内存数据库连接将会失效。
技术实现要素:
针对内存数据库通过单例模式建立连接后,若内存数据库遇到并发请求,则之前内存数据库连接将会失效的问题,本发明提供一种分布式内存数据库长连接使用的实现方法及系统、电子设备、存储介质。
一种分布式内存数据库长连接使用的实现方法包括:
编写数据库连接类,且建立所述数据库连接类与内存数据库的连接;
用装饰器装饰所述数据库连接类,使得所述数据库连接类与不同所述内存数据库建立的连接实例存储在所述装饰器内,或从所述装饰器直接获取已经存储的连接实例;
在所述数据库连接类中设有线程模块,所述线程模块中的lock在执行所述数据库连接类与一个所述内存数据库建立连接时上锁,执行完毕或异常释放锁。
优选的是,所述数据库连接类通过python驱动建立与所述内存数据库的连接。
优选的是,所述编写数据库连接类,且建立所述数据库连接类与内存数据库的连接的步骤包括:
定义数据库连接类,并将用户名称、用户密码、内存数据库名称参数传入所述数据库连接类中,与所述内存数据库建立连接。
优选的是,所述数据库连接类与不同所述内存数据库建立的连接实例存储在所述装饰器内,或从所述装饰器直接获取已经存储的连接实例的步骤包括:
当所述数据库连接类与所述内存数据库建立连接时,判断所述装饰器内是否存在与所述内存数据库连接时建立的连接实例;若不存在,则建立所述连接实例并存储在所述装饰器内;若存在,则直接调用所述连接实例。
优选的是,所述线程模块中的lock在执行所述数据库连接与一个所述内存数据库建立连接时上锁,执行完毕或异常释放锁的步骤为:
所述线程模块用于获取所述数据库连接类与所述内存数据库连接的任务,并建立所述内存数据库连接的队列任务,提取所述队列任务的首个数据库连接的任务并上锁。
本发明实施例提供的一种分布式内存数据库长连接使用的实现系统,用于实现上述所述的方法,包括:
数据库连接模块,用于建立所述数据库连接模块与内存数据库的连接;
装饰器,用于装饰所述数据库连接类,使得所述数据库连接类与不同所述内存数据库建立的连接实例存储在所述装饰器内,或从所述装饰器直接获取已经存储的连接实例;
线程模块,用于所述线程模块中的lock在执行所述数据库连接与一个所述内存数据库建立连接时上锁,执行完毕或异常释放锁。
本发明实施例提供的一种电子设备,包括至少一个处理单元以及至少一个存储单元,其中,所述存储单元存储有计算机程序,当所述程序被所述处理单元执行时,使得所述处理单元执行上述所述的方法。
本发明实施例提供的一种存储介质,其存储有可由电子设备执行的计算机程序,当所述程序在所述电子设备上运行时,使得所述电子设备执行上述所述的方法。
与现有技术相比,本发明的有益效果为:
本发明在建立内存数据库连接时使用单例模式,可以在全局中调用已经建立的连接实例,达到仅建立一个连接实例即可,且在每次内存数据库连接之前加锁,避免并发请求导致之前建立的连接失效。
附图说明
图1是本发明中分布式内存数据库长连接使用的实现系统结构示意图;
图2是本发明分布式内存数据库长连接使用的实现方法的流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
参照图1,是本申请实施例的分布式内存数据库长连接使用的实现系统的结构示意图,其包括:
数据库连接模块,用于建立数据库连接模块与内存数据库的连接;
具体地,用户编写数据库连接类,并将用户名称、用户密码、内存数据库名称参数传入数据库连接类中,与内存数据库建立连接,获取内存数据库游标,故调用数据库连接类后通过该内存数据库游标来对该内存数据库进行增删改查操作。
装饰器,用于装饰数据库连接类,使得数据库连接类与不同内存数据库建立的连接实例存储在装饰器内,或从装饰器直接获取已经存储的连接实例;
具体地,装饰器将数据库连接类装饰为单例模式,当数据库连接类与内存数据库建立连接时,判断装饰器内是否存在与内存数据库连接时建立的连接实例;若不存在,则建立连接实例并存储在装饰器内;若存在,则直接调用连接实例。
线程模块,用于线程模块中的lock在执行数据库连接与一个内存数据库建立连接时上锁,执行完毕或异常释放锁。
具体地,线程模块用于获取数据库连接类与内存数据库连接的任务,并建立内存数据库连接的队列任务,提取队列任务的首个数据库连接并上锁,即每次只能执行一个任务,避免并发请求导致之前建立的连接失效。
如图2所示,本实施例还提供一种分布式内存数据库长连接使用的实现方法,包括:
步骤1:编写数据库连接类,且建立数据库连接类与内存数据库的连接;
具体地,数据库连接类通过python驱动用于与内存数据库连接,定义数据库连接类,并将用户名称、用户密码、内存数据库名称参数传入数据库连接类中,与内存数据库建立连接,获取内存数据库游标,故调用数据库连接类后通过该内存数据库游标来对该内存数据库进行增删改查操作。
步骤2:用装饰器装饰数据库连接类,使得数据库连接类与不同内存数据库建立的连接实例存储在装饰器内,或从装饰器直接获取已经存储的连接实例;
具体地,装饰器将数据库连接类装饰为单例模式,当数据库连接类与内存数据库建立连接时,判断装饰器内是否存在与内存数据库连接时建立的连接实例;若不存在,则建立连接实例并存储在装饰器内;若存在,则直接调用连接实例。
步骤3:在数据库连接类中设有线程模块,线程模块中的lock在执行数据库连接与一个内存数据库建立连接时上锁,执行完毕或异常释放锁。
具体地,线程模块用于获取数据库连接类与内存数据库连接的任务,并建立内存数据库连接的队列任务,提取队列任务的首个数据库连接的任务并上锁,即每次只能执行一个任务,避免并发请求导致之前建立的连接失效。
通过上述方法,在内存数据库连接时,只能进行一个任务,避免了并发请求导致之前建立的连接失效。
本实施例还提供一种电子设备,包括至少一个处理单元以及至少一个存储单元,其中,存储单元存储有计算机程序,当程序被处理单元执行时,使得处理单元执行上述方法。
本实施例还提供一种存储介质,其存储有可由电子设备执行的计算机程序,当程序在电子设备上运行时,使得电子设备执行上述方法。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。