CN111400312B - 一种基于改进lsm树的边缘存储数据库 - Google Patents
一种基于改进lsm树的边缘存储数据库 Download PDFInfo
- Publication number
- CN111400312B CN111400312B CN202010114813.9A CN202010114813A CN111400312B CN 111400312 B CN111400312 B CN 111400312B CN 202010114813 A CN202010114813 A CN 202010114813A CN 111400312 B CN111400312 B CN 111400312B
- Authority
- CN
- China
- Prior art keywords
- module
- data
- value
- database
- responsible
- 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/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- 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
- G06F16/2255—Hash tables
-
- 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
- G06F16/2272—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/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
- G06F16/2358—Change logging, detection, and notification
-
- 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/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/18—Multiprotocol handlers, e.g. single devices capable of handling multiple protocols
-
- 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)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Fuzzy Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于改进LSM树的边缘存储数据库,包括:索引模块,负责数据内部键和地址信息的维护;值存储模块,负责数据内部键和实际值信息的维护;数据库功能模块,将多种复杂数据结构转换为内部键‑值对;网络模块,提供多路复用的TCP服务;数据库同步模块,提供数据库多节点之间的主从同步和多主同步;用户服务模块,通过多种标准化接口与用户进行直接交互。本发明通过对LSM树的改进和多模块的协作,成功构建了一个高性能,低损耗,高可用,标准化的边缘存储数据库,相对于现有的物联网边缘数据存储系统,其写入放大显著降低。
Description
技术领域
本发明涉及边缘存储、物联网、嵌入式、闪存存储、数据库的技术领域,尤其是一种基于改进LSM树的边缘存储数据库。
背景技术
物联网技术的迅猛发展催生了大量的物理位置处于网络边缘的终端,形成了错综复杂的边缘网络。但与此同时,因网络条件,安全隐私,成本预算等原因,传统的集中式的云计算面对边缘网络显得力不从心。因此,更接近数据源,更低成本,更少流量,更加安全的边缘计算得到了迅猛的发展,而边缘存储作为边缘计算中的核心环节,正变得越来越重要。
边缘存储与传统的数据存储有两个显著不同:
其一是应用情景的不同:第一,边缘存储的数据形式为海量小数据,使用传统的关系数据库对其进行管理会产生大量的冗余元数据,影响性能。第二,边缘数据具有天然的时序性,往往与时间有强关联,且对边缘数据进行利用时,也高度依赖其时序性。第三,边缘存储的应用场景为多写少读。传感器每时每刻都在采集新的数据,产生新的数据写入,但只有对边缘节点数据进行同步时,才会产生读操作。
其二是硬件条件的不同,传统机械硬盘体积庞大,功耗高,对震动非常敏感,因此很难用在小型化的移动设备里,在物联网边缘存储环境中非常少见。物联网环境中的存储设备通常基于NAND Flash,如SD卡。由于SD卡通常采用TLC颗粒而非MLC颗粒,SD卡的寿命本就远远不如传统机械硬盘和服务器用固态硬盘。更严重的是,SD卡等闪存设备,和固态硬盘类似,对写入放大高度敏感,过多的写入会导致SD卡寿命显著降低,因此,物联网闪存设备需要低写入放大的存储方案。
此外,目前边缘计算领域还没有统一的标准,使用较为广泛的方案主要为SQLite等本地数据库,缺乏边缘数据整合所需要的数据同步能力,增加了开发成本。
发明内容
本发明的目的在于克服现有数据库产品面对物联网边缘存储场景时的不足和现有数据库产品面对物联网闪存设备时的不足及现有边缘存储设备写入放大敏感的缺陷,提出了一种高性能、高可用,低损耗、实用性极强的基于改进LSM树的边缘存储数据库,可以满足物联网边缘存储场景的数据存储需求和物联网闪存设备低写入放大的需求,进而提高物联网设备的使用寿命,并为边缘计算做基础功能保障。
为实现上述目的,本发明所提供的技术方案为:一种基于改进LSM树的边缘存储数据库,包括:
索引模块,负责存储数据的内部键和地址信息,并负责维护内部键的有序性;
值存储模块,负责存储和维护数据内部键和实际的值,并负责对数据库进行垃圾回收,避免空间放大;
数据库功能模块,负责将多种数据结构转换为内部键-值对的形式,以便将数据存储到值存储模块;
网络模块,负责提供基于多路复用技术的TCP服务,使用户能够通过网络进行数据库访问;
数据库同步模块,负责提供数据库之间的主从同步服务和多主同步服务;
用户服务模块,负责通过RESP协议和HTTP协议,以Redis服务和时序索引服务两种方式,与用户进行直接交互。
进一步,所述索引模块包括LSM树模块和地址结构存储模块,其中:
所述LSM树模块基于levelDB实现,通过归并的方式实现内部键的顺序排列,负责根据字典序对数据的内部键进行有序维护,并存储内部键和数据的地址;
所述地址结构存储模块负责将值存储模块中的数据所在的值日志文件编号、数据长度、数据在文件中的位置转换为结构化的地址信息,再将地址信息提供给LSM树模块进行存储。
进一步,所述值存储模块包括值日志模块和垃圾回收模块,其中:
所述值日志模块负责将值数据进行分文件存储,存储到多个值日志文件中,有新的数据写入时,值日志模块判断当前值日志文件大小是否已经到达用户设置的阈值,若已到达,则生成新的值日志文件,而后值日志模块将“内部键-值”封装为一条记录,写入到当前值日志文件中,并返回值日志文件编号、数据长度、数据在文件中的位置;
所述垃圾回收模块包括值日志信息文件、垃圾回收线程与临时的写入缓存,该模块负责值日志模块中值日志文件的垃圾回收;所述值日志信息文件用于统计每个值日志文件中有多少数据应被清除以及每个值日志文件的垃圾回收进度;所述垃圾回收线程负责检查值日志信息文件,一旦发现某值日志文件中应被清除的数据数达到用户配置的阈值,且该值日志文件不是当前值日志文件,就开始垃圾回收工作,当进行垃圾回收工作时,首先读取该文件的垃圾回收进度,从该进度位置开始,遍历该文件,依次访问索引模块判断该数据是否已被清除,若该数据未被清除,则将该数据写入临时写入缓存,直到遍历到文件结束位置或收到停止命令,遍历结束后,垃圾回收线程将写入缓存中数据一次性重新写入到数据库中,并删除操作中的值日志文件,释放磁盘空间。
进一步,所述数据库功能模块包括哈希表模块、集合模块、有序集合模块和队列模块,其中:
所述哈希表模块负责将结构化的哈希表的“表名-键-值”结构转换为值存储模块能够存储的内部键,并保证同哈希表内数据的内部键有序;
所述集合模块负责将结构化的集合的“集合名-值”结构转换为索引模块能够存储的内部键,并保证同集合内的数据具有唯一性;
所述有序集合模块负责将结构化的有序集合的“集合名-分数-值”结构转换为索引模块能够存储的内部键,并保证同集合内的数据的内部键基于分数有序排列,以及同集合内的数据具有唯一性;
所述队列模块负责将结构化的队列的“队列名-队列序号-值”结构转换为索引模块能够存储的内部键,并保证同队列内的数据基于队列序号有序排列。
进一步,所述网络模块包括监听线程模块、工作线程池模块和多路复用队列模块,其中:
所述监听线程模块负责监听网络请求,建立对应的信道,并将信道存储到多路复用队列模块中;
所述多路复用队列模块负责对所有信道进行管理,利用select系统命令获取信道状态,当信道有活动时,交给工作线程池模块处理;
所述工作线程池模块负责解析来自多路复用队列模块的活动信道中的请求,将这些请求交给数据库功能模块中对应的函数处理,并将返回的结果传递给收到请求的信道。
进一步,所述数据库同步模块包括同步序号模块和传输模块,其中:
所述同步序号模块负责维护节点间的同步状态,在写入操作发生时,同步序号模块将一条唯一同步序号与应写入的数据一并写入值存储模块,并通过同步序号来判断同步状态;在主从同步中,当且仅当主数据库收到的来自从数据库的最新同步序号与主数据库的最新同步序号相同,主从数据库才处于同步状态;在多主同步中,当且仅当两节点收到的来自对方的本节点的最新同步序号与自己的最新同步序号相同,两节点才处于同步状态;
所述传输模块基于网络模块和同步序号模块,利用TCP协议将未同步的值存储模块中的记录进行同步,直到主从数据库或多主数据库达到同步状态。
进一步,所述用户服务模块包括RESP模块和时序索引模块,其中:
所述RESP模块负责基于网络模块,实现RESP协议,使用户能够通访问Redis服务的方式对数据库进行访问;
所述时序索引模块负责基于网络模块和HTTP协议,提供用于读写时序数据的接口,使用户能够将本数据库作为时序数据库使用。
本发明与现有技术相比,具有如下优点与有益效果:
1、针对物联网设备存储介质多为闪存,寿命较低,对写入放大高度敏感的特点,本数据库采用改进LSM树作为存储引擎,利用键值分离的方法大幅度的降低了写入放大,能够有效提高闪存设备的使用寿命,并节省闪存设备中的写入带宽。
2、针对物联网闪存设备性能不佳,随机读取较慢的问题,本数据库键值分离的改进LSM树存储引擎,相对于传统LSM树存储引擎,能够提高LSM树浅层中数据数量,降低LSM树的高度,进而提高随机读取的性能。
3、针对物联网边缘终端设备缺乏标准化的数据存储方案的特点,本数据库实现了RESP协议,因此支持使用Redis客户端和Twemproxy等Redis配套工具对本存储进行管理,大大降低了开发成本,方便用户使用。
4、针对物联网边缘存储数据库多为本地数据库的现状,本数据库可以通过TCP访问,作为网络数据库使用,更为便捷。且本数据库通过IO多路服用的方式,提高了TCP访问的并行性能。
5、本数据库具有同步功能,能够进行主从同步和多主同步,因此具有较高的容灾能力和可用性,配合其他保活工具能够保障边缘存储中数据的稳定性。
6、针对物联网数据往往具有时序性的特点,本数据库提供了可单独启停的时序索引模块,能够以时间为索引,快速的查找所需时间段的数据,对物联网数据进行管理,同时,当用户不需要该模块时,可以单独关闭该模块。
附图说明
图1是本发明模块关系较佳实例结构图。
图2是本发明值存储模块与索引模块较佳实例结构图。
图3是本发明值存储模块与索引模块较佳实例数据写入流程图。
图4是本发明值存储模块较佳实例垃圾回收结构图。
图5是本发明值存储模块较佳实例垃圾回收流程图。
具体实施方式
下面结合具体实施例对本发明作进一步说明。
本实施例所提供的基于改进LSM树的边缘存储数据库,包含索引模块,值存储模块,数据库功能模块,网络模块,数据库同步模块和用户服务模块。
所述索引模块,负责存储数据的内部键和地址信息,并负责维护内部键的有序性;所述索引模块包括LSM树模块和地址结构存储模块,其中:
所述LSM树模块基于levelDB实现,通过归并的方式实现内部键的顺序排列,负责根据字典序对数据的内部键进行有序维护,并存储内部键和数据的地址;所述地址结构存储模块负责将值存储模块中的数据所在的值日志文件编号、数据长度、数据在文件中的位置转换为结构化的地址信息,再将地址信息提供给LSM树模块进行存储。
所述值存储模块,负责存储和维护数据内部键和实际的值,并负责对数据库进行垃圾回收,避免空间放大;所述值存储模块包括值日志模块和垃圾回收模块,其中:
所述值日志模块负责将值数据进行分文件存储,存储到多个值日志文件中,有新的数据写入时,值日志模块判断当前值日志文件大小是否已经到达用户设置的阈值,若已到达,则生成新的值日志文件,而后值日志模块将“内部键-值”封装为一条记录,写入到当前值日志文件中,并返回值日志文件编号、数据长度、数据在文件中的位置;所述垃圾回收模块包括值日志信息文件、垃圾回收线程与临时的写入缓存,该模块负责对值日志模块中值日志文件的垃圾回收;所述值日志信息文件用于统计每个值日志文件中有多少数据应被清除以及每个值日志文件的垃圾回收进度;所述垃圾回收线程负责检查值日志信息文件,一旦发现某值日志文件中应被清除的数据数达到用户配置的阈值,且该值日志文件不是当前值日志文件,就开始垃圾回收工作,当进行垃圾回收工作时,首先读取该文件的垃圾回收进度,从该进度位置开始,遍历该文件,依次访问索引模块判断该数据是否已被清除,若该数据未被清除,则将该数据写入临时写入缓存,直到遍历到文件结束位置或收到停止命令,遍历结束后,垃圾回收线程将写入缓存中数据一次性重新写入到数据库中,并删除操作中的值日志文件,释放磁盘空间。
所述数据库功能模块,负责将多种数据结构转换为内部键-值对的形式,以便将数据存储到值存储模块;所述数据库功能模块包括哈希表模块、集合模块、有序集合模块和队列模块,其中:
所述哈希表模块负责将结构化的哈希表的“表名-键-值”结构转换为值存储模块能够存储的内部键,并保证同哈希表内数据的内部键有序;所述集合模块负责将结构化的集合的“集合名-值”结构转换为索引模块能够存储的内部键,并保证同集合内的数据具有唯一性;所述有序集合模块负责将结构化的有序集合的“集合名-分数-值”结构转换为索引模块能够存储的内部键,并保证同集合内的数据的内部键基于分数有序排列,以及同集合内的数据具有唯一性;所述队列模块负责将结构化的队列的“队列名-队列序号-值”结构转换为索引模块能够存储的内部键,并保证同队列内的数据基于队列序号有序排列。
所述网络模块,负责提供基于多路复用技术的TCP服务,使用户能够通过网络进行数据库访问;所述网络模块包括监听线程模块、工作线程池模块和多路复用队列模块,其中:
所述监听线程模块负责监听网络请求,建立对应的信道,并将信道存储到多路复用队列模块中;所述多路复用队列模块负责对所有信道进行管理,利用select系统命令获取信道状态,当信道有活动时,交给工作线程池模块处理;所述工作线程池模块负责解析来自多路复用队列模块的活动信道中的请求,将这些请求交给数据库功能模块中对应的函数处理,并将返回的结果传递给收到请求的信道。
所述数据库同步模块,负责提供数据库之间的主从同步服务和多主同步服务;所述数据库同步模块包括同步序号模块和传输模块,其中:
所述同步序号模块负责维护节点间的同步状态,在写入操作发生时,同步序号模块将一条唯一同步序号与应写入的数据一并写入值存储模块,并通过同步序号来判断同步状态;在主从同步中,当且仅当主数据库收到的来自从数据库的最新同步序号与主数据库的最新同步序号相同,主从数据库才处于同步状态;在多主同步中,当且仅当两节点收到的来自对方的本节点的最新同步序号与自己的最新同步序号相同,两节点才处于同步状态;所述传输模块基于网络模块和同步序号模块,利用TCP协议将未同步的值存储模块中的记录进行同步,直到主从数据库或多主数据库达到同步状态。
所述用户服务模块,负责通过RESP协议和HTTP协议,以Redis服务和时序索引服务两种方式,与用户进行直接交互;所述用户服务模块包括RESP模块和时序索引模块,其中:
所述RESP模块负责基于网络模块,实现RESP协议,使用户能够通访问Redis服务的方式对数据库进行访问;所述时序索引模块负责基于网络模块和HTTP协议,提供用于读写时序数据的接口,使用户能够将本数据库作为时序数据库使用。
基于上述模块可以构建一个高性能、高可用、低写入、放大功能完备的边缘存储数据库。模块间关系如图1所示。
本实例中,索引模块与值存储模块基于levelDB进行改进,将levelDB的写入前日志改造为值存储模块,而levelDB的LSM树则作为索引模块的一部分,仅存储内部键和值存储模块中数据的地址。值存储模块由多个值存储日志文件构成,值存储模块与索引模块的结构如图2所示。
对于已经转换为内部键的键值对的写入,如图3所示,具体步骤如下:
输入:内部键与值
步骤1:将内部键和值写入值存储模块的当前值日志文件:先检查值存储模块中的当前值日志文件大小是否已到达设定阈值,若已达到则新建一个值日志文件,并将该新建的值日志文件设置为当前值日志文件,再写入数据,否则直接写入数据。
步骤2:获取数据所在的值日志文件编号,值日志文件中数据所在的位置,以及数据长度,封装成值地址。
步骤3:将值地址与内部键一起存储到索引模块的LSM树中。
本实例中,数据的读取分为两个步骤,首先,数据库根据内部键访问索引模块获取内部键对应的地址信息,之后,数据库根据地址信息从值存储模块的值日志文件中读取到对应记录。对数据实际值进行读取的过程具体步骤如下:
输入:内部键
步骤1:根据内部键,调用获取地址方法,从索引模块的LSM树中获取内部键-地址对。
步骤2:根据获取到的地址,解析其中的值日志文件编号,数据所在位置,数据长度,从值存储模块的值日志文件中获取内部键和它对应的真正的值。
步骤3:将内部键-值对返回。
对于本实例的索引模块与值存储模块,最复杂的是它们的垃圾回收机制。由于键值分离,值存储模块中的数据并不能确保在需要被清理时及时清理,因此需要异步的垃圾回收。在levelDB中,删除或更新一个值,则会向LSM树中写入一条新的数据,在对levelDB中各层级进行压缩时,将失效的数据清除。因此,对于本实例,垃圾回收也通过数据压缩触发。本实例的垃圾回收模块由值日志信息文件,垃圾回收线程组成。值日志信息文件记录三个信息:值日志文件编号,该文件中已经被移除的标记数,该文件垃圾回收进度。垃圾回收相关模块架构如图4所示。整个垃圾回收流程具体过程如图5所示,步骤如下:
步骤1:索引模块的LSM树模块触发压缩。
步骤2:压缩过程中,基于内部键版本信息和删除标记,获取到需要清除的内部键和对应的值存储模块地址。
步骤3:从获取到的地址中解析出对应的值日志文件编号,在值日志信息文件中,增加该编号对应的被移除标记数。
步骤4:检查该值日志文件编号对应的被移除数是否到达设定的垃圾回收阈值,若未到达垃圾回收阈值或该值日志文件是当前值日志文件,流程终止;若已到到达垃圾回收阈值且该值日志文件不是当前值日志文件,则创建一个写入缓存。
步骤5:从值信息文件读取该值日志文件的垃圾回收进度(默认为0),以该进度对应的位置为起点遍历该值日志文件,获取内部键。
步骤6:依次检查指针对应的内部键是否存在于索引模块中,若存在,则将该内部键和值写入到写入缓存,再移动指针;若不存在,则移动指针。
步骤7:若指针已到达值日志文件末尾或收到数据库关闭命令,则将写入缓存中的数据写入到数据库,更新值日志信息文件中该值日志文件编号对应的进度。之后,删除该值日志文件释放占用的磁盘空间。
本数据库实例的同步方式包括主从同步和多主同步。对于主从同步,其具体流程如下:
步骤1:根据配置文件,周期性的与主节点通信,告知主节点自己当前最新同步序号。
步骤2:主节点收到来自从节点的同步序号后,从该同步序号开始将自己的记录发给从节点,直到主节点的最新同步序号与发给从节点的记录的同步序号相同。
本数据库实例的多主同步,则是由多节点互为主从来实现,通过同步序号机制来保证不存在循环记录的情况。即,同步序号中存储了该条记录首次写入的节点的相关信息,在进行多主同步时,该节点信息被作为衡量依据之一。多主同步需要有以下两个前提:其一,集群中所有节点的配置文件都包含集群中所有其他节点;其二,集群中任意两个不同节点不在同一时间写入两个相同的内部键。在这两个前提下,多主同步中一个节点与集群中另一个节点进行同步时,会将自己存储的该节点写入的数据的最大同步序号告知对方。多主同步流程如下:
步骤1:节点甲周期性的与自己配置文件中的其他节点进行通信,告知其他节点自己存储的来自其他节点的数据的各自的最新同步序号。
步骤2:其他节点乙收到节点甲的来自节点乙的记录的最大序号后,从该序号开始,将自己的记录发送给节点甲,直到自己的最新同步序号与发给节点甲的记录的同步序号相同。
由于本数据库有多个模块,且各模块之间存在依赖关系,因此其启停流程较为复杂。在本数据库实例的多个模块中,数据库功能模块,索引模块和值存储模块是静态的编程库,不存在启动或停止的概念,因此本实例启动流程具体步骤如下:
步骤1:启动网络模块。
步骤2:启动数据库同步模块。
步骤3:启动用户服务模块中的RESP模块。
步骤4:启动用户服务模块中的时序索引模块。
步骤5:垃圾回收线程启动,扫描值日志信息文件。若值日志信息文件记录了已到达垃圾回收阈值的非当前值日志文件编号,则读取其垃圾回收进度,继续进行垃圾回收。
步骤6:与配置文件中的其他节点进行通信,若未到达同步状态,则继续进行同步。
本实例终止流程具体步骤如下:
步骤1:用户服务模块中的时序索引模块停止接收新请求。
步骤2:用户服务模块中的RESP模块停止接收新请求。
步骤3:完成与其他节点的当前同步任务后,停止与其他节点建立新的通信。
步骤4:若当前正在进行垃圾回收,则将正进行垃圾回收的值日志文件编号和当前指针位置写入到值日志信息文件中,之后停止垃圾回收线程。
步骤5:停止数据库同步模块。
步骤6:等待网络模块中当前请求全部处理完毕,停止网络模块。
本数据库完整的数据写入,数据读取过程,依赖多个模块的相互协作。以最为复杂的时序数据为例,在数据库正常运行的状态下,本数据库实例时序数据的写入流程具体步骤如下:
步骤1:用户服务模块中的时序索引模块对应端口收到用户HTTP请求,解析用户写入命令,将用户的写入命令转换成对网络模块中相关方法的远程调用。
步骤2:网络模块中相关方法被时序索引模块调用后,调用数据库功能模块数据结构相关的函数。
步骤3:数据库功能模块数据结构相关的函数被调用后,通过协议转换,将复杂数据结构操作命令转换成简单内部键-值存储操作命令,调用值存储模块的写入方法。
步骤4:值存储模块收到调用,将内部键-值信息存储在值日志文件中,并获取数据所在值日志文件的编号,数据长度以及数据在值日志文件中的位置,利用这些信息调用索引模块。
步骤5:索引模块的地址结构模块利用上述信息生成数据地址,将键与地址存储到索引模块的LSM树模块中。
在本数据库实例运行正常的情况下,对于时序索引数据的范围查询,具体流程步骤如下:
步骤1:用户服务模块中的时序索引模块对应端口收到用户HTTP请求,解析用户的范围查询命令,将用户的范围查询命令转换成对网络模块中相关方法的远程调用。
步骤2:网络模块中相关方法被时序索引模块调用后,调用数据库功能模块数据结构相关的范围查询函数。
步骤3:数据库功能模块数据结构相关的范围查询函数被调用后,通过协议转换,将复杂数据结构转换为内部键,并调用索引模块的范围查询函数,利用LSM树的天然有序性进行范围查询。
步骤4:索引模块基于LSM树的天然有序性,顺序获取范围内所有内部键-地址对,根据结果集中的地址,通过多个线程访问值存储模块的值日志文件获取数据值。
步骤5:索引模块将从多个值日志文件获取到的数据实际值与内部键共同拼成新的结果集,返回给数据库功能模块。
步骤6:数据库功能模块将数据整理成固定数据结构(如哈希表),返回给网络模块。
步骤7:网络模块将返回的固定数据结构进行序列化,并返回给时序索引模块。
步骤8:时序索引模块将收到的数据反序列化,并转换成用户需要的结果形式,重新序列化后通过HTTP协议传输给用户。
以上所述实施例只为本发明之较佳实施例,并非以此限制本发明的实施范围,故凡依本发明之形状、原理所作的变化,均应涵盖在本发明的保护范围内。
Claims (2)
1.一种基于改进LSM树的边缘存储数据库,其特征在于,包括:
索引模块,负责存储数据的内部键和地址信息,并负责维护内部键的有序性;
值存储模块,负责存储和维护数据内部键和实际的值,并负责对数据库进行垃圾回收,避免空间放大;
数据库功能模块,负责将多种数据结构转换为内部键-值对的形式,以便将数据存储到值存储模块;
网络模块,负责提供基于多路复用技术的TCP服务,使用户能够通过网络进行数据库访问;
数据库同步模块,负责提供数据库之间的主从同步服务和多主同步服务;
用户服务模块,负责通过RESP协议和HTTP协议,以Redis服务和时序索引服务两种方式,与用户进行直接交互;
所述索引模块包括LSM树模块和地址结构存储模块,其中:
所述LSM树模块基于levelDB实现,通过归并的方式实现内部键的顺序排列,负责根据字典序对数据的内部键进行有序维护,并存储内部键和数据的地址;
所述地址结构存储模块负责将值存储模块中的数据所在的值日志文件编号、数据长度、数据在文件中的位置转换为结构化的地址信息,再将地址信息提供给LSM树模块进行存储;
所述值存储模块包括值日志模块和垃圾回收模块,其中:
所述值日志模块负责将值数据进行分文件存储,存储到多个值日志文件中,有新的数据写入时,值日志模块判断当前值日志文件大小是否已经到达用户设置的阈值,若已到达,则生成新的值日志文件,而后值日志模块将“内部键-值”封装为一条记录,写入到当前值日志文件中,并返回值日志文件编号、数据长度、数据在文件中的位置;
所述垃圾回收模块包括值日志信息文件、垃圾回收线程与临时的写入缓存,该模块负责值日志模块中值日志文件的垃圾回收;所述值日志信息文件用于统计每个值日志文件中有多少数据应被清除以及每个值日志文件的垃圾回收进度;所述垃圾回收线程负责检查值日志信息文件,一旦发现某值日志文件中应被清除的数据数达到用户配置的阈值,且该值日志文件不是当前值日志文件,就开始垃圾回收工作,当进行垃圾回收工作时,首先读取该文件的垃圾回收进度,从该进度位置开始,遍历该文件,依次访问索引模块判断该数据是否已被清除,若该数据未被清除,则将该数据写入临时写入缓存,直到遍历到文件结束位置或收到停止命令,遍历结束后,垃圾回收线程将写入缓存中数据一次性重新写入到数据库中,并删除操作中的值日志文件,释放磁盘空间;
所述数据库功能模块包括哈希表模块、集合模块、有序集合模块和队列模块,其中:
所述哈希表模块负责将结构化的哈希表的“表名-键-值”结构转换为值存储模块能够存储的内部键,并保证同哈希表内数据的内部键有序;
所述集合模块负责将结构化的集合的“集合名-值”结构转换为索引模块能够存储的内部键,并保证同集合内的数据具有唯一性;
所述有序集合模块负责将结构化的有序集合的“集合名-分数-值”结构转换为索引模块能够存储的内部键,并保证同集合内的数据的内部键基于分数有序排列,以及同集合内的数据具有唯一性;
所述队列模块负责将结构化的队列的“队列名-队列序号-值”结构转换为索引模块能够存储的内部键,并保证同队列内的数据基于队列序号有序排列;
所述网络模块包括监听线程模块、工作线程池模块和多路复用队列模块,其中:
所述监听线程模块负责监听网络请求,建立对应的信道,并将信道存储到多路复用队列模块中;
所述多路复用队列模块负责对所有信道进行管理,利用select系统命令获取信道状态,当信道有活动时,交给工作线程池模块处理;
所述工作线程池模块负责解析来自多路复用队列模块的活动信道中的请求,将这些请求交给数据库功能模块中对应的函数处理,并将返回的结果传递给收到请求的信道;
所述数据库同步模块包括同步序号模块和传输模块,其中:
所述同步序号模块负责维护节点间的同步状态,在写入操作发生时,同步序号模块将一条唯一同步序号与应写入的数据一并写入值存储模块,并通过同步序号来判断同步状态;在主从同步中,当且仅当主数据库收到的来自从数据库的最新同步序号与主数据库的最新同步序号相同,主从数据库才处于同步状态;在多主同步中,当且仅当两节点收到的来自对方的本节点的最新同步序号与自己的最新同步序号相同,两节点才处于同步状态;
所述传输模块基于网络模块和同步序号模块,利用TCP协议将未同步的值存储模块中的记录进行同步,直到主从数据库或多主数据库达到同步状态。
2.根据权利要求1中所述的一种基于改进LSM树的边缘存储数据库,其特征在于:所述用户服务模块包括RESP模块和时序索引模块,其中:
所述RESP模块负责基于网络模块,实现RESP协议,使用户能够通访问Redis服务的方式对数据库进行访问;
所述时序索引模块负责基于网络模块和HTTP协议,提供用于读写时序数据的接口,使用户能够将本数据库作为时序数据库使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010114813.9A CN111400312B (zh) | 2020-02-25 | 2020-02-25 | 一种基于改进lsm树的边缘存储数据库 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010114813.9A CN111400312B (zh) | 2020-02-25 | 2020-02-25 | 一种基于改进lsm树的边缘存储数据库 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111400312A CN111400312A (zh) | 2020-07-10 |
CN111400312B true CN111400312B (zh) | 2023-04-28 |
Family
ID=71432717
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010114813.9A Active CN111400312B (zh) | 2020-02-25 | 2020-02-25 | 一种基于改进lsm树的边缘存储数据库 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400312B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897784B (zh) * | 2020-07-13 | 2022-12-06 | 安徽大学 | 一种面向键值存储的近数据计算集群系统 |
CN112000846B (zh) * | 2020-08-19 | 2021-07-20 | 东北大学 | 基于gpu分组lsm树索引的方法 |
CN113076362B (zh) * | 2021-03-17 | 2024-02-23 | 北京达佳互联信息技术有限公司 | 业务执行方法及装置 |
CN113626431A (zh) * | 2021-07-28 | 2021-11-09 | 浪潮云信息技术股份公司 | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 |
CN117312267B (zh) * | 2023-07-11 | 2024-03-22 | 华东师范大学 | 一种基于peloton数据库的行级垃圾回收机制 |
CN117040963B (zh) * | 2023-10-09 | 2023-12-26 | 成都亿佰特电子科技有限公司 | 一种分布式io主从快速通讯的方法和系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107888657A (zh) * | 2017-10-11 | 2018-04-06 | 上海交通大学 | 低延迟分布式存储系统 |
CN110389942A (zh) * | 2019-06-21 | 2019-10-29 | 华中科技大学 | 一种无垃圾回收的键值分离存储方法和系统 |
-
2020
- 2020-02-25 CN CN202010114813.9A patent/CN111400312B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107888657A (zh) * | 2017-10-11 | 2018-04-06 | 上海交通大学 | 低延迟分布式存储系统 |
CN110389942A (zh) * | 2019-06-21 | 2019-10-29 | 华中科技大学 | 一种无垃圾回收的键值分离存储方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111400312A (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111400312B (zh) | 一种基于改进lsm树的边缘存储数据库 | |
CN109783438B (zh) | 基于librados的分布式NFS系统及其构建方法 | |
CN105138571B (zh) | 分布式文件系统及其存储海量小文件的方法 | |
CN110109778B (zh) | 一种大量小数据文件备份方法及恢复方法 | |
CN104951474A (zh) | 一种用于获取MySQL binlog增量日志的方法和装置 | |
US20070143286A1 (en) | File management method in file system and metadata server therefor | |
CN111414403A (zh) | 数据访问方法和装置、数据存储方法和装置 | |
CN101707633A (zh) | 一种基于文件系统的消息中间件持久消息的存储方法 | |
CN103501319A (zh) | 一种低延迟的面向小文件的分布式存储系统 | |
KR20200056526A (ko) | 데이터베이스 관리 시스템에서의 변경 데이터 캡쳐 구현 기법 | |
CN113806301A (zh) | 数据同步方法、装置、服务器及存储介质 | |
CN111435286B (zh) | 一种数据存储方法、装置和系统 | |
CN113704359B (zh) | 一种时序数据库多数据副本的同步方法、系统以及服务器 | |
CN116010348B (zh) | 一种分布式海量对象的管理方法和装置 | |
CN113190523B (zh) | 一种基于多客户端协同的分布式文件系统、方法和客户端 | |
CN112148745A (zh) | 一种多HBase集群访问方法、装置及存储介质 | |
CN114490540B (zh) | 数据存储方法、介质、装置和计算设备 | |
CN112667698A (zh) | 一种基于融媒体平台的MongoDB数据同步方法 | |
CN113076298A (zh) | 分布式小文件存储系统 | |
CN108848136B (zh) | 一种云服务集群的共享存储方法 | |
CN115408478B (zh) | 一种共享实验仪器的数据存储和管理系统、方法 | |
CN115587390B (zh) | 一种公有云对象存储的实现方法 | |
WO2023125630A1 (zh) | 一种数据管理方法及相关装置 | |
WO2022042514A1 (zh) | 元数据同步的方法和装置 | |
CN110019092A (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 |