主从数据库读写方法、系统、存储装置和服务器与流程

文档序号:14449902阅读:177来源:国知局
主从数据库读写方法、系统、存储装置和服务器与流程

本发明涉及数据库技术领域,具体涉及一种主从数据库的读写方法、系统、存储器装置和服务器。



背景技术:

在数据库技术领域,通过主数据库和从数据库的数据复制,从而实现数据库的读写分离是广泛应用的一种技术。具体地,用户首先向主数据库提高写入请求,主数据库在完成数据写入之后同步到从数据库。在用户查询数据时,可以直接从从数据库查询,从而解决了单一数据库的单点故障、高并发访问性能等问题。

通常情况下,主从数据库之间存在一定延迟,例如,该延迟可以是毫秒级。在执行复杂的结构化查询语言(structuredquerylanguage,简称sql)的情况下或者在高并发导致服务器性能下降、网络拥堵时,主从数据库的数据延迟会显著增加,例如,该延迟可以达到秒级。由于从数据库的数据与主数据库的数据之间延迟较大,因此,可能发生在主数据库已经写入数据的情况下,在从数据库中却无法查到,从而引起上层引用的数据不一致的问题。

现有技术主要通过增加缓存的方式来解决主从数据库的同步延迟问题。例如,用户可以首先更新缓存,再将数据写入数据库,从而查询数据可以直接在缓存中执行,避免了从数据库的同步延迟问题。但使用缓存技术需要缓存与数据库中的数据保持一致,而且缓存的容量有限、失效和更新较为繁琐,这些都制约了该方法的可用性,提高了实施成本。



技术实现要素:

有鉴于此,本发明实施例提供了一种主从数据库的读写方法、系统、存储介质和服务器,其可以通过检测主从数据库的同步性,提高数据读写的准确率。

本发明的一个方面提供了一种主从数据库的读写方法,包括:获取数据库操作指令;判断所述数据库操作指令所包含的数据库操作类型,并且在所述数据库操作类型包括写操作时,在主数据库中执行写操作,并同步到从数据库;以及检测所述主数据库和所述从数据库是否一致。本发明通过检验主从数据库的一致性,从而确保了数据读取的准确性。

在一个实施例中,所述获取数据库操作指令包括:获取第一序列的数据库操作指令;并且所述判断所述数据库操作指令包含的数据库操作类型包括:判断所述第一序列的数据库操作指令包含的数据库操作类型;并且在所述数据库操作指令包含读操作和写操作时,在所述主数据库执行写操作;所述读操作从所述从数据库或所述主数据库中的任意一个执行。

在一个实施例中,在所述第一序列的数据库的操作指令仅包括读操作时,所述读操作在所述从数据库执行。

在一个实施例中,所述获取第一序列的数据库操作指令之后还包括:获取第二序列的数据库操作指令;并且所述判断所述数据库操作指令包含的数据库操作类型包括:判断所述第二序列的数据库操作指令包含的数据库操作类型,并且在所述第二序列的操作指令包含读操作和写操作时,在所述主数据库执行写操作;所述检测所述主数据库和所述从数据库是否一致之后还包括:在所述主数据库和从数据库不一致时,所述读操作在所述主数据库执行,并且在所述主数据库和所述从数据库一致时,所述读操作在所述从数据库执行。

在一个实施例中,所述检测所述主数据库和所述从数据库是否一致包括:检测所述主数据库最近一次的写操作,并获取经所述写操作后该主数据库存储的内容的变化;判断所述变化是否发生在所述从数据库;如果是,则所述主数据库与所述从数据库一致。

在一个实施例中,所述检测所述主数据库和所述从数据库是否一致包括:设置主数据库和从数据库的默认存储引擎为innodb存储引擎;在所述主数据库上执行特定的数据库操作,所述特定的数据库操作将被写入所述主数据库的二进制日志binlog文件中;所述主数据库执行该二进制日志binlog文件时,判断要写入所述二进制日志binlog文件中的当前数据库操作是否是特定的数据库操作;若是,则导出主数据库数据;从数据库读取所述主服务器所写的二进制binlog文件的内容,并执行其中的数据库操作时,判断当前执行的数据库操作是否是所述特定的数据库操作;若是,则导出所述从数据库的数据;判断导出的主服务器数据和导出的从服务器数据是否相同;若相同,说明所述主数据库和所述从数据库一致。

在一个实施例中,所述特定的数据操作包括:创建数据库或表、修改数据库或表、删除数据库或表、向表中插入记录、从表中删除记录或更新表中的记录。

在一个实施例中,所述方法还包括记录所述数据库操作指令;所述检测所述主数据库和所述从数据库是否一致包括:在所述主数据库和所述从数据库一致时,删除所述数据库操作指令。

在一些实施例中,所述写操作包括更新、插入和删除的至少之一。

本发明的另一个方面提供了一种数据读写系统,包括获取模块、分析模块、切换模块和检测模块;其中所述获取模块用于获取数据库操作指令,所述分析模块用于判断所述数据库操作指令所包含的数据库操作类型;所述切换模块用于在所述数据库操作类型包括写操作时,将写操作切换到主数据库中执行;所述检测模块用于检测所述主数据库与所述从数据库是否同步。

在一个实施例中,所述获取模块用于获取第一序列的数据库操作指令;并且所述分析模块用于判断所述第一序列的数据库操作指令包含的数据库操作类型;并且在所述数据库操作指令包含读操作和写操作时,所述切换模块将所述写操作切换到所述主数据库执行;以及将所述读操作切换到所述从数据库或所述主数据库中的任意之一执行。

在一个实施例中,在所述第一序列的数据库的操作指令仅包括读操作时,所述切换模块将所述读操作切换到所述从数据库执行。

在一个实施例中,所述获取模块在获取所述第一序列的数据库操作指令之后还包括:获取第二序列的数据库操作指令;并且所述分析模块还用于判断所述第二序列的数据库操作指令包含的数据库操作类型,并且在所述第二序列的操作指令包含读操作和写操作时,所述切换模块将所述写操作切换到所述主数据库执行;在所述主数据库和从所述数据库不一致时,所述切换模块将所述读操作切换到所述主数据库执行,并且在所述主数据库和所述从数据库一致时,所述切换模块将所述读操作切换到所述从数据库执行。

在一些实施例中,还包括更新模块,所述更新模块用于记录所述数据库操作指令。

在一个实施例中,所述检测模块在检测到所述主数据库和所述从数据库一致时,所述更新模块删除其记录的数据库操作指令。

本发明的又一个方面提供了一种存储介质,存储有计算机可读指令,其中所述计算机可读指令被调用时,执行上述方法。

本发明的实施例提供的主从数据库的读写方法、系统、存储介质和服务器,可以通过检测主从数据库的同步性,从而可以有效的提高数据读写的准确度。

附图说明

图1所示为本发明实施例提供的一种主从数据库的读写方法流程图。

图2所示为本发明实施例的主从数据库读写系统示意图。

图3所示为本发明实施例的检测模块示意图。

图4所示为本发明实施例的数据库读写系统示意图。

具体实施方式

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

本发明的一个方面提供了一种主从数据库的读写方法。该方法包括:s100获取数据库操作指令;s200判断所述数据库操作指令所包含的数据库操作类型,并且在所述数据库操作类型包括写操作时,在主数据库中执行写操作,并同步到从数据库;以及s300检测所述主数据库和所述从数据库是否一致。本发明提供的主从数据库的读写方法,可以检测主从数据库的一致性,从而提高数据读取的准确性。

在一个实施例中,所述s100获取数据库操作指令包括:获取第一序列的数据库操作指令;所述s200判断所述数据库操作指令包含的数据库操作类型包括:判断所述第一序列的数据库操作指令包含的数据库操作类型;并且在所述数据库操作指令包含读操作和写操作时,在所述主数据库执行写操作;所述读操作从所述从数据库或所述主数据库中的任意一个执行。例如,获取的数据库操作指令可以为sql语句序列。也就是说,在同一个sql语句序列中,首先分析该sql序列中包含哪些数据库操作类型。例如,这些数据库操作类型可以为数据库读操作或写操作。例如,写操作可以是数据更新、删除和插入的至少之一。显然,数据库的写操作在主数据库执行,从而使主数据库的数据更新到写操作之后的状态。此时,读操作既可以在主数据库执行,从而可以避免发生在从数据库的数据更新之前,主从数据库不一致的现象。此外,由于本发明的实施例的主从数据库的读取方法增加了检测主从数据库是否同步的步骤,因此,在主从数据库已经一致的情况下,数据的读操作也可以从从数据库进行。

需要说明的是,还可以根据主从数据库的是否同步决定读操作的执行主体。例如,在检测主从数据库不同步时,可以直接从该主数据库读取数据,从而避免数据读取的等待现象。例如,在检测到主从数据库一致时,可以优选的从从数据库中读取数据,从而防止高并访故障等问题。

另外,在主从数据库不同步且有数据读取需求时,还可以进一步检测主数据库在从数据库的同步进程,并预判距同步完成所需时间,如果时间小于例如1秒,则可以使读操作先进行等待,并在同步完成后,使读取操作指向从数据库。并且在上述时间大于等于1秒时,使读操作指向主数据库,从而避免读操作等待时间过长,影响数据读取效率。需要指出,该时间仅仅是示例,并非对时间的限制。

在该实施例中,例如,在所述第一序列的数据库的操作指令仅包括读操作时,所述读操作在所述从数据库执行。例如,通常情况下,即使出现服务器性能下降和网络拥塞,主从数据库的同步延迟也只有秒级别。因此,在获取到下一个序列的数据库操作指令时,由在该序列之前的数据库操作指令所导致的在主数据库的写操作,已同步更新到从数据库。因此,数据库的读操作可以从从数据库执行,从而避免主数据库的负载过重,影响数据读取效率。

在一个实施例中,所述获取第一序列的数据库操作指令之后还包括:获取第二序列的数据库操作指令;并且所述判断所述数据库操作指令包含的数据库操作类型包括:判断所述第二序列的数据库操作指令包含的数据库操作类型,并且在所述第二序列的操作指令包含读操作和写操作时,在所述主数据库执行写操作;所述s300检测所述主数据库和所述从数据库是否一致之后还包括:在所述主数据库和从数据库不一致时,所述读操作在所述主数据库执行,并且在所述主数据库和所述从数据库一致时,所述读操作在所述从数据库执行。

在该实施例中,例如,如果第二序列的数据库操作指令与第一序列的数据库操作指令相差时间较长,例如大于1秒,也可以直接将该第二序列中的读操作指向从数据库。这是因为,数据库同步延迟通常不到秒级别,在服务器或网络拥堵不太严重的情况下,例如,第一序列中的写操作很大概率已经同步到从数据库中。但在服务器使用的高峰阶段或者数据库访问并发非常频繁的情况下,检测主从数据库的操作可以按如上所述实施,避免发生从数据库读取错误的情况。

同样,例如,如果第二序列的数据库操作指令与第一序列的数据库操作指令相差时间较短,例如小于0.05秒。则应在第一序列的数据库操作指令包括写操作时,首先检测主从数据库的同步性,并且在二者同步时,才执行在从数据库的数据读取,以避免直接从从数据库读取数据导致的主从数据库不一致的情况。

需要指出的是,在检测到主从数据库不一致的情况下,可以进一步检测主数据库的写操作是否完成以及同步的进程等,从而判断同步完成所需时间。在同步完成所需时间较长,例如,大于1秒,则将第二序列的读操作直接指向主数据库,避免等待时间过长。如果距离同步完成的时间较短,则可以先使第二序列的读操作进程暂停,等待同步完成后使读操作通过从数据库执行。

在上述实施例中,例如,也可以设置缓存,并且在检测到主从数据库不一致的情况下,使后一序列的数据库操作指令中的读操作直接指向缓存,从而既可以避免读取错误,又可以防止主数据库在高并发操作可能发生的读写故障。同时,由于仅仅在主从数据库不同步的情况下才使读操作从缓存中进行,减少了对缓存的容量要求,也极大的降低了缓存失效等问题。

在一个实施例中,所述检测所述主数据库和所述从数据库是否一致包括:检测所述主数据库最近一次的写操作,并获取经所述写操作后该主数据库存储的内容的变化;判断所述变化是否发生在所述从数据库;如果是,则所述主数据库与所述从数据库一致。也就是说,可以仅仅检测主数据库最近的一次写操作,并获取从数据库最新的变化,从而可以通过判断从数据库最新的变化与主数据库的最近一次写操作导致主数据库的变化是否相同来判断主从数据库是否一致。例如,也可以直接通过检测主数据库的内容和从数据库的内容,并判断二者是否相同来判断主从数据库是否同步。

在一个实施例中,例如,所述检测所述主数据库和所述从数据库是否一致包括:设置主数据库和从数据库的默认存储引擎为innodb存储引擎;在所述主数据库上执行特定的数据库操作,所述特定的数据库操作将被写入所述主数据库的二进制日志binlog文件中;所述主数据库执行该二进制日志binlog文件时,判断要写入所述二进制日志binlog文件中的当前数据库操作是否是特定的数据库操作;若是,则导出主数据库数据;从数据库该二进制binlog文件的内容,并执行其中的数据库操作时,判断当前执行的数据库操作是否是所述特定的数据库操作;若是,则导出所述从数据库的数据;判断导出的主数据库数据和导出的从数据库数据是否相同;若相同,说明所述主数据库和所述从数据库一致。例如,所述特定的数据操作包括:创建数据库或表、修改数据库或表、删除数据库或表、向表中插入记录、从表中删除记录或更新表中的记录。通过本发明实施例的检测方法,可以便捷地检测主从数据库的一致性,从而为准确读取数据提供条件。

本发明的另一个方面提供了一种数据库读写系统。数据库读写系统包括获取模块10、分析模块20、切换模块30和检测模块40;其中所述获取模块10用于获取数据库操作指令,所述分析模块20用于判断所述数据库操作指令所包含的数据库操作类型;所述切换模块30用于在所述数据库操作类型包括写操作时,将写操作切换到主数据库1中执行;所述检测模块40用于检测所述主数据库与所述从数据库是否同步。本发明的实施例提供的数据库读写系统,通过检测主数据库和从数据库的一致性,可以提高数据库读取的准确率。

在一个实施例中,所述获取模块10用于获取第一序列的数据库操作指令;并且所述分析模块20用于判断所述第一序列的数据库操作指令包含的数据库操作类型;并且在所述数据库操作指令包含读操作和写操作时,所述切换模块30将所述写操做切换到所述主数据库1执行;以及将所述读操作切换到所述从数据库2或所述主数据库1中的任意之一执行。优选地,该切换模块20将读操作切换到主数据库1执行。

需要说明的是,在获取模块10获取第一序列的数据库操作指令时,还可以在数据库操作指令同时包括读操作和写操作时,切换模块30将写操作切换到主数据库1执行,并且将读操作也切换到主数据库1操作,从而避免在主数据库1中的写操作没有完成时,读操作即从该从数据库2中读取数据,避免数据读取错误。

在一个实施例中,在所述第一序列的数据库的操作指令仅包括读操作时,所述切换模块30将所述读操作切换到所述从数据库2执行。如上所述,由于第一序列的数据库操作指令中仅包括读操作,而在该序列的数据库操作指令之前的指令即使包含写操作,经过写操作之后的主数据库1的内容通常也已经在从数据库中进行了同步,因此,可以直接从从数据库中读取数据即可。

在一个实施例中,所述获取模块10在获取所述第一序列的数据库操作指令之后还包括:获取第二序列的数据库操作指令;并且所述分析模块30还用于判断所述第二序列的数据库操作指令包含的数据库操作类型,并且在所述第二序列的操作指令包含读操作和写操作时,所述切换模块30将所述写操作切换到所述主数据库1执行;在所述主数据库1和所述从数据库2不一致时,所述切换模块30将所述读操作切换到所述主数据库1执行,并且在所述主数据库1和所述从数据库2一致时,所述切换模块30将所述读操作切换到所述从数据库2执行。本发明的实施例通过检测主从数据库是否同步,并有针对性的使读操作在主数据库1或从数据库2中执行,可以极大的提高数据读取的准确率和速度。

如前所述,例如,检测模块40可以包括检测单元41和分析单元42。在检测单元41检测到主从数据库不一致时,分析单元42还可以进一步分析主从数据库的同步进程。例如,分析单元41判断写入操作(该写入操作可以是第一或第二序列数据库操作指令)是否已经在主数据库1完成以及向从数据库2的同步进程,如果距离主从同步完成的时间较短(例如,该时间可以小于1秒),则切换模块30可以先使读操作处于等待状态,并且在同步完成后,将读操作切换到从数据库2执行。相反,如果距离主从同步完成的时间较长(例如,大于等于1秒)且向主数据库1的写入操作已完成的情况下,则切换模块30可以直接将读操作切换到主数据库1执行。本发明的实施例,通过分析同步进程,可以更准确的判断主从数据库的同步完成时间,从而提高了数据读取效率。

在一些实施例中,还包括更新模块50,所述更新模块50用于记录所述数据库操作指令。例如,经分析模块20分析后的数据库操作指令可以存入更新模块50,从而切换模块30可以根据更新模块50中记录的内容执行数据库的读写操作。

在该实施例中,例如,获取模块10获取某个序列的数据库操作指令,并经过分析模块20分析之后,相关信息可以暂存在更新模块50中。待检测模块检测主从数据库同步之后,更新模块50可以将此次记录的信息清除,从而使更新模块可以更好的记录下一个序列的数据库操作指令信息。

在一个实施例中,例如,数据库读写系统还可以包括缓存模块。该缓存模块可以将写入主数据库的数据缓存到缓存模块,从而数据读操作可以从缓存模块读取。此外,缓存模块可以与检测模块彼此配合,例如,检测模块40在检测到主从数据库同步一致已完成时,可以向缓存模块发送指令,缓存模块可以将先前存储的缓存删除。例如,检测模块40在检测到主从数据库不一致时,缓存模块可以暂时保留先前存的待写入数据,直到检测模块40发送主从数据库一致的指令为止。本发明的实施例通过动态地在缓存模块中存储和删除待写入数据,既避免了缓存存储容量不足,又能够在获取模块获得数据读写操作指令时,从缓存模块读取数据,从而防止读取数据错误。

在一个实施例中,所述检测模块在检测到所述主数据库和所述从数据库一致时,所述更新模块删除其记录的数据库操作指令。

本发明的又一个方面提供了一种存储介质,存储有计算机可读指令,其中所述计算机可读指令被调用时,执行上述方法。

本发明的再一个方面提供了一种服务器,包括存储器和处理器,其中所述存储器存储计算机可读指令,所述处理器用于调用所述计算机可读指令,从而执行上述方法。

本发明的实施例提供的主从数据库的读写方法、系统、存储介质和服务器,可以通过检测主从数据库的同步性,从而可以有效的提高数据读写的准确度。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方。或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)。随机存取存储器(ram,random,access,memory)、磁碟或者光盘等各种可以存储程序校验码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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