微博AnalysisQl动态数据视图元数据设计

前言
目前,AnalysisQl 数据视图的元数据(维度、指标、指标计算器)需要通过代码(API)或资源文件的形式硬编码,应用启动时,按照声明的顺序依次注册。这种模式下,数据视图是 静态 的,任何一项变更都需要重新升级发布应用服务,不利于服务快速迭代。
考虑到这种情况,AnalysisQl 在保留原有 静态 视图的前提下,扩展出 动态 视图方案,基于数据库实现元数据的存储,通过更新相应的数据库记录,即可 实时动态 地更新数据视图。
AnalysisQl 项目主页:https://github.com/weibodip/analysisql。
元数据
数据视图元数据有 7 类:
- 数据视图信息
- 数据视图维度
- 数据视图维度值
- 数据视图指标
- 数据表信息
- 数据表维度
- 数据表指标计算器
每一类元数据对应着数据库的一张数据表,我们分别介绍。
注:数据库以 MySQL 为例进行介绍。
数据视图信息
数据视图信息表(aql_view_info),用于存储多个数据视图(即:主题)信息,包括:名称、别名、描述及状态信息。
| 字段名称 | 字段类型 | 字段含义 |
|---|---|---|
| id | INT | 主键ID |
| avi_topic | VARCHAR | 视图名称,通常使用英文表示。 |
| avi_alias | VARCHAR | 视图别名,通常使用中文表示,与 avi_topic(英文名称)相对应。 |
| avi_desc | VARCHAR | 视图描述,通常用于说明主题附加信息。 |
| avi_state | INT | 视图状态,数值 0 表示视图处于 禁用 状态;数值 1 表示视图处于 启用 状态,其余数值无效。 |
注:视图名称(avi_topic)全局唯一。
数据视图维度
数据视图维度表(aql_view_dimension),用于存储数据视图支持的维度(多个)信息,包括:名称、别名、描述。
| 字段名称 | 字段类型 | 字段含义 |
|---|---|---|
| id | INT | 主键ID |
| avd_topic | VARCHAR | 视图名称。 |
| avd_name | VARCHAR | 视图维度名称,通常使用英文表示。 |
| avd_alias | VARCHAR | 视图维度别名,通常使用中文表示,与 avd_name(英文名称)相对应。 |
| avd_desc | VARCHAR | 视图维度描述,通常用于说明维度附加信息。 |
注:视图名称(avd_topic)与视图维度名称(avd_name)组合全局唯一。
数据视图维度值
数据视图维度值表(aql_view_dimension_value),用于存储数据视图中各个维度对应的维度值(多个)。每一个维度的维度值支持多个版本(版本使用时间戳表示),通常使用最新版本(即时间戳最大)的维度值数据。
| 字段名称 | 字段类型 | 字段含义 |
|---|---|---|
| id | INT | 主键ID |
| topic | VARCHAR | 视图名称。 |
| dimension | VARCHAR | 视图维度名称。 |
| dtime | TIMESTAMP | 视图维度值时间戳,默认当前时间(CURRENT_TIMESTAMP)。 |
| dvalue | VARCHAR | 视图维度值。 |
写入维度值
数据视图维度值表中的维度值数据需要借助外部应用程序写入,可以使用定时或不定时的方式。注意,写入指定视图维度的维度值时,这些维度值的时间戳(dtime)需要保持一致,表示这些维度值归属于同一个版本。
读取维度值
读取指定视图维度的维度值时,需要经过以下2个步骤:
- 根据视图名称、视图维度名称计算视图维度值的最大时间戳(最新版本);
SELECT MAX(dtime) FROM %s WHERE topic = '%s' AND dimension = '%s'
- 根据视图名称、视图维度名称及视图维度值的最大时间戳检索维度值;
SELECT DISTINCT(dvalue) FROM %s WHERE topic = '%s' AND dimension = '%s' AND dtime = '%s'
注:视图名称(topic)、视图维度名称(dimension)与视图维度值时间戳(dtime)组成联合索引。
数据视图指标
数据视图指标表(aql_view_metric),用于存储数据视图支持的指标(多个)信息,包括:名称、别名、描述。
| 字段名称 | 字段类型 | 字段含义 |
|---|---|---|
| id | INT | 主键ID |
| avm_topic | VARCHAR | 视图名称。 |
| avm_name | VARCHAR | 视图指标名称,通常使用英文表示。 |
| avm_alias | VARCHAR | 视图指标别名,通常使用中文表示,与 avm_name(英文名称)相对应。 |
| avm_desc | VARCHAR | 视图指标描述,通常用于说明指标附加信息。 |
注:视图名称(avm_topic)与视图指标名称(avm_name)组合全局唯一。
数据表信息
数据表信息表(aql_view_table_info),用于存储数据视图支持的数据表(多个)信息,包括:名称、时间粒度大小、时间粒度单位、保存周期、时间延迟及状态信息。
| 字段名称 | 字段类型 | 字段含义 |
|---|---|---|
| id | INT | 主键ID |
| avti_topic | VARCHAR | 视图名称。 |
| avti_name | VARCHAR | 数据表名称,通常使用英文表示。 |
| avti_data | INT | 数据表数据时间粒度大小。 |
| avti_unit | VARCHAR | 数据表数据时间粒度单位,支持“s”(秒)、“m”(分钟)、“h”(小时)、“d”(天)、“w”(周)、“M”(月)、“q”(季度)、“y”(年)。 |
| avti_period | INT | 数据表数据保存周期,使用数据表时间粒度为计算单位,详情见后。 |
| avti_delay | INT | 数据表数据时间延迟,使用数据表时间粒度为计算单位,详情见后。 |
| avti_state | INT | 数据表状态,数值 0 表示数据表处于 禁用 状态;数值 1 表示数据表处于 启用 状态,其余数值无效。 |
假设,时间粒度大小(avti_data)为 5,时间粒度单位(avti_unit)为 m,表示数据表数据时间粒度为 5分钟。
假设,时间粒度为 5分钟,保存周期(avti_period)为 288,表示数据表数据保存周期为 1天。
假设,时间粒度为 5分钟,时间延迟(avti_delay)为 12,表示数据表数据时间延迟为 1小时;
注:视图名称(avti_topic)、数据表名称(avti_name)全局唯一;
数据表维度
数据表维度表(aql_view_table_dimension),用于存储数据视图/数据表支持的维度(多个)。
| 字段名称 | 字段类型 | 字段含义 |
|---|---|---|
| id | INT | 主键ID |
| avtd_topic | VARCHAR | 视图名称。 |
| avtd_table | VARCHAR | 数据表名称。 |
| avtd_name | VARCHAR | 数据表维度名称。 |
注:视图名称(avtd_topic)、数据表名称(avtd_table)及数据表维度名称(avtd_name)组合全局唯一。
数据表指标计算器
数据表指标计算器表(aql_view_table_calculator),用于存储数据视图/数据表支持的指标计算信息,包括:名称、指标计算查询引擎(类型、链接、用户名、密码)、指标计算规则(SQL查询语句)。
| 字段名称 | 字段类型 | 字段含义 |
|---|---|---|
| id | INT | 主键ID |
| avtc_topic | VARCHAR | 视图名称。 |
| avtc_table | VARCHAR | 数据表名称。 |
| avtc_metric | VARCHAR | 数据表指标名称。 |
| avtc_type | VARCHAR | 数据表指标计算时使用的查询引擎类型,支持“clickhouse”、“mysql”、“presto”。 |
| avtc_url | VARCHAR | 数据表指标计算时连接查询引擎的JDBC URL。 |
| avtc_user | VARCHAR | 数据表指标计算时连接查询引擎的用户名。 |
| avtc_passwd | VARCHAR | 数据表指标计算时连接查询引擎的密码。 |
| avtc_sql | VARCHAR | 数据表指标计算时使用的SQL查询语句,不同的查询引擎需要使用不同的SQL查询语法。 |
注:视图名称(avtc_topic)、数据表名称(avtc_table)及数据表指标名称(avtc_metric)组合全局唯一。
结语
AnalysisQl 会定时扫描加载数据视图表中所有处于 启用 状态的视图,然后使用视图名称从其它几类元数据表中扫描加载视图相应的维度、指标、数据表等信息。如果需要更新数据视图,只需要增加或更新相应的元数据记录,下一次扫描完成之后即可生效。
微博AnalysisQl动态数据视图元数据设计的更多相关文章
- Unity 3D Framework Designing(6)——设计动态数据集合ObservableList
什么是 『动态数据集合』 ?简而言之,就是当集合添加.删除项目或者重置时,能提供一种通知机制,告诉UI动态更新界面.有经验的程序员脑海里迸出的第一个词就是 ObservableCollection.没 ...
- Unity应用架构设计(6)——设计动态数据集合ObservableList
什么是 『动态数据集合』 ?简而言之,就是当集合添加.删除项目或者重置时,能提供一种通知机制,告诉UI动态更新界面.有经验的程序员脑海里迸出的第一个词就是 ObservableCollection.没 ...
- Oracle_高级功能(7) 数据字典视图和动态性能视图
oracle数据字典 1.概念数据字典是oracle数据库用来存储数据库结构信息的地方.数据字典是用来描述数据库数据的组织方式的,由表和视图组成.数据字典基表是在任何 Oracle 数据库中创建的第一 ...
- 【Paddy】如何将物理表分割成动态数据表与静态数据表
前言 一般来说,物理表的增.删.改.查都受到数据量的制约,进而影响了性能. 很多情况下,你所负责的业务关键表中,每日变动的数据库与不变动的数据量比较,相差非常大. 这里我们将变动的数据称为动态数据,不 ...
- SharePoint 2013 Designer系列之数据视图
在SharePoint使用中,数据展示是一块很重要的部分,很多时候我们会采用webpart的形式,但是有一些情况,我们不必使用开发,仅需使用Designer即可,下面让我简单介绍下数据视图的使用. 1 ...
- SqlServer性能优化 手工性能收集动态管理视图(三)
动态管理视图: 具体的实例语句: --关于语句执行的基本情况 select * from sys.dm_exec_query_stats --动态管理函数 需要提供参数 select top 1 ...
- oracle数据字典和动态性能视图
数据字典和动态性能视图数据字典是oracle数据库中重要的组成部分,提高了数据库的一些系统信息.(静态信息)动态性能视图记载了例程启动后的信息.(动态信息) 数据字典记录了数据的系统信息,是只读表和动 ...
- D3js初探及数据可视化案例设计实战
摘要:本文以本人目前所做项目为基础,从设计的角度探讨数据可视化的设计的方法.过程和结果,起抛砖引玉之效.在技术方案上,我们采用通用web架构和d3js作为主要技术手段:考虑到项目需求,这里所做的可视化 ...
- ViewPager使用记录2——展示动态数据
ViewPager是v4支持库中的一个控件,相信几乎所有接触Android开发的人都对它不陌生.之所以还要在这里翻旧账,是因为我在最近的项目中有多个需求用到了它,觉得自己对它的认识不够深刻.我计划从最 ...
随机推荐
- 【Laravel 】数据迁移文件常用方法速查表
一.存储引擎.字符编码相关操作 命令 描述 $table->engine = 'InnoDB'; 指定表的存储引擎(MySQL) $table->charset = 'utf8'; 指定数 ...
- Javascript 组成:ECMAscript、Dom、Bom
一.核心(ECMAScript) ECMAScript 定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言. 二.浏览器对象模型(BOM)——对应window对象 window:窗口 w ...
- SpringCloud系列使用Eureka进行服务治理
1. 什么是微服务? "微服务"一词来自国外的一篇博文,网站:https://martinfowler.com/articles/microservices.html 如果您不能看 ...
- 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战
<精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...
- [C#.NET 拾遗补漏]06:单例模式实佳实践
大家好,这是[C#.NET 拾遗补漏]专辑的第 06 篇文章.今天讲讲大家熟悉的单例模式. 单例模式大概是所有设计模式中最简单的一种,如果在面试时被问及熟悉哪些设计模式,你可能第一个答的就是单例模式. ...
- KNN算法基本原理与sklearn实现
''' KNN 近邻算法,有监督学习算法 用于分类和回归 思路: 1.在样本空间中查找 k 个最相似或者距离最近的样本 2.根据这 k 个最相似的样本对未知样本进行分类 步骤: 1.对数据进行预处理 ...
- Python os.tmpnam() 方法
概述 os.tmpnam() 方法用于为创建一个临时文件返回一个唯一的路径.高佣联盟 www.cgewang.com 语法 tmpnam()方法语法格式如下: os.tmpnam 参数 无 返回值 返 ...
- 使用 MySQLi 和 PDO 向 MySQL 插入数据
PHP MySQL 插入数据 使用 MySQLi 和 PDO 向 MySQL 插入数据 在创建完数据库和表后,我们可以向表中添加数据. 以下为一些语法规则: PHP 中 SQL 查询语句必须使用引号 ...
- Python PIL方式打开的图片判断维度
1. PIL方式打开的图片判断维度 好久没更新啦,哈哈哈~~!今天跟宝宝们分享一篇如何判断灰度图像和彩色图像维度的方法.我们在读取灰度图像和彩色图像时,发现读取出来的图片维度不同,当我们要做后续 ...
- ElasticSearch学习中的坑
elasticsearch 版本为 6.8.2 1 安装完启动报错: 解决,建立新用户执行 [root@localhost bin]# ./elasticsearch [2019-09-01T05 ...