CN114817341B - 访问数据库的方法和装置 - Google Patents

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

Info

Publication number
CN114817341B
CN114817341B CN202210761260.5A CN202210761260A CN114817341B CN 114817341 B CN114817341 B CN 114817341B CN 202210761260 A CN202210761260 A CN 202210761260A CN 114817341 B CN114817341 B CN 114817341B
Authority
CN
China
Prior art keywords
storage
database
query result
layer
access
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
CN202210761260.5A
Other languages
English (en)
Other versions
CN114817341A (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.)
Beijing Oceanbase Technology Co Ltd
Original Assignee
Beijing Oceanbase Technology 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 Oceanbase Technology Co Ltd filed Critical Beijing Oceanbase Technology Co Ltd
Priority to CN202210761260.5A priority Critical patent/CN114817341B/zh
Publication of CN114817341A publication Critical patent/CN114817341A/zh
Application granted granted Critical
Publication of CN114817341B publication Critical patent/CN114817341B/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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • 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
    • G06F16/2308Concurrency control
    • G06F16/2315Optimistic concurrency control
    • 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
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps

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)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开披露了一种访问数据库的方法和装置。所述方法应用于服务端,所述服务端位于客户端和所述数据库之间,所述方法包括:从所述客户端接收数据库查询语句;向所述数据库发送所述数据库查询语句,以获取针对所述数据库查询语句的查询结果,所述查询结果包括m×n个数据项;基于二维存储结构缓存所述查询结果,以便所述客户端对所述查询结果进行查询,其中,所述二维存储结构包括m个横向链表和n个纵向链表,所述m个横向链表和所述n个纵向链表交织,形成包含m×n个节点的十字链表,所述m×n个节点与所述m×n个数据项一一对应。

Description

访问数据库的方法和装置
技术领域
本公开涉及数据库技术领域,具体涉及一种访问数据库的方法和装置。
背景技术
用户访问数据库时,可以通过客户端向服务端发送数据库查询语句,以便服务端从数据库中获取针对该数据库查询语句的查询结果。在某些业务场景下,服务端需要对从数据库获取的查询结果进行缓存。
相关技术中,可以采用二维数组的数据结构缓存查询结果。但是,采用二维数组的数据结构缓存查询结果的方案存在一些问题,例如,对缓存的查询结果进行选择、投影、联结等计算时,计算效率较低。
发明内容
有鉴于此,本公开提供一种访问数据库的方法和装置,以提升对缓存的查询结果进行计算的效率。
第一方面,提供一种访问数据库的方法,所述方法应用于服务端,所述服务端位于客户端和所述数据库之间,所述方法包括:从所述客户端接收数据库查询语句;向所述数据库发送所述数据库查询语句,以获取针对所述数据库查询语句的查询结果,所述查询结果包括m×n个数据项;基于二维存储结构缓存所述查询结果,以便所述客户端对所述查询结果进行查询,其中,所述二维存储结构包括m个横向链表和n个纵向链表,所述m个横向链表和所述n个纵向链表交织,形成包含m×n个节点的十字链表,所述m×n个节点与所述m×n个数据项一一对应。
可选地,m×n个节点由所述服务端的计算层生成,且所述m×n个节点分别用于存储所述m×n个数据项的引用,所述m×n个数据项存储在所述服务端的存储层中,所述计算层和所述存储层之间设置有访问层,所述方法还包括:向所述访问层发送针对所述m×n个数据项中的目标数据项的访问请求,所述访问请求包括所述目标数据项的引用;利用所述访问层将所述目标数据项的引用转换成IO请求,并向所述存储层发送所述IO请求,以访问所述目标数据项。
可选地,访问层被实现为随机访问文件,所述随机访问文件中包含一段连续的逻辑地址,所述访问层记录有所述逻辑地址与所述存储层中的物理地址的映射关系,所述目标数据项的访问请求被转换为针对所述随机访问文件的随机访问请求,所述访问层基于所述映射关系将针对所述随机访问文件的随机访问请求转换成针对所述存储层的物理IO请求。
可选地,存储层包括两级缓存,所述两级缓存中的第一级缓存位于内存中,所述两级缓存中的第二级缓存位于磁盘中,所述访问层用于管理所述存储层中的物理数据块在所述两级缓存中的存储位置。
可选地,存储层中的物理数据块在所述两级缓存中的存储位置是基于所述物理数据块的被访问频次确定的,若所述第一级缓存的剩余容量不足,所述存储层用于将所述第一级缓存中最近最少使用的物理数据块换出至所述第二级缓存中。
可选地,服务端还存储有所述十字链表的索引信息,所述索引信息用于索引所述十字链表中的各链表的表头。
可选地,m×n个数据项和/或所述目标数据项中的各数据项的引用包括所述各数据项的起始存储位置和存储占用空间的大小。
可选地,在新增所述存储层中存储的物理数据块时采用乐观锁机制,所述乐观锁机制用于对所述存储层的第一级缓存中的部分槽位进行锁定,所述乐观锁是基于信号量实现的。
可选地,在更新所述存储层中存储的物理数据块时采用悲观锁机制,所述悲观锁机制用于对需要更新的物理数据块加悲观锁。
可选地,在所述基于二维存储结构缓存所述查询结果之后,所述方法还包括:对基于所述二维存储结构缓存的所述查询结果进行计算,以将计算得到的查询结果返回给所述客户端,其中,对缓存的所述查询结果进行计算包括以下计算类型中的一种或多种:选择计算、投影计算、以及联结计算。
第二方面,提供一种访问数据库的装置,所述装置配置于服务端,所述服务端位于客户端和所述数据库之间,所述装置包括:接收模块,用于从所述客户端接收数据库查询语句;第一发送模块,用于向所述数据库发送所述数据库查询语句,以获取针对所述数据库查询语句的查询结果,所述查询结果包括m×n个数据项;缓存模块,用于基于二维存储结构缓存所述查询结果,以便所述客户端对所述查询结果进行查询,其中,所述二维存储结构包括m个横向链表和n个纵向链表,所述m个横向链表和所述n个纵向链表交织,形成包含m×n个节点的十字链表,所述m×n个节点与所述m×n个数据项一一对应。
可选地,m×n个节点由所述服务端的计算层生成,且所述m×n个节点分别用于存储所述m×n个数据项的引用,所述m×n个数据项存储在所述服务端的存储层中,所述计算层和所述存储层之间设置有访问层,所述装置还包括:第二发送模块,用于向所述访问层发送针对所述m×n个数据项中的目标数据项的访问请求,所述访问请求包括所述目标数据项的引用;转换模块,用于利用所述访问层将所述目标数据项的引用转换成IO请求,并向所述存储层发送所述IO请求,以访问所述目标数据项。
可选地,访问层被实现为随机访问文件,所述随机访问文件中包含一段连续的逻辑地址,所述访问层记录有所述逻辑地址与所述存储层中的物理地址的映射关系,所述目标数据项的访问请求被转换为针对所述随机访问文件的随机访问请求,所述访问层基于所述映射关系将针对所述随机访问文件的随机访问请求转换成针对所述存储层的物理IO请求。
可选地,存储层包括两级缓存,所述两级缓存中的第一级缓存位于内存中,所述两级缓存中的第二级缓存位于磁盘中,所述访问层用于管理所述存储层中的物理数据块在所述两级缓存中的存储位置。
可选地,存储层中的物理数据块在所述两级缓存中的存储位置是基于所述物理数据块的被访问频次确定的,若所述第一级缓存的剩余容量不足,所述存储层用于将所述第一级缓存中最近最少使用的物理数据块换出至所述第二级缓存中。
可选地,服务端还存储有所述十字链表的索引信息,所述索引信息用于索引所述十字链表中的各链表的表头。
可选地,m×n个数据项和/或所述目标数据项中的各数据项的引用包括所述各数据项的起始存储位置和存储占用空间的大小。
可选地,在新增所述存储层中存储的物理数据块时采用乐观锁机制,所述乐观锁机制用于对所述存储层的第一级缓存中的部分槽位进行锁定,所述乐观锁是基于信号量实现的。
可选地,在更新所述存储层中存储的物理数据块时采用悲观锁机制,所述悲观锁机制用于对需要更新的物理数据块加悲观锁。
可选地,所述装置还包括:计算模块,用于对基于所述二维存储结构缓存的所述查询结果进行计算,以将计算得到的查询结果返回给所述客户端,其中,对缓存的所述查询结果进行计算包括以下计算类型中的一种或多种:选择计算、投影计算、以及联结计算。
第三方面,提供一种访问数据库的装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现如第一方面所述的方法。
第四方面,提供一种计算机可读存储介质,其上存储有可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法。
第五方面,提供一种计算机程序产品,包括可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法。
本公开实施例中,服务端缓存数据库查询语句对应的查询结果时,采用的是以十字链表的数据结构为基础的二维存储结构。一方面可以保留查询结果的二维拓扑结构,另一方面基于链表优异的增加、删除性能,使得以十字链表的数据结构为基础的二维存储结构能够实现对缓存的查询结果的高效计算。
附图说明
图1为本公开实施例提供的系统架构的示例图。
图2为本公开实施例提供的访问数据库的方法的流程示意图。
图3为本公开实施例提供的服务端的结构示意图。
图4为本公开实施例提供的计算层和存储层的一种可能的实现方式。
图5为本公开实施例提供的计算层访问存储层的一种可能的实现方式。
图6为本公开实施例提供的存储层和访问层的一种可能的实现方式。
图7为本公开一实施例提供的访问数据库的装置的结构示意图。
图8为本公开另一实施例提供的访问数据库的装置的结构示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本公开一部分实施例,而不是全部的实施例。
为了便于理解,下文将结合图1简要介绍本公开实施例的应用场景。
图1所示为本公开实施例提供的数据库系统架构的示例图。如图1所示,数据库系统100可以用于用户进行数据的查询和存储,该数据库系统100可以包括客户端(client)110、服务端(server)120和数据库(database)130。
客户端110也可以称为用户端110。用户可以通过客户端110向服务端120发送数据库查询语句(或称,数据库查询请求),以通过服务端120与数据库130进行数据交互,例如进行数据库查询等。可选地,该数据库查询语句可以是结构化查询语言(structured querylanguage,SQL)语句。
本公开实施例对客户端110的实现方式不做限定,示例性地,客户端110可以安装于多种类型的计算设备上,比如智能手机、笔记本电脑、掌上电脑、服务器、数字助理等。
服务端120位于客户端110和数据库130之间,其可以负责具体的服务实现、业务实现等,比如查询业务的实现。示例性地,服务端120可以在接收到客户端110发送的数据库查询语句(例如,SQL语句)后,向数据库130发送该数据库查询语句,以获取针对该数据库查询语句的查询结果。应该理解,本申请实施例提及的服务端,例如可以是指数据库开发平台的服务端、数据库管理平台的服务端等,本申请实施例对此并不限定,只要其位于客户端和数据库之间,负责具体的服务或业务实现即可。
在一些实施例中,服务端120可以以软件+硬件的形式承载于服务器上,以此来实现具体的服务或业务。例如,可以通过软件代码的执行,控制硬件对应执行某些操作,示例性地,该软件可以是由Java、C语言、C++等高级语言编写的。
在一些实施例中,服务端120从数据库130获取到针对某数据库查询语句的查询结果后,可以根据用户端110的请求将获取到的查询结果直接返回给用户端110。
在一些实施例中,服务端120从数据库130获取到针对某数据库查询语句查询结果后,可以对该查询结果进行缓存。基于此,服务端120可以将缓存的查询结果返回给用户端110;或者,基于用户端110的请求对缓存的查询结果进行计算后,将计算得到的查询结果返回给用户端110。需要说明的是,本公开实施例提及的对缓存的查询结果进行计算可以是指,对缓存的查询结果进行选择、投影、联结(join)等数据库操作中的一种或多种。
数据库130可以用于存储海量数据,用户可以根据不同需求进行数据库查询、增加、删除、更改等操作。本公开实施例对数据库130的形式不做具体限定,例如,数据库130可以是云数据库,也可以是本地存储的数据库。又例如,数据库130可以是关系型数据库,也可以是非关系型数据库。又或者,数据库130可以是分布式数据库,也可以是普通数据库。
如前文所述,在一些实施例中,服务端从数据库获取到查询结果后,可以对该查询结果进行缓存,这是因为某些业务场景的需要,例如,在查询结果中包含LOB型字段类型数据的场景下,可能需要对查询结果进行缓存以减小网络开销。作为一个具体示例,服务端可以提供LOB型字段的查看和/或下载功能,这种情况下对用户的查询结果进行缓存后,才可以在用户需要访问某个LOB数据项的时候精确地返回给用户。需要说明的是,LOB字段可以理解为是数据库用于存储大数据对象的字段类型,LOB字段例如可以包括BLOB、CLOB、NLOB、BFILE等。
在服务端需要对查询结果进行缓存的场景下,一方面,由于数据库中的数据存储结构可以理解为是一个二维结构,例如二维矩阵结构,因此服务端在缓存查询结果时应该尽量保留查询结果的二维拓扑结构;另一方面,由于服务端通常有对缓存的查询结果进行计算(例如选择、投影、联结等)的需求,例如进行选择计算后,将某个LOB数据项精确地返回给用户,因此服务端应该能够实现对缓存的查询结果进行高效计算。也就是说,以上两点要求服务端在缓存查询结果时,既能够保留查询结果的拓扑结构,又能够对查询结果进行高效计算。
作为一种实现方式,可以采用键值对(key-value,K-V)的数据结构或采用二维数组的数据结构来实现服务端对查询结果的缓存。换句话说,可以采用K-V的方式或采用二维数组的方式对查询结果进行抽象,即针对查询结果中的某个具体的数据项,可以使用的缓存方式是:采用一个键进行索引,整体采用映射表的方式进行抽象。
如果采用K-V的数据结构对查询结果进行缓存,会丢失查询结果的二维拓扑结构。也就是说,这种缓存方式仅能实现对缓存的查询结果的单点访问,在此基础上,如果要对缓存的查询结果进行计算,产生的计算成本很高。
如果采用二维数组的数据结构对查询结果进行缓存,虽然可以保留查询结果的二维拓扑结构,但是数组结构本身采用顺序存储的特性决定了其无法很方便地对缓存的查询结果进行计算。
此外,无论是采用K-V的数据结构还是采用二维数组的数据结构对查询结果进行缓存,相关技术中总是以磁盘存储的方式将查询结果转存(dump)到硬盘上。应该理解,采用磁盘存储的方式缓存查询结果时,查询结果是以磁盘文件的形式写入磁盘中,这种完全基于文件的存储解决方案会带来很高的IO成本,尤其是在高频小数据写入的场景下性能非常差。而且,采用磁盘存储的方式缓存查询结果时,磁盘的读写速率较慢,导致整体的查询性能较差。
因此,亟待一种新的方式来实现服务端对查询结果的缓存。
为了解决上述问题,本公开实施例提供了一种访问数据库的方法和装置,能够提升对缓存的查询结果进行计算的效率。
下面结合附图,对本公开实施例提供的访问数据库的方法进行详细描述。
图2为本公开实施例提供的一种访问数据库的方法的流程示意图。图2的方法可以应用于服务端,该服务端例如可以是图1中所示的服务端120。该服务端例如可以是通过集成于服务器上的软件+硬件实现的。本公开实施例对数据库的类型不做具体限定,例如,该数据库可以是云数据库,也可以是本地存储的数据库;可以是关系型数据库,也可以是非关系型数据库;可以是分布式数据库,也可以是普通数据库等。访问数据库可以是指通过数据库查询语句对数据库进行操作,例如数据库查询,以访问数据库的查询结果。图2所示的方法可以包括步骤S210至步骤S230。下面对这些步骤进行详细描述。
在步骤S210-步骤S220,从客户端接收数据库查询语句,并向数据库发送该数据库查询语句,以获取针对该数据库查询语句的查询结果。
数据库中的数据一般是以数据表的形式存储的,数据表可以理解为是一种二维存储结构,数据表中存储有多个数据项,各数据项例如可以使用数据表的行坐标和列坐标来索引。对应地,从数据库中获取的针对数据库查询语句的查询结果也可以理解为是数据表的形式,其包括m×n个数据项,或者说,查询结果可以理解为是以m行n列的数据表的形式呈现的。
本公开实施例对数据库查询语句的类型不做限定,例如,数据库查询语句可以是SQL语句。
在步骤S230,基于二维存储结构缓存查询结果。该二维存储结构包括m个横向链表和n个纵向链表,该m个横向链表与n个纵向链表交织,形成包含m×n个节点的十字链表。
在一些实施例中,m个横向链表与n个纵向链表交织可以理解为,m个横向链表与n个纵向链表正交(例如,两两正交)。
在本公开实施例中,以十字链表作为基础的数据结构对查询结果进行抽象,使得该十字链表的m×n个节点与查询结果的m×n个数据项一一对应,即查询结果中的每一个数据项都对应于十字链表中的一个节点。
作为一种实现方式,十字链表的m×n个节点可以直接用于存储查询结果的m×n个数据项,使得十字链表的m×n个节点与查询结果的m×n个数据项一一对应。
作为另一种实现方式,十字链表的m×n个节点可以用于存储查询结果的m×n个数据项的引用,而查询结果的m×n个数据项实际存储在服务端的其他位置,并不存储在十字链表的节点处,通过十字链表中存储的数据项的引用,可以快速查询到实际的数据项。关于十字链表的节点存储数据项的引用,而实际存储在服务端的其他位置的详细描述,可以参见后文,此处暂不赘述。
在一些实施例中,十字链表可以存储于内存中(例如,常驻于内存中),以便用户能够快速访问该十字链表。
在一些实施例中,在以十字链表作为缓存查询结果的数据结构的基础上,还可以对该十字链表进行其他封装和增强,以提升整体查询或计算的效率。示例性地,可以以十字链表作为基础的数据结构,将十字链表封装为二维数据表(例如,二维虚拟表),该二维数据表可以用于指示十字链表中的各链表的行信息与列信息。
如果将十字链表封装为二维数据表(例如二维虚拟表),封装得到的该二维数据表的对象可以包括多种。作为一个示例,二维数据表的对象可以包括前文所述的十字链表,以利用十字链表的基础结构存储数据库的查询结果。作为另一个示例,二维数据表的对象可以包括十字链表的索引信息,该索引信息用于索引十字链表的各链表的表头,以便根据索引信息快速定位到需要访问的记录,换句话说,服务端还可以存储有十字链表的索引信息,以提升十字链表的随机访问性能。作为又一个示例,二维数据表的对象还可以包括查询结果的计算(例如,选择、投影、联结计算等),以便实现对该二维数据表的计算功能。
本公开实施例对十字链表的索引信息的实现形式不做限定。示例性地,该索引信息可以记录于映射表中,映射表中可以存储十字链表中的各行链表的行信息与该行链表的头指针之间的映射关系。本公开实施例对十字链表的索引信息的存储位置不做具体限定,例如,可以在十字链表的表头增加十字链表的索引信息。
服务端基于二维存储结构缓存查询结果后,客户端便可以对该查询结果进行查询。在一些实施例中,服务端可以根据客户端的查询请求,直接将缓存的查询结果返回给客户端。在一些实施例中,服务端可以根据客户端的查询请求,对缓存的查询结果进行计算后,将计算得到的查询结果返回给客户端。对缓存的查询结果进行计算可以包括多种计算类型,本公开实施例对此并不限定。示例性地,对缓存的查询结果进行计算可以包括以下计算类型中的一种或多种:选择计算、投影计算、以及联结计算。
如此一来,采用本公开实施例提供的二维存储结构缓存查询结果时,一方面,十字链表本身就是二维结构,基于十字链表的数据结构缓存查询结果时,可以保留查询结果的二维拓扑结构;另一方面,十字链表是通过横纵两个方向上的多个链表耦合得到的,基于链表本身优异的增加、删除性能(链表能够方便高效地增减节点),使得十字链表拥有高效的计算性能(可以通过增减十字链表中的节点快速实现选择、投影、联结等计算),从而实现对缓存的查询结果的高效计算。
前文提及,服务端可以是通过集成于服务器上的软件+硬件实现的,为了便于理解,下面结合图3,给出服务端的一种示意性结构。应该理解,该结构仅用于示意,而并不用于对服务端的结构造成限定。示例性地,服务端还可以包含其他未列举的部件或元件,或者服务端可以仅包含列举的部分部件或元件。
如图3所示,服务端可以包括计算层310、访问层320以及存储层330。服务端采用软件+硬件结合的方式实现时,此处列举的各层可以是指对软件的一种结构抽象,例如按照代码的功能将其划分为不同的结构层。
计算层310可以用于对从数据库获取的查询结果进行抽象表征,将查询结果的m×n个数据项抽象表征为十字链表中的m×n个节点,使得十字链表的m×n个节点与查询结果的m×n个数据项一一对应。
如前文所述,在一些实施例中,十字链表的m×n个节点可以用于存储查询结果的m×n个数据项的引用,m×n个数据项实际存储在服务端的其他位置。示例性地,在图3所示的结构中,十字链表的m×n个节点可以用于存储查询结果的m×n个数据项的引用,m×n个数据项实际可以存储在存储层330中。
数据项的引用可以包括该数据项的起始存储位置和存储占用空间的大小,以便根据数据项的引用快速定位到数据项实际的存储位置。作为一种实现方式,数据项的起始存储位置可以通过存储逻辑地址来指示,比如访问层320中的逻辑地址等。作为另一种实现方式,数据项的起始存储位置可以通过存储的文件ID和该数据项在该存储文件中的位置偏移量来指示。数据项的存储占用空间的大小用于指示存储该数据项所需的存储空间,存储占用空间例如可以是指字节、兆字节、千兆字节等。
存储层是330可以用于存储查询结果的m×n个数据项,即存储层330可以负责查询结果的实际存储,根据十字链表中的数据项的引用可以快速定位到该数据项在存储层330中的存储位置。
在一些实施例中,存储层330可以包括两级缓存,两级缓存可以位于不同的存储介质中,例如位于读写速率不同的存储介质中。示例性地,两级缓存中的第一级缓存可以位于内存中,第二级缓存可以位于磁盘中。采用两级缓存的存储方式可以保证在海量数据查询场景下,服务端能够在资源占用率可控的前提下相对高效地缓存查询结果。这是因为,数据库查询结果的规模往往很大,如果单独采用内存进行存储,虽然缓存效率较高,但是需要耗费很多资源,导致资源占用率较大;如果单独采用磁盘进行存储,虽然可以降低资源占用率,但是磁盘的存储效率过低,而且磁盘存储会带来很高的IO成本,在高频小数据写入的场景下性能比较差。而采用两级缓存的方式,可以将用户频繁使用的数据放置在内存中以供高速访问,将用户低频使用的数据放置在磁盘中以降低内存消耗,降低资源占用率。换句话说,两级缓存技术既可以保证内存中不会存入海量数据导致溢出,又可以保证用户频繁访问的数据可以常驻内存,实现比较快的写入和读取。
在一些实施例中,存储层330中的数据项可以是以物理数据块(page,或称,存储块)的形式存储的,即存储层的管理对象可以是物理数据块。
在一些实施例中,考虑到计算层与存储层相比,计算层310更靠近用户侧,而存储层330相对远离用户侧一些,因此,也可以将计算层310理解为服务端的顶层结构,将存储层330理解为服务端的底层结构。
下面结合图4,给出计算层和存储层的一个示例。如图4所示,二维存储结构所在的层可以理解为计算层。服务端可以通过计算层对查询结果进行抽象表征,将查询结果抽象为十字链表的数据结构,其中,十字链表的节点用于存储查询结果的m×n个数据项的引用ref,而十字链表中的各节点处存储的ref对应的数据项elt存储在存储层中(例如,内存或磁盘中)。在服务端接收到用户对缓存的数据项的查询请求时,可以通过访问十字链表中的节点存储的ref快速定位到存储层中的实际存储位置以访问与ref对应的elt。本公开实施例对访问十字链表的节点的实现方式不做限定,示例性地,可以按照十字链表的行信息,或者按照十字链表的列信息,又或者按照要访问的数据项elt。
重新参见图3,计算层310和存储层330之间可以设置有访问层320。在十字链表的m×n个节点用于存储m×n个数据项的引用,存储层330用于存储m×n个数据项的情况下,访问层320可以负责将针对目标数据项的访问请求转化为具体的IO请求,以访问存储层中的目标数据项。下面结合图5,对访问层如何将针对数据项的访问请求转化为具体的IO请求进行介绍。
如图5所示,ref用于表示十字链表中的某数据项的引用,ref中包含的信息用于指示该数据项的起始存储位置和存储占用空间的大小,在图5的示例中,数据项的起始存储位置是采用存储文件ID+位置偏移量进行指示的,该数据项的存储占用空间为x字节。
在计算层有针对查询结果的m×n个数据项中的目标数据项的访问请求时,计算层可以向访问层发送针对目标数据项的访问请求,该访问请求中可以包括目标数据项的引用;访问层接收到计算层的访问请求后,可以将目标数据项的引用转换成物理IO请求,并向存储层发送物理IO请求,以访问目标数据项。
具体地,在访问请求为数据写入请求的情况下,访问层可以控制存储层进行目标数据项的数据写入,并根据写入结果向计算层返回目标数据项的引用。在访问请求为数据读取请求的情况下,访问层可以根据计算层发送的访问请求中的目标数据项的引用,控制存储层读取目标数据项返回给计算层。也就是说,在进行存储层的数据读写时,访问层可以决定是否将数据加载至内存以返回给用户。
关于目标数据项的引用的相关介绍可以参见前文对m×n个数据项的引用的介绍,即m×n个数据项和/或目标数据项中的各数据项的引用可以包括各数据项的起始存储位置和存储占用空间的大小。
在存储层包括两级缓存的情况下,访问层还可以负责管理存储层中的物理数据块在两级缓存中的存储位置。作为一种实现方式,存储层中的物理数据块在两级缓存中的存储位置可以是基于物理数据块的被访问频次确定的。访问层可以基于物理数据块的被访问频次确定该物理数据块在两级缓存中的存储位置,并通过存储层来实现对该物理数据块的存储位置的实际管理,具体地,若位于内存中的第一级缓存的剩余容量不足,存储层可以将第一级缓存中最近最少使用的物理数据块换出至位于磁盘中的第二级缓存中。示例性地,可以采用最近最少使用(least recently used,LRU)算法确定需要换出至磁盘的物理数据块有哪些。
从上文对访问层的描述可以看出,访问层作为计算层和存储层之间的桥接,可以直接控制存储层实现数据项的写入与读取,与此同时可以向计算层屏蔽存储层的实现细节,使得计算层可以无需关注数据项的具体存储位置以及如何写入或读取。在计算层需要进行数据项的写入或读取时,只需要向访问层发出访问请求,由访问层来控制数据项的具体写入或具体读取,例如,由访问层控制将数据项写入内存还是写入磁盘,写入内存的位置或写入磁盘的位置等。
在一些实施例中,访问层可以关联有文件。在某些实施例中,也可以理解为,访问层可以被实现为随机访问文件。如此一来,对于计算层而言,数据的写入和读取相当于文件的随机访问;对于存储层而言,数据的写入和读取被访问层转化为具体的物理数据块的创建、更新和获取。
在一些实施例中,访问层被实现为随机访问文件时,该随机访问文件中可以存储有一段连续的逻辑地址,访问层可以记录有该逻辑地址与存储层中的物理地址的映射关系,以便实现对存储层的随机访问。这是因为,存储层提供给访问层的存储空间不一定是连续的(尤其是在存储层可以对应多个访问层的场景下),而访问层往往无法处理不连续的地址空间,因此,可以通过在访问层中抽象出逻辑地址的概念,将访问层实现为随机访问文件,该随机访问文件中包含一段连续的逻辑地址,以使访问层根据逻辑地址与存储层中的物理地址的映射关系实现对存储层的随机访问,提升查询性能。
作为一种实现方式,可以通过在访问层中设置页表的方式将逻辑地址和不连续的物理地址映射起来。
在访问层被实现为随机访问文件的情况下,基于访问层中记录的逻辑地址和存储层中的物理地址的映射关系,计算层针对目标数据项的访问请求可以理解为是被转换为针对随机访问文件的随机访问请求,访问层可以基于该映射关系,将针对随机访问文件的随机访问请求转换成针对存储层的物理IO请求。
下面结合图6,给出存储层和访问层实现的一个示例。
在图6的示例中,存储层包括两级缓存,第一级缓存位于内存中,第二级缓存位于磁盘中。存储层的管理对象是存储块,比如图6中列举的物理数据块0,物理数据块1等等。访问层被实现为随机访问文件,该文件中包括一段连续的逻辑地址,访问层中存储有该逻辑地址与存储层中的物理地址的映射关系,比如图6中列举的逻辑数据块0与存储层中的物理数据块1之间存在映射关系,逻辑数据块1与存储层中的物理数据块2之间存在映射关系等。
对于存储层而言,数据的读取和写入被访问层转化为物理数据块的创建、更新和获取,例如,需要读取逻辑数据块2对应的数据项时,访问层根据记录的逻辑地址与存储层的物理地址的映射关系,确定逻辑数据块2对应的数据存储在存储层的物理数据块8中,从而可以从存储层的物理数据块8中获取对应的数据项。
图6还示出了访问层管理存储层中的物理数据块在两级缓存中的存储位置的示例,例如,物理数据块3和4属于不经常被访问的物理数据块,因此可以通过存储层将其从内存中换出至磁盘;而物理数据块7、8和9属于经常被访问的物理数据块,因此可以将其从磁盘中换入至内存。
在一些实施例中,在新增存储层中存储的物理数据块时可以采用乐观锁机制,该乐观锁机制可以用于对第一级缓存中的部分槽位进行锁定。示例性地,在需要新增物理数据块的情况下,可以根据新增物理数据块的数量对第一级缓存中的部分槽位进行锁定。一方面,对部分缓存加锁能够保证存储层的高并发量和高吞吐量;另一方面,对部分缓存加乐观锁还能够进一步去除加锁/获取锁的开销。
在一些实施例中,在更新存储层中存储的物理数据块时,可以采用悲观锁机制,该悲观锁机制可以用于对需要更新的物理数据块加悲观锁,一方面可以保证缓存一致性,另一方面可以避免脏块不能正确持久化到磁盘而导致的数据不一致。
继续结合图6给出一个示例,比如需要新增一个物理数据块时,可以对第一级缓存中的某个或某些空闲槽位加乐观锁,避免该槽位被其他新建操作抢占,减少重试次数,保证存储层的高并发量和高吞吐量。而具体在修改物理数据块7中的数据项时,可以对物理数据块7加悲观锁,以保证缓存一致性,避免脏块不能正确持久化到磁盘。
上文结合图1至图6,详细描述了本公开的方法实施例,下面结合图7和图8,详细描述本公开的装置实施例。应理解,方法实施例的描述与装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。
图7是本公开一实施例提供的访问数据库的装置的结构示意图。该访问数据库的装置700可以包括接收模块710、第一发送模块720以及缓存模块730。
接收模块710可以被配置为从客户端接收数据库查询语句。
第一发送模块720可以被配置为向数据库发送数据库查询语句,以获取针对数据库查询语句的查询结果,该查询结果包括m×n个数据项。
缓存模块730可以被配置为基于二维存储结构缓存查询结果,以便客户端对查询结果进行查询,其中,二维存储结构包括m个横向链表和n个纵向链表,m个横向链表和n个纵向链表交织,形成包含m×n个节点的十字链表,m×n个节点与m×n个数据项一一对应。
可选地,m×n个节点由服务端的计算层生成,且m×n个节点分别用于存储m×n个数据项的引用,m×n个数据项存储在服务端的存储层中,计算层和存储层之间设置有访问层,装置700还包括:第二发送模块,用于向访问层发送针对m×n个数据项中的目标数据项的访问请求,访问请求包括目标数据项的引用;转换模块,用于利用访问层将目标数据项的引用转换成IO请求,并向存储层发送IO请求,以访问目标数据项。
可选地,访问层被实现为随机访问文件,随机访问文件中包含一段连续的逻辑地址,访问层记录有逻辑地址与存储层中的物理地址的映射关系,目标数据项的访问请求被转换为针对随机访问文件的随机访问请求,访问层基于映射关系将针对随机访问文件的随机访问请求转换成针对存储层的物理IO请求。
可选地,存储层包括两级缓存,两级缓存中的第一级缓存位于内存中,两级缓存中的第二级缓存位于磁盘中,访问层用于管理存储层中的物理数据块在两级缓存中的存储位置。
可选地,存储层中的物理数据块在两级缓存中的存储位置是基于物理数据块的被访问频次确定的,若第一级缓存的剩余容量不足,存储层用于将第一级缓存中最近最少使用的物理数据块换出至第二级缓存中。
可选地,服务端还存储有十字链表的索引信息,索引信息用于索引十字链表中的各链表的表头。
可选地,m×n个数据项和/或目标数据项中的各数据项的引用包括各数据项的起始存储位置和存储占用空间的大小。
可选地,在新增存储层中存储的物理数据块时采用乐观锁机制,乐观锁机制用于对所述存储层的第一级缓存中的部分槽位进行锁定,乐观锁是基于信号量实现的。
可选地,在更新存储层中存储的物理数据块时采用悲观锁机制,悲观锁机制用于对需要更新的物理数据块加悲观锁。
可选地,装置700还包括:计算模块,用于对基于二维存储结构缓存的查询结果进行计算,以将计算得到的查询结果返回给客户端,其中,对缓存的查询结果进行计算包括以下计算类型中的一种或多种:选择计算、投影计算、以及联结计算。
图8是本公开另一实施例提供的访问数据库的装置的结构示意图。图8所示的装置800例如可以是服务器。装置800可以包括存储器810和处理器820。存储器810可以用于存储可执行代码。处理器820可以用于执行存储器810中存储的可执行代码,以实现前文描述的各个方法中的步骤。在一些实施例中,该装置800还可以包括网络接口830,处理器820与外部设备的数据交换可以通过该网络接口830实现。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(Digital Video Disc,DVD))、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
本领域普通技术人员可以意识到,结合本公开实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。

Claims (21)

1.一种访问数据库的方法,所述方法应用于服务端,所述服务端位于客户端和所述数据库之间,所述方法包括:
从所述客户端接收数据库查询语句;
向所述数据库发送所述数据库查询语句,以获取针对所述数据库查询语句的查询结果,所述查询结果包括m×n个数据项;
基于二维存储结构缓存所述查询结果,以便所述客户端对所述查询结果进行查询,其中,所述二维存储结构包括m个横向链表和n个纵向链表,所述m个横向链表和所述n个纵向链表交织,形成包含m×n个节点的十字链表,所述m×n个节点与所述m×n个数据项一一对应。
2.根据权利要求1所述的方法,所述m×n个节点由所述服务端的计算层生成,且所述m×n个节点分别用于存储所述m×n个数据项的引用,所述m×n个数据项存储在所述服务端的存储层中,所述计算层和所述存储层之间设置有访问层,
所述方法还包括:
向所述访问层发送针对所述m×n个数据项中的目标数据项的访问请求,所述访问请求包括所述目标数据项的引用;
利用所述访问层将所述目标数据项的引用转换成IO请求,并向所述存储层发送所述IO请求,以访问所述目标数据项。
3.根据权利要求2所述的方法,所述访问层被实现为随机访问文件,所述随机访问文件中包含一段连续的逻辑地址,所述访问层记录有所述逻辑地址与所述存储层中的物理地址的映射关系,所述目标数据项的访问请求被转换为针对所述随机访问文件的随机访问请求,所述访问层基于所述映射关系将针对所述随机访问文件的随机访问请求转换成针对所述存储层的物理IO请求。
4.根据权利要求2所述的方法,所述存储层包括两级缓存,所述两级缓存中的第一级缓存位于内存中,所述两级缓存中的第二级缓存位于磁盘中,所述访问层用于管理所述存储层中的物理数据块在所述两级缓存中的存储位置。
5.根据权利要求4所述的方法,所述存储层中的物理数据块在所述两级缓存中的存储位置是基于所述物理数据块的被访问频次确定的,若所述第一级缓存的剩余容量不足,所述存储层用于将所述第一级缓存中最近最少使用的物理数据块换出至所述第二级缓存中。
6.根据权利要求1所述的方法,所述服务端还存储有所述十字链表的索引信息,所述索引信息用于索引所述十字链表中的各链表的表头。
7.根据权利要求2所述的方法,所述m×n个数据项和/或所述目标数据项中的各数据项的引用包括所述各数据项的起始存储位置和存储占用空间的大小。
8.根据权利要求2所述的方法,在新增所述存储层中存储的物理数据块时采用乐观锁机制,所述乐观锁机制用于对所述存储层的第一级缓存中的部分槽位进行锁定,所述乐观锁是基于信号量实现的。
9.根据权利要求2所述的方法,在更新所述存储层中存储的物理数据块时采用悲观锁机制,所述悲观锁机制用于对需要更新的物理数据块加悲观锁。
10.根据权利要求1所述的方法,在所述基于二维存储结构缓存所述查询结果之后,所述方法还包括:
对基于所述二维存储结构缓存的所述查询结果进行计算,以将计算得到的查询结果返回给所述客户端,其中,对缓存的所述查询结果进行计算包括以下计算类型中的一种或多种:选择计算、投影计算、以及联结计算。
11.一种访问数据库的装置,所述装置配置于服务端,所述服务端位于客户端和所述数据库之间,所述装置包括:
接收模块,用于从所述客户端接收数据库查询语句;
第一发送模块,用于向所述数据库发送所述数据库查询语句,以获取针对所述数据库查询语句的查询结果,所述查询结果包括m×n个数据项;
缓存模块,用于基于二维存储结构缓存所述查询结果,以便所述客户端对所述查询结果进行查询,其中,所述二维存储结构包括m个横向链表和n个纵向链表,所述m个横向链表和所述n个纵向链表交织,形成包含m×n个节点的十字链表,所述m×n个节点与所述m×n个数据项一一对应。
12.根据权利要求11所述的装置,所述m×n个节点由所述服务端的计算层生成,且所述m×n个节点分别用于存储所述m×n个数据项的引用,所述m×n个数据项存储在所述服务端的存储层中,所述计算层和所述存储层之间设置有访问层,
所述装置还包括:
第二发送模块,用于向所述访问层发送针对所述m×n个数据项中的目标数据项的访问请求,所述访问请求包括所述目标数据项的引用;
转换模块,用于利用所述访问层将所述目标数据项的引用转换成IO请求,并向所述存储层发送所述IO请求,以访问所述目标数据项。
13.根据权利要求12所述的装置,所述访问层被实现为随机访问文件,所述随机访问文件中包含一段连续的逻辑地址,所述访问层记录有所述逻辑地址与所述存储层中的物理地址的映射关系,所述目标数据项的访问请求被转换为针对所述随机访问文件的随机访问请求,所述访问层基于所述映射关系将针对所述随机访问文件的随机访问请求转换成针对所述存储层的物理IO请求。
14.根据权利要求12所述的装置,所述存储层包括两级缓存,所述两级缓存中的第一级缓存位于内存中,所述两级缓存中的第二级缓存位于磁盘中,所述访问层用于管理所述存储层中的物理数据块在所述两级缓存中的存储位置。
15.根据权利要求14所述的装置,所述存储层中的物理数据块在所述两级缓存中的存储位置是基于所述物理数据块的被访问频次确定的,若所述第一级缓存的剩余容量不足,所述存储层用于将所述第一级缓存中最近最少使用的物理数据块换出至所述第二级缓存中。
16.根据权利要求11所述的装置,所述服务端还存储有所述十字链表的索引信息,所述索引信息用于索引所述十字链表中的各链表的表头。
17.根据权利要求12所述的装置,所述m×n个数据项和/或所述目标数据项中的各数据项的引用包括所述各数据项的起始存储位置和存储占用空间的大小。
18.根据权利要求12所述的装置,在新增所述存储层中存储的物理数据块时采用乐观锁机制,所述乐观锁机制用于对所述存储层的第一级缓存中的部分槽位进行锁定,所述乐观锁是基于信号量实现的。
19.根据权利要求12所述的装置,在更新所述存储层中存储的物理数据块时采用悲观锁机制,所述悲观锁机制用于对需要更新的物理数据块加悲观锁。
20.根据权利要求11所述的装置,所述装置还包括:
计算模块,用于对基于所述二维存储结构缓存的所述查询结果进行计算,以将计算得到的查询结果返回给所述客户端,其中,对缓存的所述查询结果进行计算包括以下计算类型中的一种或多种:选择计算、投影计算、以及联结计算。
21.一种访问数据库的装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现权利要求1-10中任一项所述的方法。
CN202210761260.5A 2022-06-30 2022-06-30 访问数据库的方法和装置 Active CN114817341B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210761260.5A CN114817341B (zh) 2022-06-30 2022-06-30 访问数据库的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210761260.5A CN114817341B (zh) 2022-06-30 2022-06-30 访问数据库的方法和装置

Publications (2)

Publication Number Publication Date
CN114817341A CN114817341A (zh) 2022-07-29
CN114817341B true CN114817341B (zh) 2022-09-06

Family

ID=82523158

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210761260.5A Active CN114817341B (zh) 2022-06-30 2022-06-30 访问数据库的方法和装置

Country Status (1)

Country Link
CN (1) CN114817341B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115866334B (zh) * 2023-02-27 2023-05-16 成都华域天府数字科技有限公司 一种在视频流程中裁剪和关联内容的数据处理方法
CN116821174B (zh) * 2023-07-17 2024-07-19 深圳计算科学研究院 一种基于逻辑数据块的数据查询方法及其装置
CN117577259B (zh) * 2024-01-16 2024-04-09 智业软件股份有限公司 一种基于LibreOffice生成轻量级文书套件的方法
CN118363999A (zh) * 2024-06-17 2024-07-19 阿里云计算有限公司 数据查询方法、设备、存储介质和程序

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110489490A (zh) * 2019-08-23 2019-11-22 上海新炬网络信息技术股份有限公司 基于分布式数据库的数据存储和查询方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AUPR796701A0 (en) * 2001-09-27 2001-10-25 Plugged In Communications Pty Ltd Database query system and method
CN100399338C (zh) * 2002-06-26 2008-07-02 联想(北京)有限公司 一种数据记录处理方法
CN101346000B (zh) * 2008-07-29 2011-06-29 方圆信通科技(北京)有限公司 基于gps和移动终端的提供本地移动地理信息服务的系统
CN104717088B (zh) * 2013-12-17 2018-01-16 北京中科网威信息技术有限公司 一种基于十字链表的工业防火墙规则库分析方法
CN104077084B (zh) * 2014-07-22 2017-07-21 中国科学院上海微系统与信息技术研究所 分布式随机访问文件系统及其访问控制方法
CN105183394B (zh) * 2015-09-21 2018-09-04 北京奇虎科技有限公司 一种数据存储处理方法和装置
CN111949673B (zh) * 2020-08-04 2024-02-20 贵州易鲸捷信息技术有限公司 基于Hbase存储的分布式悲观锁及其实现方法
CN114138821A (zh) * 2022-01-12 2022-03-04 广州思迈特软件有限公司 一种数据库查询方法、系统和电子设备

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110489490A (zh) * 2019-08-23 2019-11-22 上海新炬网络信息技术股份有限公司 基于分布式数据库的数据存储和查询方法

Also Published As

Publication number Publication date
CN114817341A (zh) 2022-07-29

Similar Documents

Publication Publication Date Title
CN114817341B (zh) 访问数据库的方法和装置
CN107168657B (zh) 一种基于分布式块存储的虚拟磁盘分层缓存设计方法
CN110262922B (zh) 基于副本数据日志的纠删码更新方法及系统
US7716445B2 (en) Method and system for storing a sparse file using fill counts
US20160364407A1 (en) Method and Device for Responding to Request, and Distributed File System
EP1265152B1 (en) Virtual file system for dynamically-generated web pages
CN104317736B (zh) 一种分布式文件系统多级缓存实现方法
CN111177143B (zh) 键值数据存储方法、装置、存储介质与电子设备
US11314689B2 (en) Method, apparatus, and computer program product for indexing a file
CN110555001B (zh) 数据处理方法、装置、终端及介质
CN115427941A (zh) 数据管理系统和控制的方法
CN102694828A (zh) 一种分布式缓存系统数据存取的方法及装置
CN110147345A (zh) 一种基于rdma的键值存储系统及其工作方法
KR100654462B1 (ko) 캐쉬 메모리를 메모리 블록으로 나누어 파일의 데이터를저장하는 캐쉬 방법 및 캐쉬 시스템
CN106164874B (zh) 多核系统中数据访问者目录的访问方法及设备
CN116894041B (zh) 数据存储方法、装置、计算机设备及介质
CN116340205B (zh) 访问请求处理方法以及缓存装置
US20070299890A1 (en) System and method for archiving relational database data
CN115878625A (zh) 数据处理方法和装置及电子设备
US7437528B1 (en) Gang blocks
CN108984432B (zh) 一种处理io请求的方法及装置
CN115509437A (zh) 存储系统、网卡、处理器、数据访问方法、装置及系统
KR100785774B1 (ko) 객체 기반 파일 입출력 시스템 및 방법
Wei et al. A high-bandwidth and low-cost data processing approach with heterogeneous storage architectures
CN108694209B (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