CN115963987A - 分布式存储方法、装置、设备及计算机可读存储介质 - Google Patents
分布式存储方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN115963987A CN115963987A CN202211557762.2A CN202211557762A CN115963987A CN 115963987 A CN115963987 A CN 115963987A CN 202211557762 A CN202211557762 A CN 202211557762A CN 115963987 A CN115963987 A CN 115963987A
- Authority
- CN
- China
- Prior art keywords
- data
- distributed
- stored
- storage
- directory
- 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
Links
Images
Classifications
-
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种分布式存储方法、装置、设备及计算机可读存储介质,所述方法包括:接收终端发送的携带有待存储数据的第一请求;根据预设的目录编码规则,生成待存储数据的第一存储路径,第一存储路径包括多级目录;其中,第一存储路径中的最深级目录名包括:分区键、最小块号、最大块号和合并次数,不同分布式节点对应的分区键不同;基于第一存储路径,将待存储数据写入分布式存储空间。由于不同的分布式节点对应的分区键不同,能够确保不同分布式节点存储的数据对应的存储路径不同,如此减少合并数据,确保不同数据块的数据量相差较小,进而在查询数据时,能够确保各分布式节点加载的数据量相差较小,提升查询效率。
Description
技术领域
本申请涉及分布式存储技术领域,涉及但不限于一种分布式存储方法、装置、设备及计算机可读存储介质。
背景技术
目前,大量对写吞吐有高要求的数据库都围绕着日志结构合并树(LSM-Tr ee,LogStructured Merge Tree)进行读写的。LSM-Tree是一种分层、有序,面向磁盘的数据结构,设计思想主要是一次性地读取或写入固定大小的一块数据,并尽可能地减少随机寻道操作,以此让写性能达到最优,并且通过定期合并瘦身,有效地清除无效数据、缩短读取路径、提高磁盘利用空间。
然而,在合并多块数据时,合并操作非常消耗中央处理器(CPU,CentralProcessing Unit)和磁盘读写(IO,Input/Output)速度,尤其是在业务高峰期,会降低整个系统的吞吐量。并且在写入过程中,随着数据存储的最小目录单位part的不断合并,容易形成part数据量不均匀的问题,在查询阶段,每个节点很难保证加载的数据量均匀,容易出现木桶效应,影响查询效率。
发明内容
有鉴于此,本申请实施例提供一种分布式存储方法、装置、设备及计算机可读存储介质。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种分布式存储方法,所述方法包括:
接收终端发送的第一请求,所述第一请求携带有待存储数据;
根据预设的目录编码规则,生成所述待存储数据的第一存储路径,所述第一存储路径包括多级目录;
其中,所述第一存储路径中的最深级目录名包括:分区键、最小块号、最大块号和合并次数,不同分布式节点对应的分区键不同;
基于所述第一存储路径,将所述待存储数据写入分布式存储空间。
在一些实施例中,所述根据预设的目录编码规则,生成所述待存储数据的第一存储路径,包括:
获取所述分布式存储空间的组织结构和预设的目录编码规则;
根据所述组织结构和所述待存储数据,确定所述分布式存储空间的根目录名、存储数据目录名、数据库目录名和表目录名;
根据所述目录编码规则和所述待存储数据,确定最深级目录名;
根据所述根目录名、存储数据目录名、数据库目录名、表目录名和最深级目录名,生成所述待存储数据的第一存储路径。
在一些实施例中,所述根据所述目录编码规则和所述待存储数据,确定最深级目录名,包括:
获取所述分布式节点的标识;
根据所述标识和所述待存储数据,确定分区键;
获取由分布式应用程序协调服务分配的最小块号、最大块号和合并次数;
根据所述目录编码规则,对所述分区键、最小块号、最大块号和合并次数进行处理,得到最深级目录名。
在一些实施例中,所述根据所述标识和所述待存储数据,确定分区键,包括:
对所述待存储数据进行解析,得到预先自定义的用户分区;
根据所述标识,确定所述分布式节点预设的至少一个扩容因子和每一扩容因子对应的逻辑分片,不同扩容因子对应的逻辑分片不同;
根据所述用户分区、预设的至少一个扩容因子和每一扩容因子对应的逻辑分片,确定分区键。
在一些实施例中,所述基于所述第一存储路径,将所述待存储数据写入分布式存储空间,包括:
根据所述第一存储路径,在分布式存储空间中查找是否存在与所述第一存储路径相匹配的目标数据;
当查找结果表征不存在目标数据时,按照所述第一存储路径,将所述待存储数据写入所述分布式存储空间。
在一些实施例中,所述基于所述第一存储路径,将所述待存储数据写入分布式存储空间,还包括:
当所述查找结果表征存在目标数据时,将所述目标数据与所述待存储数据进行合并处理,得到合并数据;
根据所述第一存储路径,对所述目标数据的存储路径进行更新,得到第二存储路径;
按照所述第二存储路径,将所述合并数据写入所述分布式存储空间。
在一些实施例中,所述第一请求还携带有所述待存储数据的元数据信息;所述方法还包括:
将所述元数据信息发送至分布式系统中的其余分布式节点进行数据同步;
接收所述分布式系统中的其余分布式节点发送的元数据信息进行数据同步;
其中,所述分布式系统中的每一分布式节点具有所有分布式节点写入至所述存储空间的数据的元数据信息。
本申请实施例提供一种分布式存储装置,所述装置包括:
第一接收模块,用于接收终端发送的第一请求,所述第一请求携带有待存储数据;
生成模块,用于根据预设的目录编码规则,生成所述待存储数据的第一存储路径,所述第一存储路径包括多级目录;
其中,所述第一存储路径中的最深级目录名包括:分区键、最小块号、最大块号和合并次数,不同分布式节点对应的分区键不同;
写入模块,用于基于所述第一存储路径,将所述待存储数据写入分布式存储空间。
本申请实施例提供一种电子设备,包括:
处理器;以及
存储器,用于存储可在所述处理器上运行的计算机程序;
其中,所述计算机程序被处理器执行时实现上述分布式存储方法的步骤。
本申请实施例提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令配置为执行上述分布式存储方法的步骤。
本申请实施例提供一种分布式存储方法、装置、设备及计算机可读存储介质,其中,所述方法包括:接收终端发送的携带有待存储数据的第一请求;根据预设的目录编码规则,生成待存储数据的第一存储路径,该第一存储路径包括多级目录,其中,第一存储路径中的最深级目录名包括:分区键、最小块号、最大块号和合并次数,其中不同分布式节点对应的分区键不同,如此能够确保不同分布式节点写入的数据对应的存储路径不同,减少合并数据,确保不同数据块的数据量相差较小。最后基于第一存储路径,将待存储数据写入分布式存储空间,由于不同数据块的数据量相差较小,因此在查询数据时,能够确保各分布式节点加载的数据量相差较小,不会出现明显的木桶效应,进而提升查询效率。
附图说明
在附图(其不一定是按比例绘制的)中,相似的附图标记可在不同的视图中描述相似的部件。附图以示例而非限制的方式大体示出了本文中所讨论的各个实施例。
图1为本申请实施例提供的分布式存储方法的一种实现流程示意图;
图2为本申请实施例提供的分布式存储方法中生成待存储数据的第一存储路径步骤的一种实现流程示意图;
图3为本申请实施例提供的分布式存储方法中将待存储数据写入分布式存储空间步骤的一种实现流程示意图;
图4为本申请实施例提供的基于共享存储类LSM引擎存储计算分离的分布式数据库文件系统的架构示意图;
图5为本申请实施例提供的基于共享存储类LSM引擎存储计算分离分布式数据库文件目录结构示意图;
图6为现有技术中原有的分布式写入逻辑示意图;
图7为本申请实施例提供的分布式写入逻辑示意图;
图8为本申请实施例提供的分布式查询逻辑示意图;
图9为本申请实施例提供的分布式存储装置的一种组成结构示意图;
图10为本申请实施例提供的电子设备的一种组成结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,先对本申请实施例中涉及的名词和术语进行如下的解释。
共享存储,是指两个或多个处理机共用一个主存储器的并行体系结构。
Zookeeper:一个分布式服务框架,是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
日志化结构合并树(LSM-Tree,Log Structured Merge Tree),是一种分层、有序、面向磁盘的数据结构,其核心思想是充分利用磁盘批量的顺序写远比随机写高效的特性,放弃部分读效率换取最大化的写操作效率。设计思想主要是一次性地读取或写入固定大小的一块数据,并尽可能地减少随机寻道操作。
联机分析处理(OLAP,Online Analytical Processing),是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。
相关技术中的分布式查询逻辑,查询数据的最小文件单位为part,每个节点负责查询不同的part。在写入过程中,随着part的不断合并,容易形成part数据量不均匀的问题,如此在查询时每个节点很难保证加载的数据量均匀,容易出现木桶效应,无法保证查询效率。
为解决上述问题,本申请实施例提供一种分布式存储方法和装置。下面结合实现本申请实施例的装置对本申请实施例提供的方法进行说明。图1为本申请实施例提供的分布式存储方法的一种实现流程示意图,该方法应用于分布式节点,如图1所示,该方法包括以下步骤:
步骤S101,接收终端发送的第一请求。
本申请实施例可以由分布式系统中的分布式节点执行。当用户需要存储数据至分布式系统的存储空间时,在其持有的终端上执行触发存储数据的用户操作,终端响应于该用户操作,根据待存储数据生成第一请求。终端将该第一请求发送至分布式系统。分布式系统的分布式节点接收到终端发送的第一请求后,对其进行解析,得到第一请求携带的待存储数据。
步骤S102,根据预设的目录编码规则,生成待存储数据的第一存储路径。
这里的第一存储路径包括多级目录,其中,最深级目录的目录名包括:分区键、最小块号、最大块号和合并次数。分区键包括但不限于:用户分区、分布式节点预设的至少一个扩容因子和每一扩容因子对应的逻辑分片。每一分布式节点的一个扩容因子与一个逻辑分片一一对应,不同分布式节点对应的分区键不同。
在一些实施例中,该步骤S102可以通过图2所示的以下步骤来实现:
步骤S1021,获取分布式存储空间的组织结构和预设的目录编码规则。
目前大多数类LSM数据库并不是采用共享存储模式,为了降低成本、提升写入查询性能,本申请实施例中采用基于共享存储类LSM引擎来实现数据的写入和读取。在一种实现方式中,将分布式节点与共享存储分离设置,分布式节点可以水平秒级扩容或缩容,并且存储节点即分布式文件存储系统可以无限扩容。由于采用共享存储,数据无需重分布,可以使用能够提供分布式协调任务服务的工具来实现数据同步,如使用Zookeeper作为协调服务节点。
分布式存储空间的组织结构,是分布式数据库的数据文件的存储结构,为多级目录组成。目录编码规则是预先设置的,根据该规则,可以生成符合目录编码规则的目录。
步骤S1022,根据组织结构和待存储数据,确定分布式存储空间的根目录名、存储数据目录名、数据库目录名和表目录名。
以组织结构分为五级目录为例进行说明:一级目录为整个共享存储的路径,数据库的根目录,分布式系统包括的各分布式节点都可以访问和修改一级目录下的所有文件及目录。二级目录可以用于存放metadata库表元数据、data存储数据的顶级目录、configs配置文件相关以及权限管理等。写入的数据存储在data目录下,本申请实施例提供的方法主要针对该数据存储目录进行优化。存储数据的三级目录为数据库名,四级目录为表名,五级目录为数据存储的最小目录单位,称之为part,分布式节点一次写入至少生成一个part。
步骤S1023,根据目录编码规则和待存储数据,确定最深级目录名。
在一种实现方式中,确定最深级目录名可以实现为:获取分布式节点的标识;根据标识和待存储数据,确定分区键;获取由分布式应用程序协调服务分配的最小块号、最大块号和合并次数;根据目录编码规则,对分区键、最小块号、最大块号和合并次数进行处理,得到最深级目录名。
举例说明,预设的目录编码规则可以为分区键-最小块号-最大块号-合并次数,不同分布式节点对应的分区键不同,如此能够确保不同分布式节点写入的数据对应的存储路径不同,减少合并数据,确保不同数据块的数据量相差较小。最小块号和最大块号,初次写入时由Zookeeper生成唯一的自增序列,并且最小和最大块号相等,此时合并次数为0。随着LSM引擎的合并,最小、最大块号及合并次数会随之改变。数据存储的最小目录下存储着压缩后的具体数据:如主键索引及列信息等。
本申请实施例中,分区键可以由用户分区、逻辑分片和扩容因子组成,其中用户分区是预先自定义的。在一种实现方式中,可以通过以下方式来确定分区键:对待存储数据进行解析,得到预先自定义的用户分区;根据标识,确定分布式节点预设的至少一个扩容因子和每一扩容因子对应的逻辑分片,不同扩容因子对应的逻辑分片不同;根据用户分区、预设的至少一个扩容因子和每一扩容因子对应的逻辑分片,确定分区键。
例如,用户分区为202209,扩容因子为0,对应的逻辑分片为1,则分区键可以表示为202209_1_0;Zookeeper生成的最小块号和最大块号为2,合并次数为0。如此,根据目录编码规则和待存储数据,确定得到最深级目录名为202209_1_0_2_2_0。
步骤S1024,根据根目录名、存储数据目录名、数据库目录名、表目录名和最深级目录名,生成待存储数据的第一存储路径。
根据上述两个步骤确定出根目录名为root,存储数据目录名为data,数据库目录名为test,表目录名为demo,最深级目录名为202209_1_0_2_2_0,则生成待存储数据的第一存储路径为root/data/test/demo/202209_1_0_2_2_0/。
步骤S103,基于第一存储路径,将待存储数据写入分布式存储空间。
本申请实施例中,分布式节点接收终端发送的携带有待存储数据的第一请求;根据预设的目录编码规则,生成待存储数据的第一存储路径,该第一存储路径包括多级目录,其中,第一存储路径中的最深级目录名包括:分区键、最小块号、最大块号和合并次数,其中不同分布式节点对应的分区键不同,如此能够确保不同分布式节点写入的数据对应的存储路径不同,减少合并数据,确保不同数据块的数据量相差较小。最后基于第一存储路径,将待存储数据写入分布式存储空间,由于不同数据块的数据量相差较小,因此在查询数据时,能够确保各分布式节点加载的数据量相差较小,不会出现明显的木桶效应,进而提升查询效率。
在一些实施例中,第一请求不仅携带有待存储数据外,还携带有待存储数据的元数据信息,不同的分布式节点之间可以通过协调服务节点(如Zookeeper)进行数据同步。
在一种具体的实现方式中可以实现为:将元数据信息发送至分布式系统中的其余分布式节点进行数据同步;接收分布式系统中的其余分布式节点发送的元数据信息进行数据同步。通过数据同步,使得分布式系统中的每一分布式节点具有所有分布式节点写入至存储空间的数据的元数据信息。通过将大量数据分散到不同的分布式节点上进行写入,不同分布式节点进行元数据信息同步,当存在部分分布式节点出现故障时,可以由其他分布式节点对数据进行恢复,不会影响整体的正常运行,而且即使出现故障的计算机存储的数据已经损坏,也可以由其它分布式节点将损坏的数据恢复出来。
在一些实施例中,分布式系统之外的计算机,可以经过简单的配置加入到分布式系统中进行文件存储与读取,也可以从分布式系统中删去一些分布式节点,实现灵活扩展。
在一些实施例中,上述图1所示实施例中的步骤S103“基于第一存储路径,将待存储数据写入分布式存储空间”,可以通过图3所示的以下步骤来实现:
步骤S1031,根据第一存储路径,在分布式存储空间中查找是否存在与第一存储路径相匹配的目标数据。
当查找结果表征不存在目标数据时,待存储数据可以直接写入分布式存储空间,此时进入步骤S1032;当查找结果表征存在目标数据时,进入步骤S1033。
这里,是否存在与第一存储路径相匹配的目标数据,可以通过存储路径来判断,即在存储空间中查找是否第一存储路径下是否已存储数据,若已存储,则该数据为目标数据,该目标数据的存储路径与第一存储路径相匹配。
步骤S1032,按照第一存储路径,将待存储数据写入分布式存储空间。
举例说明,第一存储路径为root/data/test/demo/202209_1_0_2_2_0/,若目标数据的存储路径为root/data/test/demo/202207_1_0_1_1_0/,该两个路径由于分区键中的用户分区不同而不匹配,待存储数据无需进行合并直接写入存储空间;若目标数据的存储路径为root/data/test/demo/202209_2_0_1_1_0/,该两个路径由于分区键中的逻辑分区不同而不匹配,待存储数据无需进行合并直接写入存储空间;若目标数据的存储路径为root/data/test/demo/202209_1_1_1_1_0/,该两个路径由于分区键中的扩展因子不同而不匹配,待存储数据无需进行合并直接写入存储空间。
步骤S1033,将目标数据与待存储数据进行合并处理,得到合并数据。
步骤S1034,根据第一存储路径,对目标数据的存储路径进行更新,得到第二存储路径。
举例说明,第一存储路径为root/data/test/demo/202209_1_0_2_2_0/,若目标数据的存储路径为root/data/test/demo/202209_1_0_1_1_0/,分区键相同,对目标数据和待存储数据进行合并,并根据第一存储路径,对目标数据的存储路径,得到root/data/test/demo/202209_1_0_1_2_1/,该第二存储路径中的分区键不变,最小块号为目标数据的存储路径的最小块号与第一存储路径的最小块号中较小的块号,最大块号为目标数据的存储路径的最大块号与第一存储路径的最大块号中较大的块号,合并次数加1。
步骤S1035,按照第二存储路径,将合并数据写入分布式存储空间。
本申请实施例中,当分布式存储空间中存在与待存储数据的路径相同的目标数据时,可以对小文件进行合并,充分利用磁盘批量的顺序写的性能远高于随机写的性能的这一原理进行设计和优化,以对分布式存储的写性能进行优化,并且通过定期合并瘦身,有效地清除无效数据,不仅缩短读取路径、提高读取效率,还能够提高磁盘利用空间。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
共享分布式文件存储技术中,分布式文件存储把大量数据分散到不同的节点上存储,大大减小了数据丢失的风险。分布式文件存储具有冗余性,部分节点的故障并不影响整体的正常运行,而且即使出现故障的计算机存储的数据已经损坏,也可以基于其它节点将损坏的数据恢复出来。此外,集群之外的计算机只需要经过简单的配置就可以加入到分布式文件存储中共享数据,具有极强的可扩展能力。
分布式系统的可靠协调系统Zookeeper是一个分布式的、开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。Zookeeper分布式服务框架主要用来解决分布式应用中经常遇到的一些数据管理问题,提供分布式、高可用性的协调服务能力。
在分布式文件存储中,大量对写吞吐有高要求的数据库都在围绕着日志结构合并树(LSM-Tree,Log Structured Merge Tree),LSM-Tree是一种分层、有序、面向磁盘的数据结构,其核心思想是充分利用“磁盘批量的顺序写要远比随机写性能高出很多”这一原理进行设计和优化,以此让写性能达到最优,并且通过定期合并瘦身,有效地清除无效数据,缩短读取路径,提高磁盘可利用空间。但合并操作是非常消耗中央处理器(CPU,CentralProcessing Unit)和磁盘读写(IO,Input/Output)的,尤其是在业务高峰期,则会降低整个系统的吞吐量,是大多数据库都面临的棘手问题。
目前大多数类LSM数据库都不是采用共享存储模式,本申请实施例提供一种基于共享存储类LSM引擎存储计算分离的分布式数据库文件组织优化的方法和装置,能够降低存储成本、提升磁盘的写入查询性能。本申请实施例还提供一种作为共享存储的分布式架构,让每个节点命中的数据比较均匀,减弱木桶效应。
图4为本申请实施例提供的基于共享存储类LSM引擎存储计算分离的分布式数据库文件系统的架构示意图,如图4所示,该系统中计算节点和共享存储(分布式文件系统)分离,计算节点可以水平秒级扩缩容。由于采用共享存储,数据无需重分布,并且存储节点(即分布式文件系统)可以无限扩容,Zookee per用作协调服务节点,提供分布式协调任务服务,包括分布式文件合并、数据同步等。
图5为本申请实施例提供的基于共享存储类LSM引擎存储计算分离分布式数据库文件目录结构示意图,如图5所示,根目录为整个共享存储的路径,即数据库的一级目录,整个一级目录级下的所有文件及目录,计算节点都可以访问及修改,二级目录主要存放metadata(库表元数据)、data(存储数据的顶级目录)、configs(配置文件相关)和权限管理等。
本申请实施例中,主要针对数据存储目录做优化,存储数据的三级目录为数据库名,四级目录为表名,五级目录为数据存储的最小目录单位,称之为pa rt,一次写入操作至少生成一个part。目录编码规则为用户自定义分区键-逻辑分片-预扩容因子-最小块号-最大块号-合并次数。
用户自定义分区键,数据分区对于联机分析处理(OLAP,Online Analyti calProcessing)数据库而言意义非凡,借助数据分区,在后续的查询过程中,能够跳过不必要的数据目录,从而提升查询的性能,例如,用户可以按照月或天进行分区,查询9月数据时,可以跳过其他月份的数据目录。
逻辑分片则主要是为了使查询分布均匀、进而提升查询效率及支持本地内存表而设计的,每个计算节点对应1*预扩容因子个逻辑分片。
最小块号及最大块号,初次写入时由Zookeeper生成唯一自增序列,并且最小和最大块号相等,初次写入时合并次数为0。随着LSM引擎的合并,会随之生成最小快号、最大块号及合并次数。
数据存储的最小目录下则存储着压缩后的具体数据、主键索引及列信息等。
下面结合图4所示的系统架构示意图和图5所示的数据文件目录结构示意图,说明本申请实施例提供的基于共享存储类LSM引擎存储计算分离的分布式数据库文件组织优化方法,该方法主要实现了以下3个方面:
第1方面,实现分布式写入逻辑。
图6为现有技术中原有的分布式写入逻辑示意图,参见图6:
1)3个计算节点分别写入3批数据,数据按月分区,在共享存储同一路径下形成3个part文件202209_1_1_0、202209_2_2_0和202209_3_3_0,文件命名为用户自定义分区键_最小块号_最大块号_合并次数,块号由Zookeeper统一分配自增唯一。
2)各个计算节点互相同步数据,每个计算节点拥有全量的元数据信息。
3)不同存储节点生成的数据可以合并。现有技术中,多个存储节点生成的数据并发合并时,可能会发生大量的合并计划冲突。
4)生成的3个part文件,同分区(即用户自定义分区键值相同)可以合并,如图6合并为202206_1_2_1,其中202209为用户自定义分区键,第一个1为最小块号,2为最大块号,第二个1为合并次数。
由于现有技术中合并时是按照分区合并的,不同分区的part文件相差较大,容易形成part大小不均匀的问题。
图7为本申请实施例提供的分布式写入逻辑示意图,参见图7:
1)3个计算节点分别写入3批数据,数据按月分区,在共享存储同一路径下形成3个part文件202209_1_0_1_1_0、202209_2_0_2_2_0、202209_3_0_3_3_0,目录编码规则为用户自定义分区键(对应上文中的用户分区)_逻辑分片_预扩容因子_最小块号_最大块号_合并次数,块号由Zookeeper统一分配自增唯一。
2)各个计算节点互相同步数据,每个计算节点拥有全量的元数据信息。
3)不同存储节点生成的数据可以合并,part之间只能对相同的分区键进行互相合并,其中,分区键由用户自定义分区、逻辑分片和预扩容因子组成。
4)生成的3个不同的part文件,同分区键可以合并。图7所示的3个par t的分区键不同,互相之间不能合并。
第2方面,实现分布式查询逻辑。
现有技术中分布式查询逻辑,查询的最小的文件单位是part,每个计算节点负责查询不同的part,随着part的不断合并,很难保证各计算节点加载的数据量相当,从数据量大的part中读取数据的计算节点a,读取效率会低于从数据量小的part中读取数据的计算节点b,整体查询效率会因为计算节点a的读取效率低于其他计算节点导致容易出现木桶效应。
图8为本申请实施例提供的分布式查询逻辑示意图,如图8所述,本申请实施例提供的分布式查询逻辑,增加了逻辑分片和预扩容因子,不同用户自定义分区、不同逻辑分片、不同预扩容因子之间的数据不能互相合并,参见图8中插入的四批数据不能合并,查询时单独查询,各个计算节点按照取余规则查询不同的文件,读取数据量相当,不会出现明显的木桶效应,进而提升整体查询效率。
基于前述的实施例,本申请实施例提供一种分布式存储装置,该装置包括的各模块、以及各模块包括的各单元,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(CPU,Central ProcessingUnit)、微处理器(MPU,Microprocessor Unit)、数字信号处理器(DSP,Digital SignalProcessing)或现场可编程门阵列(FPG A,Field Programmable Gate Array)等。
本申请实施例再提供一种分布式存储装置,图9为本申请实施例提供的分布式存储装置的一种组成结构示意图,如图9所示,所述分布式存储装置900包括:
第一接收模块901,用于接收终端发送的第一请求,所述第一请求携带有待存储数据;
生成模块902,用于根据预设的目录编码规则,生成所述待存储数据的第一存储路径,所述第一存储路径包括多级目录;
其中,所述第一存储路径中的最深级目录名包括:分区键、最小块号、最大块号和合并次数,不同分布式节点对应的分区键不同;
写入模块903,用于基于所述第一存储路径,将所述待存储数据写入分布式存储空间。
在一些实施例中,所述生成模块902,还用于:
获取所述分布式存储空间的组织结构和预设的目录编码规则;
根据所述组织结构和所述待存储数据,确定所述分布式存储空间的根目录名、存储数据目录名、数据库目录名和表目录名;
根据所述目录编码规则和所述待存储数据,确定最深级目录名;
根据所述根目录名、存储数据目录名、数据库目录名、表目录名和最深级目录名,生成所述待存储数据的第一存储路径。
在一些实施例中,所述生成模块902,还用于:
获取所述分布式节点的标识;
根据所述标识和所述待存储数据,确定分区键;
获取由分布式应用程序协调服务分配的最小块号、最大块号和合并次数;
根据所述目录编码规则,对所述分区键、最小块号、最大块号和合并次数进行处理,得到最深级目录名。
在一些实施例中,所述生成模块902,还用于:
对所述待存储数据进行解析,得到预先自定义的用户分区;
根据所述标识,确定所述分布式节点预设的至少一个扩容因子和每一扩容因子对应的逻辑分片,不同扩容因子对应的逻辑分片不同;
根据所述用户分区、预设的至少一个扩容因子和每一扩容因子对应的逻辑分片,确定分区键。
在一些实施例中,所述写入模块903,还用于:
根据所述第一存储路径,在分布式存储空间中查找是否存在与所述第一存储路径相匹配的目标数据;
当查找结果表征不存在目标数据时,按照所述第一存储路径,将所述待存储数据写入所述分布式存储空间。
在一些实施例中,所述写入模块903,还用于:
当所述查找结果表征存在目标数据时,将所述目标数据与所述待存储数据进行合并处理,得到合并数据;
根据所述第一存储路径,对所述目标数据的存储路径进行更新,得到第二存储路径;
按照所述第二存储路径,将所述合并数据写入所述分布式存储空间。
在一些实施例中,所述第一请求还携带有所述待存储数据的元数据信息;所述分布式存储装置900,还包括:
发送模块,用于将所述元数据信息发送至分布式系统中的其余分布式节点进行数据同步;
第二接收模块,用于接收所述分布式系统中的其余分布式节点发送的元数据信息进行数据同步;
其中,所述分布式系统中的每一分布式节点具有所有分布式节点写入至所述存储空间的数据的元数据信息。
这里需要指出的是:以上分布式存储装置实施例项的描述,与上述方法描述是类似的,具有同方法实施例相同的有益效果。对于本申请分布式存储装置实施例中未披露的技术细节,本领域的技术人员请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read OnlyMemory)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
相应地,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中提供的分布式存储方法中的步骤。
本申请实施例提供一种电子设备,图10为本申请实施例提供的电子设备的一种组成结构示意图,根据图10示出的电子设备700的示例性结构,可以预见电子设备1000的其他的示例性结构,因此这里所描述的结构不应视为限制,例如可以省略下文所描述的部分组件,或者,增设下文所未记载的组件以适应某些应用的特殊需求。
图10所示的电子设备1000包括:一个处理器1001、至少一个通信总线1002、用户接口1003、至少一个外部通信接口1004和存储器1005。其中,通信总线1002配置为实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏,外部通信接口1004可以包括标准的有线接口和无线接口。其中,所述处理器1001配置为执行存储器中存储的分布式存储方法的程序,以实现上述实施例提供的分布式存储方法中的步骤。
以上电子设备和存储介质实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请电子设备和存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台设备执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种分布式存储方法,应用于分布式节点,其特征在于,所述方法包括:
接收终端发送的第一请求,所述第一请求携带有待存储数据;
根据预设的目录编码规则,生成所述待存储数据的第一存储路径,所述第一存储路径包括多级目录;
其中,所述第一存储路径中的最深级目录名包括:分区键、最小块号、最大块号和合并次数,不同分布式节点对应的分区键不同;
基于所述第一存储路径,将所述待存储数据写入分布式存储空间。
2.根据权利要求1所述的方法,其特征在于,所述根据预设的目录编码规则,生成所述待存储数据的第一存储路径,包括:
获取所述分布式存储空间的组织结构和预设的目录编码规则;
根据所述组织结构和所述待存储数据,确定所述分布式存储空间的根目录名、存储数据目录名、数据库目录名和表目录名;
根据所述目录编码规则和所述待存储数据,确定最深级目录名;
根据所述根目录名、存储数据目录名、数据库目录名、表目录名和最深级目录名,生成所述待存储数据的第一存储路径。
3.根据权利要求2所述的方法,其特征在于,所述根据所述目录编码规则和所述待存储数据,确定最深级目录名,包括:
获取所述分布式节点的标识;
根据所述标识和所述待存储数据,确定分区键;
获取由分布式应用程序协调服务分配的最小块号、最大块号和合并次数;
根据所述目录编码规则,对所述分区键、最小块号、最大块号和合并次数进行处理,得到最深级目录名。
4.根据权利要求3所述的方法,其特征在于,所述根据所述标识和所述待存储数据,确定分区键,包括:
对所述待存储数据进行解析,得到预先自定义的用户分区;
根据所述标识,确定所述分布式节点预设的至少一个扩容因子和每一扩容因子对应的逻辑分片,不同扩容因子对应的逻辑分片不同;
根据所述用户分区、预设的至少一个扩容因子和每一扩容因子对应的逻辑分片,确定分区键。
5.根据权利要求1所述的方法,其特征在于,所述基于所述第一存储路径,将所述待存储数据写入分布式存储空间,包括:
根据所述第一存储路径,在分布式存储空间中查找是否存在与所述第一存储路径相匹配的目标数据;
当查找结果表征不存在目标数据时,按照所述第一存储路径,将所述待存储数据写入所述分布式存储空间。
6.根据权利要求5所述的方法,其特征在于,所述基于所述第一存储路径,将所述待存储数据写入分布式存储空间,还包括:
当所述查找结果表征存在目标数据时,将所述目标数据与所述待存储数据进行合并处理,得到合并数据;
根据所述第一存储路径,对所述目标数据的存储路径进行更新,得到第二存储路径;
按照所述第二存储路径,将所述合并数据写入所述分布式存储空间。
7.根据权利要求1所述的方法,其特征在于,所述第一请求还携带有所述待存储数据的元数据信息;所述方法还包括:
将所述元数据信息发送至分布式系统中的其余分布式节点进行数据同步;
接收所述分布式系统中的其余分布式节点发送的元数据信息进行数据同步;
其中,所述分布式系统中的每一分布式节点具有所有分布式节点写入至所述存储空间的数据的元数据信息。
8.一种分布式存储装置,其特征在于,所述装置包括:
第一接收模块,用于接收终端发送的第一请求,所述第一请求携带有待存储数据;
生成模块,用于根据预设的目录编码规则,生成所述待存储数据的第一存储路径,所述第一存储路径包括多级目录;
其中,所述第一存储路径中的最深级目录名包括:分区键、最小块号、最大块号和合并次数,不同分布式节点对应的分区键不同;
写入模块,用于基于所述第一存储路径,将所述待存储数据写入分布式存5储空间。
9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储可在所述处理器上运行的计算机程序;
其中,所述计算机程序被处理器执行时实现权利要求1至7任一项所述分0布式存储方法的步骤。
10.一种计算机可读存储介质,其特征在于,存储有计算机可执行指令,
所述计算机可执行指令配置为执行权利要求1至7任一项所述分布式存储方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211557762.2A CN115963987A (zh) | 2022-12-06 | 2022-12-06 | 分布式存储方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211557762.2A CN115963987A (zh) | 2022-12-06 | 2022-12-06 | 分布式存储方法、装置、设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115963987A true CN115963987A (zh) | 2023-04-14 |
Family
ID=87362525
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211557762.2A Pending CN115963987A (zh) | 2022-12-06 | 2022-12-06 | 分布式存储方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115963987A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117520461A (zh) * | 2024-01-05 | 2024-02-06 | 北京海致星图科技有限公司 | 逻辑分片的分发方法、装置、设备和介质 |
-
2022
- 2022-12-06 CN CN202211557762.2A patent/CN115963987A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117520461A (zh) * | 2024-01-05 | 2024-02-06 | 北京海致星图科技有限公司 | 逻辑分片的分发方法、装置、设备和介质 |
CN117520461B (zh) * | 2024-01-05 | 2024-04-02 | 北京海致星图科技有限公司 | 逻辑分片的分发方法、装置、设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Vora | Hadoop-HBase for large-scale data | |
US9298774B2 (en) | Changing the compression level of query plans | |
Băzăr et al. | The Transition from RDBMS to NoSQL. A Comparative Analysis of Three Popular Non-Relational Solutions: Cassandra, MongoDB and Couchbase. | |
US20130191523A1 (en) | Real-time analytics for large data sets | |
US8229916B2 (en) | Method for massively parallel multi-core text indexing | |
US10706022B2 (en) | Space-efficient secondary indexing on distributed data stores | |
Mohamed et al. | MRO-MPI: MapReduce overlapping using MPI and an optimized data exchange policy | |
Ma et al. | Dependency-aware data locality for MapReduce | |
CN114090695A (zh) | 分布式数据库的查询优化的方法和装置 | |
CN115963987A (zh) | 分布式存储方法、装置、设备及计算机可读存储介质 | |
Lawson et al. | Using a robust metadata management system to accelerate scientific discovery at extreme scales | |
US20170270149A1 (en) | Database systems with re-ordered replicas and methods of accessing and backing up databases | |
CN115918110A (zh) | 使用键值存储库的空间搜索 | |
Ho et al. | Data partition optimization for column-family NoSQL databases | |
GC | A critical comparison of NOSQL databases in the context of ACID and BASE | |
CN113821573A (zh) | 海量数据快速检索服务构建方法、系统、终端及存储介质 | |
Serrano et al. | From relations to multi-dimensional maps: A SQL-to-hbase transformation methodology | |
CN110297842B (zh) | 一种数据比对方法、装置、终端和存储介质 | |
CN113127717A (zh) | 一种密钥检索方法和系统 | |
Mathew et al. | Novel research framework on SN's NoSQL databases for efficient query processing | |
CN111309704A (zh) | 数据库操作方法和数据库操作系统 | |
Li et al. | EStore: An effective optimized data placement structure for Hive | |
Kaur et al. | Scalable database management in cloud computing | |
Usman et al. | A Novel Highly Available Data Replication Strategy exploiting Data Semantics, Coding Techniques and Prior At-Hand Knowledge | |
Li et al. | A resilient index graph for querying large biological scientific data |
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 |