对于企业数据资产管理而言,其情况较为繁杂,在此之中,关乎数据治理的核心操作界面,乃是那个元数据注册的页面。
它负担着元数据的静态管理一项任务,承担着元数据的动态采集另一项任务,它还是连接数据标准的一个关键,还是连接物理数据库的一座桥梁。

从关于数据库设计以及运维的视角去看,元数据管理的每一个功能方面,背后都关联着深度的SQL逻辑,涉及性能优化方面的考虑,同时包含保障数据一致性的相关情形。

元数据定义的底层逻辑与表结构设计

在元数据注册模块中,表信息和字段信息构成了基础。


就数据库层面的设计而言,一般情况下,会有两张核心的表存在着,一张是名为metadata_tables的表,也就是元数据表,另一张是名为metadata_columns的表,即元数据字段表。

在前者这边,记录着表的那个物理名称,还有数据源的类型,所属库的那个名称,以及分类目录的ID;而在后者这里,记录的是字段的详细属性,比如说字段的名称,数据的类型,长度,精度,以及关联的数据元ID。
在提升查询效率这个方面,就元数据列表而言,当进行多条件搜索,也就是像按照业务系统以及分类目录做筛选,这种情况下,需要的是,在metadata_tables里边的data_source字段之上,以及在catalog_id字段之上,去构建联合索引。

若是针对字段信息开展模糊搜索,像依据中文名称或英文名称来进行检索,那么就应该思考在metadata_columns表之上建立全文索引,防止出现类似LIKE ‘%keyword%’这种情况致使的全表扫描,进而可以优化性能。
元数据采集与扫描:动态SQL的生成与合并

元数据采集的关键之处在于,凭借JDBC对业务数据库进行连接,要通过此连接来扫描其元数据信息。

系统借助执行一些特定的SQL语句,这其中包括像SHOW TABLES;这样的语句,或者是通过去查询information_schema库,以此来实现获取表结构这项操作。
当技术信息被扫描出来之后,系统遭遇到了一种选择,这种选择是在“忽略”以及“覆盖”原本注册的内容之间进行的。

在实现上,这通常涉及复杂的UPSERT(更新插入)操作。
举个例子,在扫描的过程当中,当察觉到字段类型自 VARCHAR(64) 转变成为 VARCHAR(128) 之际,系统便会生成一条 UPDATE 语句。

为了确保事务具备原子性,这个过程需要于数据库事务里达成,首先要删除等待更新的字段关联关系,接着插入全新的字段定义,或者运用ON DUPLICATE KEY UPDATE语法,以此保障数据在并发操作情形下的一致性。
批量导入/导出与SQL解析技术
批量导入功能是元数据注册的重要入口。

新的模板,会把多个表格合并到同一个Sheet当中,这无疑是给后台的解析逻辑提出了进一步的更高要求。


系统需要逐行读取Excel,并根据表物理名称进行分组聚合。
于导入期间,系统事实上是在构造一个庞大的,名为批处理SQL语句集之物。

想要提升写入性能,一般会运用JDBC batch机制,像是单回提交1000条INSERT语句这样的情况。
对于覆盖模式,要先去执行DELETE操作,此操作所针对的是将数据源类型、库名、表名完全一样的记录给删除掉。完成该操作后,接着还要执行INSERT操作。或者呢,可采用这样的策略,先进行SELECT以判断相应目标是不是存在,然后依此先SELECT的结果或情况再执行UPDATE或者INSERT操作,这便是所谓的MERGE INTO逻辑。

当用户借助手动方式去添加元数据,而此时不存在物理表,并且当用户有生成DDL的需求时,系统担当起了一个SQL解析器的角色。
它把前端传递过来的,以JSON格式呈现的表字段信息,借助代码逻辑来,拼接成规范的,CREATE TABLE语句。
此过程要严谨对待字段的数据类型映射,比如说把业务层面所定义的“字符串”那般的类型,转变成为数据库的VARCHAR(255),还要进行字符集设置,以及索引定义,以此来保证生成的SQL在数据库客户端能够执行得毫无差错。
数据标准联动与元数据变更管理

字段关联数据元是保障数据标准化的关键。
当用户于元数据编辑页关联数据元 ,且完成确认同步以后 ,系统所执行的是一个 ,名为 数据同步存储过程 的操作。
这个过程呢,会把数据标准中心那儿的数据元属性,也就是数据类型、长度以及格式,强制性地覆盖到metadata_columns表的相应字段当中。

平日里为了确保数据能够实现溯源,一般情况下还会于变更日志表当中记录下一条操作记录,这条操作记录记载的内容是“由数据元[XX]自动进行填充覆盖”。

对于变更管理(如查看差异项),系统依赖于版本控制机制。
每当进行采集操作,或者手动编辑之后提交,系统并非会直接就去覆盖原本存在的记录,而是于metadata_versions表当中插入一条快照形式的记录。

当用户进行“查看差异项”的点击操作时,系统借助JOIN查询,把当前版本同上次版本的字段列表予以比对,运用集合运算(像EXCEPT或者NOT EXISTS),去辨别新增、删除以及修改后的字段,并且经由颜色以高亮状呈现。
性能优化与运维技巧

于元数据导出记录的页面里,当面临着众多大量的导出任务之际,列表页面层面的查询性能是占据着至关重要地位的。
涉及到分页进行查询操作时,较为常见的一种优化方式乃是运用延迟关联(Deferred Join)。

首先,借助索引迅速找出主键ID,接着,凭借主键回到表中去查询详尽数据,防止因OFFSET过大而致使的性能下降。
针对“下载失败列表”这项功能,在一般情况下,这个系统会把遭遇失败的数据写入到Redis缓存里,或者是写入到单独设立的异常日志表当中,并且还会去生成出一个具备唯一性的Token。
在进行下载操作的时候,借助Token此方式直接去拉取数据,不过并非是于内存当中实时地进行组装操作,通过这样的做法来把应用服务器所承受的内存压力给减轻掉,进而提高系统自身的稳定性。
凭借上述深度的数据库设计策略,以及优化策略,元数据注册页面,不光是一个功能入口,更是变成了一个具备高效特质、稳定特质且智能特质的数据治理枢纽。

Comments NOTHING