友情链接:
通过上个系列的文章我们了解到了各节点数据副本间通过一致性算法确保每次写入在响应客户端请求之前至少被多数节点(N/2+1)持久化,这样即使机器出现故障也不会丢失数据,并且即使一个节点出现故障,其他服务器依然能够提供数据读写、写入等数据服务。同时也了解到了协议如何确保各节点执行相同的命令操作序列,最终达到一致的状态。TDDMS通过应用一致性算法满足了两地三中心、多模态数据的统一处理等场景的容错、统一处理等需求。
详情查看:分布式一致性技术的实现
那么TDDMS是如何确保系统可以快速的找到元数据和数据,提供数据读写能力的呢?本章节将为您介绍TDDMS是如何进行数据存储以确保后续的操作可以更加快速高效。
元数据(Metadata)是描述其他数据的数据,它为数据提供上下文、结构、定义和结构等信息,可以使数据管理更为高效,有助于优化查询性能和存储效率。
TDDMS中数据分布的基本单位为tablet,tablet则由tablet server进行管理。而master server则保存着元数据,其实际存的数据量很少,主要目的是为了辅助client更快速的定位到数据所在的tablet。更多细节查看:TDDMS是什么
TDDMS中的数据分布主要涉及分片(Tablet)、分区(Section)、分桶(Bucket)三个维度。
Tablet是TDDMS中数据分布的基本单位,TDDMS将表拆分为多个Tablet,由TabletServer管理,根据分区&分桶字段对数据进行分布。分片赋予了系统水平扩展的可能性,可以帮助平衡查询工作的负载,降低节点压力。
分区以Section(表结构的基本单位)的形式存于Tablet中,每张表都会有一个默认的Section。分区表则会在默认Section之外,根据所设定的分区条件,创建对应的Section。Tablet与Section为多对多的关系。一个Section的数据会存于多个Tablet中,一个Tablet也会存储多个Section的数据。
分桶其实并不是TDDMS本身的概念,是由不同的存储引擎自身定义的。
分区指的是在一张表内对数据进行切分,分桶则指的是在一个分区内对数据进行分组。在大多数场景中设置分桶的概念是为了保证数据的离散度,使数据均匀分布,这样在后续的计算中通过并行处理,尽可能的提高资源利用率。设置分桶也可以加速数据的过滤。
数据存储系统中数据量会随着时间的推移不断增加,如果继续使用传统解决方案,将所有数据存储在一个表中,当有多个用户试图同时访问并针对数据库进行操作时,整体的处理效率会不断降低,也会产生并发瓶颈。
数据分片将大型数据集拆分为更小、更易处理和操作的块,并存储在多台数据库服务器上来协同工作,解决单一服务器存储容量和计算资源上限的问题。举个比较通俗易懂的例子,就像是将物品存在不同的抽屉中,我们在找想要的物品时,只需要拉开对应标签的抽屉即可快速找到。
TDDMS中的Master服务负责数据副本的放置策略以及元信息管理(表的元数据),比如当需要进行检索等操作时,只需从Master处获取信息即可找到数据存储对应的节点信息、分片信息、状态如何等等,大大提高了数据存储、管理的效率,实现了稳定的存储增长、高性能和易维护。
分片策略是指按照一定的规则将数据集以行划分成若干个分片以平衡负载,减少通信开销,提升效率。常见的分片策略有以下几种:
Tablet的分布决定了,表的数据实际存放在多少块磁盘上,直接影响了表的读写性能,因而在星环产品的数据存储中,提供了多种方式简化Tablet数量和分布的设置,比如依靠哈希分片策略的随机性以及不同的分布公式(是否有分桶是否有分区)进行合理分布。降低了存储与计算的倾斜几率,计算速度快,而且哈希分片策略随机性的特点也为存储带来了好的均衡性。
分区指的是将数据集划分为更小、更易于单独管理和访问的子集存于tablet中,通过将数据分布在多个tablet上减少争用,利用并行处理提高计算资源的利用率,优化性能。因此,分区在整个存储架构中也是至关重要的因素之一。
如果分区设置不当,后续在并行处理海量数据时,可能会导致性能瓶颈等风险,比如分区中数据分布不均匀、或某些分区的数据量存在数据量级上的差异则很容易引起数据倾斜(详情查看:数据倾斜现象诱因、原理、影响,以及星环对此的应对策略)。因此,数据的合理分布对于系统的可用性、运行性能都起着至关重要的核心作用。
设计适当的表分区策略是确保分区表性能最大化的关键一步,有效的分区策略可以提高系统的查询性能、扩展性等等。用户在建表时用户需要指定分区策略,可以基于以下维度进行设计:
a. 分析查询需求:分析查询需求,重点关注经常被查询的数据的过滤条件,以选择适当的分区键,使得满足这些过滤条件的数据能够集中在同一分区中,从而优化查询性能;
b. 确认数据类型:推荐使用 STRING 或时间类型的列作为分区键,通常可以帮助在数据均衡和分区数量上取得较好的平衡;
c. 权衡分区规模:常规情况下,单个分区的数据量控制在 500GB 内,如果集群的 CPU 核数较多,可适当提升,此外,我们还需要关注数据的增长趋势,例如数据按时间增长,时间则是一个优秀的分区键,查询按时间范围过滤时会更高效;
d. 选择合适的分区策略:
星环存储支持多种分区策略,比如范围分区、单值分区,在新版本中还新增了归档分区策略,用户可以根据自身业务需求进行选择。
其次,分区键也是至关重要的一个因素。分区键是用于将数据集划分为分区或子集的属性或标准,决定了数据在分区系统中的分布和组织方式。当数据被分区时,key用于将每个记录或数据项分配给特定的分区。例如,分区键可以是客户 ID、地理区域或时间戳等等。选择分区键时需要考虑多个关键维度,比如需要具备高基数的特性以确保跨分区的数据均匀分布,有助于防止数据倾斜并确保工作负载均衡;再比如需要选择查询或过滤器中经常使用的键,通过减少跨分区扫描的数据量来提高查询性能等等。
详情请查阅: 分区实践
我们前面介绍了如何通过对表进行分片、分区来提高查询效率,但对于某些特定的查询模式,特别是需要频繁地进行数据联接查或取样的场景,仍然可能面临性能瓶颈。此外,随着数据的不断积累,可能会出现某些分区数据量过大,导致查询和处理效率受到影响。
为了更细粒度地管理和优化数据存储与访问,数据分桶(Bucketing)技术逐渐受到了关注,即对指定列的哈希值将其分配到固定数量的子集中(桶),保障数据的均匀分布,从而为复杂查询提供了更高效的处理方式。
TDDMS中的数据分桶是通过对特定列的值进行哈希处理来更好地均匀分布数据、优化特定模式下的查询,优势如下:
TDDMS支持多分桶列、单分桶列以满足用户的需求
当然,分桶不一定会百分百带来系统性能的提升,在决定对表进行分桶时还需要结合多种因素进行考量以最大限度地提高查询性能:
对表分桶时会将表中记录按分桶键的哈希值分散进多个桶中。选择合适的分桶键也是分桶优化成功的关键因素之一。选择分桶键时需要考虑多个关键维度,比如需要分析数据在列上的分布情况,一个理想的分桶键应该有较大的基数和较少的重复值,避免桶中的数据不均衡。在具体实践中,您也可以使用小规模数据量的表来尝试使用不同的分桶键,比较分桶获得到的查询收益,找出为您提供最佳性能的选择。
详情请查阅: 分桶实践
综上,针对不同层级的数据分布,TDDMS设置了多种策略来满足用户在存储管理方面的需求。此外还有一些其他方面的技术优势:
在部分行业,很多业务对数据的访问并不是均匀的,而是呈现相对的数据访问倾斜,根据数据的时效性以及访问的频繁度,数据通常会被分为冷温热三级数据。不同数据存储地方不同,耗费的资源、成本也不同。比如对于热数据,即访问频次较高的数据,存储在热数据盘(SSD介质),满足高性能、低延迟访问的需求;对于冷数据,即访问频次较低的数据,可以选择存储在较廉价的冷数据盘中(HDD介质),满足高性价比的存储需求,优化存储成本。
星环科技提供多种存储方案,可以有效平衡存储成本和查询性能需求。比如,支持冷热数据分层存储,同时也支持手动、自动转换,支持设置自动转换策略。TDDMS底层提供数据移动等功能,当冷热数据出现变化时,可以快速的进行动态调整,第一时间避免资源的消耗,提升系统整体存储性能的同时更加高效的适配企业业务。
TDDMS不仅屏蔽掉了底层存储引擎的差异化,为用户提供统一的编程与运维接口。同时,还将存储引擎解耦,并定义成一组插件化的接口,这种插件化的设计允许用户针对不同的需求组织存储引擎,使得TDDMS能够灵活适配不同的业务场景和存储需求。
...未完待续
友情链接:
通过上个系列的文章我们了解到了各节点数据副本间通过一致性算法确保每次写入在响应客户端请求之前至少被多数节点(N/2+1)持久化,这样即使机器出现故障也不会丢失数据,并且即使一个节点出现故障,其他服务器依然能够提供数据读写、写入等数据服务。同时也了解到了协议如何确保各节点执行相同的命令操作序列,最终达到一致的状态。TDDMS通过应用一致性算法满足了两地三中心、多模态数据的统一处理等场景的容错、统一处理等需求。
详情查看:分布式一致性技术的实现
那么TDDMS是如何确保系统可以快速的找到元数据和数据,提供数据读写能力的呢?本章节将为您介绍TDDMS是如何进行数据存储以确保后续的操作可以更加快速高效。
元数据(Metadata)是描述其他数据的数据,它为数据提供上下文、结构、定义和结构等信息,可以使数据管理更为高效,有助于优化查询性能和存储效率。
TDDMS中数据分布的基本单位为tablet,tablet则由tablet server进行管理。而master server则保存着元数据,其实际存的数据量很少,主要目的是为了辅助client更快速的定位到数据所在的tablet。更多细节查看:TDDMS是什么
TDDMS中的数据分布主要涉及分片(Tablet)、分区(Section)、分桶(Bucket)三个维度。
Tablet是TDDMS中数据分布的基本单位,TDDMS将表拆分为多个Tablet,由TabletServer管理,根据分区&分桶字段对数据进行分布。分片赋予了系统水平扩展的可能性,可以帮助平衡查询工作的负载,降低节点压力。
分区以Section(表结构的基本单位)的形式存于Tablet中,每张表都会有一个默认的Section。分区表则会在默认Section之外,根据所设定的分区条件,创建对应的Section。Tablet与Section为多对多的关系。一个Section的数据会存于多个Tablet中,一个Tablet也会存储多个Section的数据。
分桶其实并不是TDDMS本身的概念,是由不同的存储引擎自身定义的。
分区指的是在一张表内对数据进行切分,分桶则指的是在一个分区内对数据进行分组。在大多数场景中设置分桶的概念是为了保证数据的离散度,使数据均匀分布,这样在后续的计算中通过并行处理,尽可能的提高资源利用率。设置分桶也可以加速数据的过滤。
数据存储系统中数据量会随着时间的推移不断增加,如果继续使用传统解决方案,将所有数据存储在一个表中,当有多个用户试图同时访问并针对数据库进行操作时,整体的处理效率会不断降低,也会产生并发瓶颈。
数据分片将大型数据集拆分为更小、更易处理和操作的块,并存储在多台数据库服务器上来协同工作,解决单一服务器存储容量和计算资源上限的问题。举个比较通俗易懂的例子,就像是将物品存在不同的抽屉中,我们在找想要的物品时,只需要拉开对应标签的抽屉即可快速找到。
TDDMS中的Master服务负责数据副本的放置策略以及元信息管理(表的元数据),比如当需要进行检索等操作时,只需从Master处获取信息即可找到数据存储对应的节点信息、分片信息、状态如何等等,大大提高了数据存储、管理的效率,实现了稳定的存储增长、高性能和易维护。
分片策略是指按照一定的规则将数据集以行划分成若干个分片以平衡负载,减少通信开销,提升效率。常见的分片策略有以下几种:
Tablet的分布决定了,表的数据实际存放在多少块磁盘上,直接影响了表的读写性能,因而在星环产品的数据存储中,提供了多种方式简化Tablet数量和分布的设置,比如依靠哈希分片策略的随机性以及不同的分布公式(是否有分桶是否有分区)进行合理分布。降低了存储与计算的倾斜几率,计算速度快,而且哈希分片策略随机性的特点也为存储带来了好的均衡性。
分区指的是将数据集划分为更小、更易于单独管理和访问的子集存于tablet中,通过将数据分布在多个tablet上减少争用,利用并行处理提高计算资源的利用率,优化性能。因此,分区在整个存储架构中也是至关重要的因素之一。
如果分区设置不当,后续在并行处理海量数据时,可能会导致性能瓶颈等风险,比如分区中数据分布不均匀、或某些分区的数据量存在数据量级上的差异则很容易引起数据倾斜(详情查看:数据倾斜现象诱因、原理、影响,以及星环对此的应对策略)。因此,数据的合理分布对于系统的可用性、运行性能都起着至关重要的核心作用。
设计适当的表分区策略是确保分区表性能最大化的关键一步,有效的分区策略可以提高系统的查询性能、扩展性等等。用户在建表时用户需要指定分区策略,可以基于以下维度进行设计:
a. 分析查询需求:分析查询需求,重点关注经常被查询的数据的过滤条件,以选择适当的分区键,使得满足这些过滤条件的数据能够集中在同一分区中,从而优化查询性能;
b. 确认数据类型:推荐使用 STRING 或时间类型的列作为分区键,通常可以帮助在数据均衡和分区数量上取得较好的平衡;
c. 权衡分区规模:常规情况下,单个分区的数据量控制在 500GB 内,如果集群的 CPU 核数较多,可适当提升,此外,我们还需要关注数据的增长趋势,例如数据按时间增长,时间则是一个优秀的分区键,查询按时间范围过滤时会更高效;
d. 选择合适的分区策略:
星环存储支持多种分区策略,比如范围分区、单值分区,在新版本中还新增了归档分区策略,用户可以根据自身业务需求进行选择。
其次,分区键也是至关重要的一个因素。分区键是用于将数据集划分为分区或子集的属性或标准,决定了数据在分区系统中的分布和组织方式。当数据被分区时,key用于将每个记录或数据项分配给特定的分区。例如,分区键可以是客户 ID、地理区域或时间戳等等。选择分区键时需要考虑多个关键维度,比如需要具备高基数的特性以确保跨分区的数据均匀分布,有助于防止数据倾斜并确保工作负载均衡;再比如需要选择查询或过滤器中经常使用的键,通过减少跨分区扫描的数据量来提高查询性能等等。
详情请查阅: 分区实践
我们前面介绍了如何通过对表进行分片、分区来提高查询效率,但对于某些特定的查询模式,特别是需要频繁地进行数据联接查或取样的场景,仍然可能面临性能瓶颈。此外,随着数据的不断积累,可能会出现某些分区数据量过大,导致查询和处理效率受到影响。
为了更细粒度地管理和优化数据存储与访问,数据分桶(Bucketing)技术逐渐受到了关注,即对指定列的哈希值将其分配到固定数量的子集中(桶),保障数据的均匀分布,从而为复杂查询提供了更高效的处理方式。
TDDMS中的数据分桶是通过对特定列的值进行哈希处理来更好地均匀分布数据、优化特定模式下的查询,优势如下:
TDDMS支持多分桶列、单分桶列以满足用户的需求
当然,分桶不一定会百分百带来系统性能的提升,在决定对表进行分桶时还需要结合多种因素进行考量以最大限度地提高查询性能:
对表分桶时会将表中记录按分桶键的哈希值分散进多个桶中。选择合适的分桶键也是分桶优化成功的关键因素之一。选择分桶键时需要考虑多个关键维度,比如需要分析数据在列上的分布情况,一个理想的分桶键应该有较大的基数和较少的重复值,避免桶中的数据不均衡。在具体实践中,您也可以使用小规模数据量的表来尝试使用不同的分桶键,比较分桶获得到的查询收益,找出为您提供最佳性能的选择。
详情请查阅: 分桶实践
综上,针对不同层级的数据分布,TDDMS设置了多种策略来满足用户在存储管理方面的需求。此外还有一些其他方面的技术优势:
在部分行业,很多业务对数据的访问并不是均匀的,而是呈现相对的数据访问倾斜,根据数据的时效性以及访问的频繁度,数据通常会被分为冷温热三级数据。不同数据存储地方不同,耗费的资源、成本也不同。比如对于热数据,即访问频次较高的数据,存储在热数据盘(SSD介质),满足高性能、低延迟访问的需求;对于冷数据,即访问频次较低的数据,可以选择存储在较廉价的冷数据盘中(HDD介质),满足高性价比的存储需求,优化存储成本。
星环科技提供多种存储方案,可以有效平衡存储成本和查询性能需求。比如,支持冷热数据分层存储,同时也支持手动、自动转换,支持设置自动转换策略。TDDMS底层提供数据移动等功能,当冷热数据出现变化时,可以快速的进行动态调整,第一时间避免资源的消耗,提升系统整体存储性能的同时更加高效的适配企业业务。
TDDMS不仅屏蔽掉了底层存储引擎的差异化,为用户提供统一的编程与运维接口。同时,还将存储引擎解耦,并定义成一组插件化的接口,这种插件化的设计允许用户针对不同的需求组织存储引擎,使得TDDMS能够灵活适配不同的业务场景和存储需求。
...未完待续