CN106021335A - 访问数据库的方法及装置 - Google Patents

访问数据库的方法及装置 Download PDF

Info

Publication number
CN106021335A
CN106021335A CN201610299223.1A CN201610299223A CN106021335A CN 106021335 A CN106021335 A CN 106021335A CN 201610299223 A CN201610299223 A CN 201610299223A CN 106021335 A CN106021335 A CN 106021335A
Authority
CN
China
Prior art keywords
request
data
daily record
write
data base
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.)
Pending
Application number
CN201610299223.1A
Other languages
English (en)
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.)
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co 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 Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201610299223.1A priority Critical patent/CN106021335A/zh
Publication of CN106021335A publication Critical patent/CN106021335A/zh
Priority to PCT/CN2017/080290 priority patent/WO2017190580A1/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • 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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种访问数据库的方法及装置,该方法包括:接收来自客户端的访问数据库的请求;对所述请求进行类型分析,以确定所述请求是否为数据写入请求;以及当所述请求为数据写入请求时,将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层。本发明实施例直接将数据写入请求相应的数据写入数据库的缓存层,并向客户端返回响应消息,其能够提高后续对所述数据读取的效率。

Description

访问数据库的方法及装置
技术领域
本发明涉及计算机技术领域,特别是一种访问数据库的方法及装置。
背景技术
随着社会的发展,大量的数据需要存储起来,对存储的数据,根据不同用户的需求应用一定的数据访问方法进行处理,数据库就是适应这种需求的一种技术。简单来说,数据库是数据以一种能够持久保存,并且可以***作的方式来保存的数据集合。
在实际应用中,用户可以对数据库中的数据进行读写操作,如增加、删除、修改、查询等操作。相关技术中,以leveldb为代表的LSM Tree数据库为例,当用户对数据库中的热数据进行读取操作时,数据库接收到用户客户端发出的读取操作请求后,会从本地文件中去查找,之后向用户客户端返回响应消息。这样的读取方式,其读性能较低,满足不了需要大量请求热数据的情况。因而,亟待解决这一技术问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的访问数据库的方法及相应的装置。
依据本发明的一方面,提供了一种访问数据库的方法,包括:
接收来自客户端的访问数据库的请求;
对所述请求进行类型分析,以确定所述请求是否为数据写入请求;以及
当所述请求为数据写入请求时,将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层。
可选地,所述方法还包括:
当所述请求为数据的读取请求时,在所述缓存层中查找所述请求相应的数据,并将查找到的所述数据返回给所述客户端。
可选地,所述将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层的步骤进一步包括:
调用第一线程,并利用所述第一线程将所述请求相应的写入操作记录至所述本地日志并将所述请求相应的数据写入所述缓存层。
可选地,所述方法还包括:
调用第二线程并利用所述第二线程扫描所述本地日志以确定所述本地日志中是否存在日志增量,其中所述第二线程与所述第一线程异步;以及
若发现所述本地日志中存在日志增量,则将所述日志增量相应的数据写入所述数据库中。
可选地,所述利用所述第二线程扫描所述本地日志以确定所述本地日志中是否存在日志增量的步骤进一步包括:
利用所述第二线程扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则确定所述未被标记的日志记录为所述日志增量。
可选地,所述将所述日志增量相应的数据写入所述数据库中之后,所述方法还包括:
在所述本地日志中对所述日志增量相应的日志记录进行标记。
可选地,所述方法还包括:
删除所述本地日志中已被标记的日志记录。
可选地,所述方法还包括:
在所述数据库出现故障重新启动后,扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则将所述未被标记的日志记录相应的数据写入所述数据库,并在所述本地日志中对所述未被标记的日志记录进行标记。
可选地,所述方法还包括:
当所述请求为数据的读取请求时,若在所述缓存层中未查找到所述请求相应的数据,则将所述请求转发至所述数据库;以及
在所述数据库中查找所述请求相应的数据,将查找到的所述请求相应的数据返回给所述客户端,并在所述缓存层中缓存所述请求相应的数据。
可选地,所述缓存层为分布式的高速缓存***memcached。
依据本发明的另一方面,还提供了一种访问数据库的装置,包括:
请求接收模块,适于接收来自客户端的访问数据库的请求;
请求分析模块,适于对所述请求进行类型分析,以确定所述请求是否为数据写入请求;以及
第一写入模块,适于当所述请求分析模块确定所述请求为数据的写入请求时,将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层。
可选地,所述装置还包括:
读取模块,适于当所述请求分析模块确定所述请求为数据的读取请求时,在所述缓存层中查找所述请求相应的数据,并将查找到的所述数据返回给所述客户端。
可选地,所述第一写入模块还适于:
调用第一线程,并利用所述第一线程将所述请求相应的写入操作记录至所述本地日志并将所述请求相应的数据写入所述缓存层。
可选地,所述装置还包括:
第二写入模块,适于调用第二线程并利用所述第二线程扫描所述本地日志以确定所述本地日志中是否存在日志增量,其中所述第二线程与所述第一线程异步;以及若发现所述本地日志中存在日志增量,则将所述日志增量相应的数据写入所述数据库中。
可选地,所述第二写入模块还适于:
利用所述第二线程扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则确定所述未被标记的日志记录为所述日志增量。
可选地,所述装置还包括:
标记模块,适于在所述第二写入模块将所述日志增量相应的数据写入所述数据库中之后,在所述本地日志中对所述日志增量相应的日志记录进行标记。
可选地,所述装置还包括:
删除模块,适于删除所述本地日志中已被标记的日志记录。
可选地,所述装置还包括:
故障处理模块,适于在所述数据库出现故障重新启动后,扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则将所述未被标记的日志记录相应的数据写入所述数据库,并在所述本地日志中对所述未被标记的日志记录进行标记。
可选地,所述读取模块还适于:
当所述请求分析模块确定所述请求为数据的读取请求时,若在所述缓存层中未查找到所述请求相应的数据,则将所述请求转发至所述数据库;以及
在所述数据库中查找所述请求相应的数据,将查找到的所述请求相应的数据返回给所述客户端,并在所述缓存层中缓存所述请求相应的数据。
可选地,所述缓存层为分布式的高速缓存***memcached。
在本发明实施例中,当接收到来自客户端的访问数据库的请求时,对该请求进行类型分析以确定该请求是否为数据写入请求。当确定该请求为数据写入请求时,将该数据写入请求相应的写入操作记录至本地日志,并将该数据写入请求相应的数据写入数据库的缓存层。由此可知,本发明实施例直接将数据写入请求相应的数据写入数据库的缓存层,并向客户端返回响应消息,其能够提升后续对所述数据读取的效率。并且,本发明实施例将数据写入请求相应的写入操作记录至本地日志,从而可以利用本地日志异步地将写入请求相应的数据写入数据库,保证数据库中数据的持久化和完整性。另外,在数据库出现故障重新启动后,也可以利用本地日志对数据库进行数据恢复,实现故障修复的目的。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的访问数据库的方法的流程示意图;
图2示出了根据本发明另一个实施例的访问数据库的方法的流程示意图;
图3示出了根据本发明一个实施例的访问数据库的装置的结构示意图;以及
图4示出了根据本发明另一个实施例的访问数据库的装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为解决上述技术问题,本发明实施例提供了一种访问数据库的方法。图1示出了根据本发明一个实施例的访问数据库的方法的流程示意图。如图1所示,该方法至少可以包括步骤S102、步骤S104以及步骤S106:
步骤S102,接收来自客户端的访问数据库的请求;
步骤S104,对该请求进行类型分析,以确定该请求是否为数据写入请求;
步骤S106,当该请求为数据写入请求时,将该请求相应的写入操作记录至本地日志,并将该请求相应的数据写入数据库的缓存层。
在该步骤中,本地日志是指数据库在本地物理机上硬盘存储的日志文件,它用来记录数据库被访问的操作。
在本发明实施例中,当接收到来自客户端的访问数据库的请求时,对该请求进行类型分析以确定该请求是否为数据写入请求。当确定该请求为数据写入请求时,将该数据写入请求相应的写入操作记录至本地日志,并将该数据写入请求相应的数据写入数据库的缓存层。由此可知,本发明实施例直接将数据写入请求相应的数据写入数据库的缓存层,并向客户端返回响应消息,而无需将数据写入数据库,能够提高后续对所述数据读取的效率。并且,本发明实施例将数据写入请求相应的写入操作记录至本地日志,从而可以利用本地日志异步地将写入请求相应的数据写入数据库,保证数据库中数据的持久化和完整性。另外,在数据库出现故障重新启动后,也可以利用本地日志对数据库进行数据恢复,实现故障修复的目的。
在本发明的可选实施例中,为了提高数据库访问的安全性,在上文步骤S102接收到来自客户端的访问数据库的请求后,可以对该请求的合法性进行验证,在验证通过后进行后续的步骤S104以及步骤S106,若验证不通过,则进行拦截处理,并发出告警提示。这里的合法性是根据预先设置的安全认证策略来度量的,安全认证策略可以包括权限的合法性、请求的有效性或者攻击检查等,本发明不限于此。例如,安全认证策略可以设置为根据哪个IP地址的客户端对数据库的查询是不允许的;除了某个IP地址外的客户端是不能删除、修改数据库中的数据,等等策略。
在本发明的可选实施例中,在步骤S104对该请求进行类型分析时,可以从该请求中解析出访问数据库的语句,分析该语句是哪种类型的操作,从而确定该请求是否为数据写入请求。这里的类型如增加、删除、修改、查询等,当语句为增加操作的语句时,则确定该请求为数据写入请求;当语句为删除操作的语句时,则确定该请求为数据写入请求;当语句为修改操作的语句时,则确定该请求为数据写入请求;当语句为查询操作的语句时,则确定该请求为数据读取请求,等等。
在本发明的可选实施例中,上文步骤S106中提及的缓存层可以是在数据库之外新建的缓存层。由于数据库本身不具备缓存层,本发明实施例选择在数据库之外新建缓存层用于临时存储数据。例如,在将写入请求相应的写入操作记录至本地日志后,将写入请求相应的数据写入新建的缓存层,并向客户端返回响应消息,从而提高后续对所述数据读取的效率。这里,可以根据业务需求选取相应存储容量的缓存层,缓存层的类型可以如分布式的高速缓存***memcached或者基于内容存的redis等。
在本发明的可选实施例中,上文步骤S106将该请求相应的写入操作记录至本地日志,并将该请求相应的数据写入数据库的缓存层,本发明实施例提供了一种可选的方案,在该方案中,可以调用第一线程,并利用第一线程将请求相应的写入操作记录至本地日志并将请求相应的数据写入缓存层。也就是说,由第一线程将请求相应的写入操作记录至本地日志,随后将请求相应的数据写入缓存层,之后向客户端返回表示已完成数据库写入的响应消息。
进一步地,为了保证数据库中数据的持久化和完整性,本发明实施例可以利用本地日志异步地将写入请求相应的数据写入数据库,即,调用第二线程并利用第二线程扫描本地日志以确定本地日志中是否存在日志增量,其中第二线程与第一线程异步,若发现本地日志中存在日志增量,则将日志增量相应的数据写入数据库中。这里,第二线程可以实时地对本地日志进行扫描,也可以设定指定的扫描周期(如0.5秒或1秒等)对本地日志进行扫描。
在本发明的可选实施例中,在确定日志增量时,本发明实施例提供了一种可选的方案,即,利用第二线程扫描本地日志,确定本地日志中是否存在未被标记的日志记录,若存在未被标记的日志记录,则确定未被标记的日志记录为日志增量。进一步地,将日志增量相应的数据写入数据库中之后,在本地日志中对日志增量相应的日志记录进行标记,以表示日志增量相应的数据已写入数据库中,可以避免重复写入的问题。例如,将日志增量相应的数据写入数据库中之后,可以在本地日志中标记日志增量相应的日志记录为“已操作”或“已记录”等。
在本发明的可选实施例中,为了节省本地存储空间,可以删除本地日志中已被标记的日志记录,例如,对本地日志进行设置,每隔预定时间可以删除已被标记的日志记录。另外,本地日志可以按照大小切分,当某个切分区域中的日志记录已全部被标记,则可以删除该切分区域中的日志记录。
在本发明的可选实施例中,如果因为宕机或其他因素导致数据库出现故障,使得新写在缓存层中的数据还未在数据库中持久化,则在下次重启数据库后,可以利用本地日志对数据库进行数据恢复,实现故障修复的目的。具体地,在数据库出现故障重新启动后,启用扫描线程,并利用扫描线程扫描本地日志,确定本地日志中是否存在未被标记的日志记录,若是,则将未被标记的日志记录相应的数据写入数据库,并在本地日志中对未被标记的日志记录进行标记。例如,新写在缓存层中的数据“b=2”未在数据库中持久化(“b=2”相应的写入操作已记录至本地日志),数据库突发故障,在数据库重新启动后,启用扫描线程,并利用扫描线程扫描本地日志,发现本地日志中存在未被标记的日志记录,即“b=2”相应的写入操作,则将“b=2”写入数据库,并在本地日志中对未被标记的日志记录(即“b=2”相应的写入操作)进行标记,如标记为“已操作”或“已记录”等。
进一步地,在数据恢复后数据库正常工作,缓存层中也有新的数据写入(这里,可以采用前文提及的第一线程将请求相应的写入操作记录至本地日志并将请求相应的数据写入缓存层),此时可以继续利用扫描线程扫描本地日志,以确定本地日志中是否存在日志增量,若发现本地日志中存在日志增量,则将日志增量相应的数据写入数据库中。这里的扫描线程与前文提及的第二线程作用相同,扫描线程与第一线程异步。
在本发明的可选实施例中,由于在缓存层对数据进行了缓存,因而当来自客户端的访问数据库的请求为数据的读取请求时,则可以直接在缓存层中查找该读取请求相应的数据,并将查找到的数据返回给客户端,从而可以减少对数据库的读取访问,提高数据读取的效率。
在本发明的可选实施例中,如果数据库故障或其他因素导致缓存层数据部分或全部丢失,使得在缓存层中未查找到读取请求相应的数据,则本发明实施例可以将读取请求转发至数据库,在数据库中查找读取请求相应的数据,将查找到的读取请求相应的数据返回给客户端,并在缓存层中缓存读取请求相应的数据。
下面将通过一具体实施例详细介绍本发明的访问数据库的方法的实现过程。在该实施例中,根据业务需求选取相应存储容量的缓存层,为数据库新建缓存层,缓存层的类型可以如分布式的高速缓存***memcached或者基于内存的redis等。
图2示出了根据本发明另一个实施例的访问数据库的方法的流程示意图。如图2所示,该方法至少可以包括步骤S202、步骤S204、步骤S206、步骤S208以及步骤S210。
步骤S202,为数据库新建缓存层,接收来自客户端的访问数据库的请求。
步骤S204,对该请求进行类型分析,确定该请求是否为数据写入请求,若是,则继续执行步骤S206;若否,则继续执行步骤S208。
步骤S206,调用第一线程,并利用第一线程将请求相应的写入操作记录至本地日志并将请求相应的数据写入缓存层。
在该步骤中,本地日志是指数据库在本地物理机上硬盘存储的日志文件,它用来记录数据库被访问的操作。
步骤S208,当来自客户端的访问数据库的请求为数据的读取请求时,在缓存层中查找该读取请求相应的数据,并将查找到的数据返回给客户端。
在该步骤中,如果数据库故障或其他因素导致缓存层数据部分或全部丢失,使得在缓存层中未查找到读取请求相应的数据,则本发明实施例可以将读取请求转发至数据库,在数据库中查找读取请求相应的数据,将查找到的读取请求相应的数据返回给客户端,并在缓存层中缓存读取请求相应的数据。
步骤S210,调用第二线程并利用第二线程扫描本地日志以确定本地日志中是否存在日志增量,其中第二线程与第一线程异步,若发现本地日志中存在日志增量,则将日志增量相应的数据写入数据库中。
在确定日志增量时,可以利用第二线程扫描本地日志,确定本地日志中是否存在未被标记的日志记录,若存在未被标记的日志记录,则确定未被标记的日志记录为日志增量。进一步地,将日志增量相应的数据写入数据库中之后,在本地日志中对日志增量相应的日志记录进行标记,以表示日志增量相应的数据已写入数据库中,可以避免重复写入的问题。例如,将日志增量相应的数据写入数据库中之后,可以在本地日志中标记日志增量相应的日志记录为“已操作”或“已记录”等。另外,为了节省本地存储空间,可以删除本地日志中已被标记的日志记录。
在本发明实施例中,如果因为宕机或其他因素导致数据库出现故障,使得新写在缓存层中的数据还未在数据库中持久化,则在下次重启数据库后,可以利用本地日志对数据库进行数据恢复,实现故障修复的目的。具体地,在数据库出现故障重新启动后,启用扫描线程,并利用扫描线程扫描本地日志,确定本地日志中是否存在未被标记的日志记录,若是,则将未被标记的日志记录相应的数据写入数据库,并在本地日志中对未被标记的日志记录进行标记。
进一步地,在数据恢复后数据库正常工作,缓存层中也有新的数据写入(这里,可以采用前文提及的第一线程将请求相应的写入操作记录至本地日志并将请求相应的数据写入缓存层),此时可以继续利用扫描线程扫描本地日志,以确定本地日志中是否存在日志增量,若发现本地日志中存在日志增量,则将日志增量相应的数据写入数据库中。这里的扫描线程与前文提及的第二线程作用相同,扫描线程与第一线程异步。
需要说明的是,在实际应用中,上述所有可选实施方式可以采用结合的方式任意组合,形成本发明的可选实施例,在此不再一一赘述。
基于上文各个实施例提供的访问数据库的方法,基于同一发明构思,本发明实施例还提供了一种访问数据库的装置。
图3示出了根据本发明一个实施例的访问数据库的装置的结构示意图。如图3所示,该装置300至少可以包括请求接收模块310、请求分析模块320以及第一写入模块330。
现介绍本发明实施例的访问数据库的装置300的各组成或器件的功能以及各部分间的连接关系:
请求接收模块310,适于接收来自客户端的访问数据库的请求;
请求分析模块320,与请求接收模块310相耦合,适于对请求进行类型分析,以确定请求是否为数据写入请求;以及
第一写入模块330,与请求分析模块320相耦合,适于当请求分析模块确定请求为数据的写入请求时,将请求相应的写入操作记录至本地日志,并将请求相应的数据写入数据库的缓存层。
在本发明一实施例中,如图4所示,图3展示的装置还可以包括:
读取模块340,与请求分析模块320、第一写入模块330相耦合,适于当请求分析模块320确定请求为数据的读取请求时,在缓存层中查找请求相应的数据,并将查找到的数据返回给客户端。
在本发明一实施例中,第一写入模块330还适于:
调用第一线程,并利用第一线程将请求相应的写入操作记录至本地日志并将请求相应的数据写入缓存层。
在本发明一实施例中,如图4所示,图3展示的装置还可以包括:
第二写入模块350,与第一写入模块330相耦合,适于调用第二线程并利用第二线程扫描本地日志以确定本地日志中是否存在日志增量,其中第二线程与第一线程异步;以及若发现本地日志中存在日志增量,则将日志增量相应的数据写入数据库中。
在本发明一实施例中,第二写入模块350还适于:
利用第二线程扫描本地日志,确定本地日志中是否存在未被标记的日志记录;以及
若是,则确定未被标记的日志记录为日志增量。
在本发明一实施例中,如图4所示,图3展示的装置还可以包括:
标记模块360,与第二写入模块350相耦合,适于在第二写入模块350将日志增量相应的数据写入数据库中之后,在本地日志中对日志增量相应的日志记录进行标记。
在本发明一实施例中,如图4所示,图3展示的装置还可以包括:
删除模块370,与标记模块360相耦合,适于删除本地日志中已被标记的日志记录。
在本发明一实施例中,如图4所示,图3展示的装置还可以包括:
故障处理模块380,与第一写入模块330、标记模块360相耦合,适于在数据库出现故障重新启动后,扫描本地日志,确定本地日志中是否存在未被标记的日志记录;以及
若是,则将未被标记的日志记录相应的数据写入数据库,并在本地日志中对未被标记的日志记录进行标记。
在本发明一实施例中,读取模块340还适于:
当请求分析模块确定请求为数据的读取请求时,若在缓存层中未查找到请求相应的数据,则将请求转发至数据库;
在数据库中查找请求相应的数据,将查找到的请求相应的数据返回给客户端,并在缓存层中缓存请求相应的数据。
在本发明一实施例中,缓存层为分布式的高速缓存***memcached。
根据上述任意一个优选实施例或多个优选实施例的组合,本发明实施例能够达到如下有益效果:
在本发明实施例中,当接收到来自客户端的访问数据库的请求时,对该请求进行类型分析以确定该请求是否为数据写入请求。当确定该请求为数据写入请求时,将该数据写入请求相应的写入操作记录至本地日志,并将该数据写入请求相应的数据写入数据库的缓存层。由此可知,本发明实施例直接将数据写入请求相应的数据写入数据库的缓存层,并向客户端返回响应消息,其能够提高后续对所述数据读取的效率。并且,本发明实施例将数据写入请求相应的写入操作记录至本地日志,从而可以利用本地日志异步地将写入请求相应的数据写入数据库,保证数据库中数据的持久化和完整性。另外,在数据库出现故障重新启动后,也可以利用本地日志对数据库进行数据恢复,实现故障修复的目的。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的访问数据库的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
本发明实施例的一方面公开了A1、一种访问数据库的方法,包括:
接收来自客户端的访问数据库的请求;
对所述请求进行类型分析,以确定所述请求是否为数据写入请求;以及
当所述请求为数据写入请求时,将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层。
A2、根据A1所述的方法,其中,还包括:
当所述请求为数据的读取请求时,在所述缓存层中查找所述请求相应的数据,并将查找到的所述数据返回给所述客户端。
A3、根据A1或A2所述的方法,其中,所述将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层的步骤进一步包括:
调用第一线程,并利用所述第一线程将所述请求相应的写入操作记录至所述本地日志并将所述请求相应的数据写入所述缓存层。
A4、根据A1-A3中任一项所述的方法,其中,还包括:
调用第二线程并利用所述第二线程扫描所述本地日志以确定所述本地日志中是否存在日志增量,其中所述第二线程与所述第一线程异步;以及
若发现所述本地日志中存在日志增量,则将所述日志增量相应的数据写入所述数据库中。
A5、根据A1-A4中任一项所述的方法,其中,所述利用所述第二线程扫描所述本地日志以确定所述本地日志中是否存在日志增量的步骤进一步包括:
利用所述第二线程扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则确定所述未被标记的日志记录为所述日志增量。
A6、根据A1-A5中任一项所述的方法,其中,所述将所述日志增量相应的数据写入所述数据库中之后,所述方法还包括:
在所述本地日志中对所述日志增量相应的日志记录进行标记。
A7、根据A1-A6中任一项所述的方法,其中,还包括:
删除所述本地日志中已被标记的日志记录。
A8、根据A1-A7中任一项所述的方法,其中,还包括:
在所述数据库出现故障重新启动后,扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则将所述未被标记的日志记录相应的数据写入所述数据库,并在所述本地日志中对所述未被标记的日志记录进行标记。
A9、根据A1-A8中任一项所述的方法,其中,还包括:
当所述请求为数据的读取请求时,若在所述缓存层中未查找到所述请求相应的数据,则将所述请求转发至所述数据库;以及
在所述数据库中查找所述请求相应的数据,将查找到的所述请求相应的数据返回给所述客户端,并在所述缓存层中缓存所述请求相应的数据。
A10、根据A1-A9中任一项所述的方法,其中,所述缓存层为分布式的高速缓存***memcached。
本发明实施例的另一方面还公开了B11、一种访问数据库的装置,包括:
请求接收模块,适于接收来自客户端的访问数据库的请求;
请求分析模块,适于对所述请求进行类型分析,以确定所述请求是否为数据写入请求;以及
第一写入模块,适于当所述请求分析模块确定所述请求为数据的写入请求时,将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层。
B12、根据B11所述的装置,其中,还包括:
读取模块,适于当所述请求分析模块确定所述请求为数据的读取请求时,在所述缓存层中查找所述请求相应的数据,并将查找到的所述数据返回给所述客户端。
B13、根据B11或B12所述的装置,其中,所述第一写入模块还适于:
调用第一线程,并利用所述第一线程将所述请求相应的写入操作记录至所述本地日志并将所述请求相应的数据写入所述缓存层。
B14、根据B11-B13中任一项所述的装置,其中,还包括:
第二写入模块,适于调用第二线程并利用所述第二线程扫描所述本地日志以确定所述本地日志中是否存在日志增量,其中所述第二线程与所述第一线程异步;以及若发现所述本地日志中存在日志增量,则将所述日志增量相应的数据写入所述数据库中。
B15、根据B11-B14中任一项所述的装置,其中,所述第二写入模块还适于:
利用所述第二线程扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则确定所述未被标记的日志记录为所述日志增量。
B16、根据B11-B15中任一项所述的装置,其中,还包括:
标记模块,适于在所述第二写入模块将所述日志增量相应的数据写入所述数据库中之后,在所述本地日志中对所述日志增量相应的日志记录进行标记。
B17、根据B11-B16中任一项所述的装置,其中,还包括:
删除模块,适于删除所述本地日志中已被标记的日志记录。
B18、根据B11-B17中任一项所述的装置,其中,还包括:
故障处理模块,适于在所述数据库出现故障重新启动后,扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则将所述未被标记的日志记录相应的数据写入所述数据库,并在所述本地日志中对所述未被标记的日志记录进行标记。
B19、根据B11-B18中任一项所述的装置,其中,所述读取模块还适于:
当所述请求分析模块确定所述请求为数据的读取请求时,若在所述缓存层中未查找到所述请求相应的数据,则将所述请求转发至所述数据库;以及
在所述数据库中查找所述请求相应的数据,将查找到的所述请求相应的数据返回给所述客户端,并在所述缓存层中缓存所述请求相应的数据。
B20、根据B11-B19中任一项所述的装置,其中,所述缓存层为分布式的高速缓存***memcached。

Claims (10)

1.一种访问数据库的方法,包括:
接收来自客户端的访问数据库的请求;
对所述请求进行类型分析,以确定所述请求是否为数据写入请求;以及
当所述请求为数据写入请求时,将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层。
2.根据权利要求1所述的方法,其中,还包括:
当所述请求为数据的读取请求时,在所述缓存层中查找所述请求相应的数据,并将查找到的所述数据返回给所述客户端。
3.根据权利要求1或2所述的方法,其中,所述将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层的步骤进一步包括:
调用第一线程,并利用所述第一线程将所述请求相应的写入操作记录至所述本地日志并将所述请求相应的数据写入所述缓存层。
4.根据权利要求1-3中任一项所述的方法,其中,还包括:
调用第二线程并利用所述第二线程扫描所述本地日志以确定所述本地日志中是否存在日志增量,其中所述第二线程与所述第一线程异步;以及
若发现所述本地日志中存在日志增量,则将所述日志增量相应的数据写入所述数据库中。
5.根据权利要求1-4中任一项所述的方法,其中,所述利用所述第二线程扫描所述本地日志以确定所述本地日志中是否存在日志增量的步骤进一步包括:
利用所述第二线程扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则确定所述未被标记的日志记录为所述日志增量。
6.根据权利要求1-5中任一项所述的方法,其中,所述将所述日志增量相应的数据写入所述数据库中之后,所述方法还包括:
在所述本地日志中对所述日志增量相应的日志记录进行标记。
7.根据权利要求1-6中任一项所述的方法,其中,还包括:
删除所述本地日志中已被标记的日志记录。
8.根据权利要求1-7中任一项所述的方法,其中,还包括:
在所述数据库出现故障重新启动后,扫描所述本地日志,确定所述本地日志中是否存在未被标记的日志记录;以及
若是,则将所述未被标记的日志记录相应的数据写入所述数据库,并在所述本地日志中对所述未被标记的日志记录进行标记。
9.根据权利要求1-8中任一项所述的方法,其中,还包括:
当所述请求为数据的读取请求时,若在所述缓存层中未查找到所述请求相应的数据,则将所述请求转发至所述数据库;以及
在所述数据库中查找所述请求相应的数据,将查找到的所述请求相应的数据返回给所述客户端,并在所述缓存层中缓存所述请求相应的数据。
10.一种访问数据库的装置,包括:
请求接收模块,适于接收来自客户端的访问数据库的请求;
请求分析模块,适于对所述请求进行类型分析,以确定所述请求是否为数据写入请求;以及
第一写入模块,适于当所述请求分析模块确定所述请求为数据的写入请求时,将所述请求相应的写入操作记录至本地日志,并将所述请求相应的数据写入所述数据库的缓存层。
CN201610299223.1A 2016-05-06 2016-05-06 访问数据库的方法及装置 Pending CN106021335A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201610299223.1A CN106021335A (zh) 2016-05-06 2016-05-06 访问数据库的方法及装置
PCT/CN2017/080290 WO2017190580A1 (zh) 2016-05-06 2017-04-12 访问数据库的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610299223.1A CN106021335A (zh) 2016-05-06 2016-05-06 访问数据库的方法及装置

Publications (1)

Publication Number Publication Date
CN106021335A true CN106021335A (zh) 2016-10-12

Family

ID=57082231

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610299223.1A Pending CN106021335A (zh) 2016-05-06 2016-05-06 访问数据库的方法及装置

Country Status (2)

Country Link
CN (1) CN106021335A (zh)
WO (1) WO2017190580A1 (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106713450A (zh) * 2016-12-21 2017-05-24 广州优视网络科技有限公司 基于读写分离模式的下载提速方法及装置
WO2017190580A1 (zh) * 2016-05-06 2017-11-09 北京奇虎科技有限公司 访问数据库的方法及装置
CN107341267A (zh) * 2017-07-24 2017-11-10 郑州云海信息技术有限公司 一种分布式文件***访问方法及平台
CN108733704A (zh) * 2017-04-20 2018-11-02 北京京东尚科信息技术有限公司 多数据库数据处理方法、装置及存储介质和电子设备
CN109213432A (zh) * 2017-07-04 2019-01-15 华为技术有限公司 利用日志结构合并树将数据写入的存储设备及其方法
CN110019345A (zh) * 2017-12-28 2019-07-16 北京京东尚科信息技术有限公司 数据处理方法、装置、***及介质
CN110019132A (zh) * 2017-12-20 2019-07-16 北京潘达互娱科技有限公司 点赞数据存储方法及设备
CN110908838A (zh) * 2019-11-19 2020-03-24 杭州安恒信息技术股份有限公司 一种数据处理方法、装置及电子设备和存储介质
WO2023116827A1 (zh) * 2021-12-23 2023-06-29 深圳市世强元件网络有限公司 高并发存储数据的方法及***

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107895039B (zh) * 2017-11-29 2020-11-24 华中科技大学 一种校园网认证***日志数据库的构建方法
CN108829730A (zh) * 2018-05-11 2018-11-16 中国平安人寿保险股份有限公司 一种对日志数据进行存储的方法、装置及其可读存储介质
CN109800260A (zh) * 2018-12-14 2019-05-24 深圳壹账通智能科技有限公司 高并发数据存储方法、装置、计算机设备和存储介质
CN111008233B (zh) * 2019-11-24 2023-02-28 浪潮电子信息产业股份有限公司 一种kv数据库的访问方法、装置及设备
CN112231274B (zh) * 2020-10-16 2024-04-05 京东科技控股股份有限公司 日志汇总方法、装置、电子设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1858738A (zh) * 2006-02-15 2006-11-08 华为技术有限公司 访问数据库的方法及装置
CN104317926A (zh) * 2014-10-31 2015-01-28 北京思特奇信息技术股份有限公司 一种持久化的数据存储和查询方法及对应的装置和***

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103810056A (zh) * 2012-11-06 2014-05-21 南京壹进制信息技术有限公司 一种在Linux平台上获得一致性备份的方法
CN104462194A (zh) * 2014-10-28 2015-03-25 北京国双科技有限公司 一种业务数据的处理方法、装置及服务器
CN104834724B (zh) * 2015-05-12 2018-12-18 广东睿江云计算股份有限公司 一种数据库同步方法和装置
CN106021335A (zh) * 2016-05-06 2016-10-12 北京奇虎科技有限公司 访问数据库的方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1858738A (zh) * 2006-02-15 2006-11-08 华为技术有限公司 访问数据库的方法及装置
CN104317926A (zh) * 2014-10-31 2015-01-28 北京思特奇信息技术股份有限公司 一种持久化的数据存储和查询方法及对应的装置和***

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017190580A1 (zh) * 2016-05-06 2017-11-09 北京奇虎科技有限公司 访问数据库的方法及装置
CN106713450A (zh) * 2016-12-21 2017-05-24 广州优视网络科技有限公司 基于读写分离模式的下载提速方法及装置
CN108733704A (zh) * 2017-04-20 2018-11-02 北京京东尚科信息技术有限公司 多数据库数据处理方法、装置及存储介质和电子设备
CN108733704B (zh) * 2017-04-20 2020-11-20 北京京东尚科信息技术有限公司 多数据库数据处理方法、装置及存储介质和电子设备
CN109213432A (zh) * 2017-07-04 2019-01-15 华为技术有限公司 利用日志结构合并树将数据写入的存储设备及其方法
CN109213432B (zh) * 2017-07-04 2021-10-26 华为技术有限公司 利用日志结构合并树将数据写入的存储设备及其方法
CN107341267A (zh) * 2017-07-24 2017-11-10 郑州云海信息技术有限公司 一种分布式文件***访问方法及平台
CN110019132A (zh) * 2017-12-20 2019-07-16 北京潘达互娱科技有限公司 点赞数据存储方法及设备
CN110019345A (zh) * 2017-12-28 2019-07-16 北京京东尚科信息技术有限公司 数据处理方法、装置、***及介质
CN110908838A (zh) * 2019-11-19 2020-03-24 杭州安恒信息技术股份有限公司 一种数据处理方法、装置及电子设备和存储介质
CN110908838B (zh) * 2019-11-19 2022-09-02 杭州安恒信息技术股份有限公司 一种数据处理方法、装置及电子设备和存储介质
WO2023116827A1 (zh) * 2021-12-23 2023-06-29 深圳市世强元件网络有限公司 高并发存储数据的方法及***

Also Published As

Publication number Publication date
WO2017190580A1 (zh) 2017-11-09

Similar Documents

Publication Publication Date Title
CN106021335A (zh) 访问数据库的方法及装置
CN103957239B (zh) Dns缓存信息处理方法、设备及***
CN110188306A (zh) 一种网页表单自动填写的方法及装置
CN110888837B (zh) 对象存储小文件归并方法及装置
US20170220298A1 (en) Methods and apparatus for storing data to a solid state storage device based on data classification
CN113687974B (zh) 客户端日志处理方法、装置及计算机设备
CN110781372B (zh) 一种优化网站的方法、装置、计算机设备及存储介质
CN111953556B (zh) 网站自动拨测方法、装置、计算机设备及可读存储介质
CN104239353B (zh) 一种web分类控制和日志审计的方法
CN102968456B (zh) 一种栅格数据读取处理方法和装置
CN105095423A (zh) 计数数据写入方法和装置
WO2018006721A1 (zh) 日志文件的存储方法及装置
CN110647542B (zh) 一种数据获取方法和装置
CN111782621B (zh) 一种业务应用日志处理方法及装置
CN109992469B (zh) 一种合并日志的方法及装置
CN107256233B (zh) 一种数据存储方法和装置
CN111831691B (zh) 一种数据读写方法及装置、电子设备、存储介质
CN113641681B (zh) 一种空间自适应的海量数据查询方法
US10719497B2 (en) Utilization of optimized ordered metadata structure for container-based large-scale distributed storage
CN108062323B (zh) 一种日志读取方法及装置
CN104915425A (zh) 一种文件内容的检索方法及装置
CN104933105A (zh) 数据库访问请求的分析方法和装置
CN103336671A (zh) 从网络中获取数据的方法和设备
CN113542326B (zh) 分布式***的数据缓存方法及装置、服务器、存储介质
CN110471764A (zh) 一种内存清理的处理方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20161012

RJ01 Rejection of invention patent application after publication