当前位置: 首页 > 科技观察

关系数据库存储多维索引数据

时间:2023-03-17 13:59:08 科技观察

什么是多维索引数据?指标是一个集合概念,可以细分为原子指标和派生指标。以上海地区某公司近一周的销售额为例,整体为派生指标,其中销售额为原子指标;最后一周是时间,公司和地区是维度。可以看出指标数据由三部分组成:时间维度值。其中,维数可以是一维,也可以是多维,也可以是零维,简称多维。什么是关系数据库?典型的关系数据库是MySQL。使用时需要根据业务设计数据模型:数据库中有哪些数据表,数据表中有哪些字段?然后,创建对应的数据库和数据表;最后,存储业务数据。关系数据库有一个特殊的约定:数据模式相对固定。当业务不变时,数据模型不会轻易改变。使用关系型数据库存储多维指标数据有哪些问题?不同的业务会有不同的指标,每个业务可以建立一个单独的数据库,这样更容易理解。每个指标都会有时间和值,但不同指标之间的维度名称和维度数量可能不同。最直接的设计:为每个指标创建一个单独的数据表,位于某个业务数据库的数据表中,除了time和value字段,根据不同的指标,创建若干个维度字段假设一个指标有三个维度:a,b和c,表结构如下:timestampabcvalue2022-09-1500:00:00a1b1c112022-09-1501:00:00a2b2c222022-09-1502:00:00a3b3c33timestamp表示时间,value表示值,a,bc代表维度。问题很明显:如果一个业务有几万个指标,就需要创建几千个数据表。无论是预先创建数据表,还是通过添加指标动态创建新的数据表,如此大量的数据表都是不可接受的。固定的数据表结构无法很好地应对指标的维度名称和维度数量发生变化的场景。受业务方部署环境限制,仅支持关系型数据库MySQL;而业务方不能接受一个业务指标一张数据表的粗略设计。考虑到业务指标的数量是不可控的,但是业务指标的维度数量是相对可控的。能否根据维数创建指标表?毕竟大多数数据可视化组件最多支持三个维度。例如:维数为0的索引表,维数为1的索引表,维数为2的索引表...假设一张维数为3的索引表,表结构如下:idtimestampd1d2d3valuem12022-09-1500:00:00a1b1c11m22022-09-1501:00:00a2b2c22m32022-09-1502:00:00a3b3c33id为指标ID,用于唯一标识该指标;d1、d2、d3分别表示维度1、维度2、维度3。一个数据表可以存放多个同维度索引的数据,如:m1、m2、m3。存储指标数据时,只需要根据指标的维数,将指标数据存储到相应维数的指标表中即可。索引表可以根据业务可能的最大维数预先创建。当需要扩展业务维度数量时,只需要添加有限数量的特定维度数量的索引表。不够!当指标有维度时,指标表只支持按照指标的维度顺序依次存储和查询维度1、维度2、……的维度数据,并不知道具体的维度名称。考虑到业务希望指标发生变化时能够追溯历史数据,同一个指标需要有多个版本。也就是说,我们需要知道:指标有哪些版本,某个版本的指标有哪些维度,维度名称是什么,某个版本的指标有哪些数据?我们可以:创建一个版本表来存储指标的哪些版本创建一个表维度表来存储某个版本指标的维度(名称)。根据维数创建若干个指标表,存储某个版本指标的指标数据是可行的!存储方案版本表idversionm11m21m13id表示指标ID,version表示版本号。版本表存储指标与版本的对应关系。可以查询指标的历史版本记录,也可以查询指标的最新版本。维度表idversionnamem13a1m13a2m13a3id表示指标ID,version表示版本号,name表示维度名称。维度表存储指标/版本与维度名称的对应关系。您可以通过指标ID和指标版本查询维度名称列表。多个维度名称的顺序是按照维度名称存储的顺序来排序的。指标表idversiontimestampd1d2d3valuem132022-09-1500:00:00a1b1c11m132022-09-1501:00:00a2b2c22m132022-09-1502:00:00a3b3c33指标表存储指标数据。注意Dimension1、Dimension2、DimensionN的表示方式。存储指标数据添加指标时,使用Unix时间戳作为版本号,在版本表中存储指标ID和版本;如果指标有维度,则在维度表中存储指标ID、版本号、维度名称,如果有多个维度,则需要按照维度排列的顺序依次存储多条记录。修改指标时,如果修改后的指标维度名称列表编号或内容与维度表中该指标最新版本的维度名称列表不一致,则需要存储新的指标版本号和维度名称列表该指标与新增指标相同。存储指标数据时,获取维度表中指标最新版本的维度名称列表,即可知道指标维度的个数;根据维度个数选择指标表,将指标数据存入指标表,按维度名称依次存储维度1、维度2、....查询指标数据根据指标ID查询版本表获取指标的最新版本号,或直接指定版本号;根据指标ID和版本号查询维度表,得到指标的维度名称列表和维度个数;根据指标的维数,选择索引表;根据索引ID和版本号查询索引表,获取索引的数据;您还可以使用时间或维度来过滤索引数据。将4中获取的指标数据中的维度1(d1)、维度2(d2)、……替换为2中获取的指标的维度名称。