当前位置: 首页 > news >正文

成都高新区规划建设局网站广西南宁电商网站建设

成都高新区规划建设局网站,广西南宁电商网站建设,百度怎么免费推广,代运营公司是什么意思数据处理的规范中,第一个层次是ODS,一般成为贴元层,最靠近业务库的数据。需要统计ODS中有数据表的行数,及更新频率。(假设在ODS中是Mysql数据库) 需求描述 有多个mysql的实例,每个实例中有多个…

数据处理的规范中,第一个层次是ODS,一般成为贴元层,最靠近业务库的数据。需要统计ODS中有数据表的行数,及更新频率。(假设在ODS中是Mysql数据库)

需求描述

有多个mysql的实例,每个实例中有多个数据库schema,每个shema有多个数据表。原始的数据定时增量同步或全量同步到ODS中,ODS中不包含数据的历史版本。是同步的最新版本。

根据当前的现状,需要统计

每个表有多少行

每个表更新的频率

每个表的字段详细

实现思路

分析需求

通过读取myql的元数据,获取到每个数据表的行数。然后持续保存一定的周期,如60天,可以观察一下它的趋势,如果在60天之后,都没有更新,基本上不是高频数据。

通过读取mysql的元数据,获取每个表的字段信息,可以获取到每个表的字段详细信息,这个不需要保留历史版本,仅仅保留最新的一个版本

技术方案

使用SpringBoot+jpa的方式来进行实现

表元数据获取

解析config.xml文件,形成一个类。然后采用jdbc的原始方式进行循环连接各url。获取到数据之后,转入到相应的类中。使用jpa的@entity的方式,将数据保存到数据库中

列元数据获取

解析config.xml文件,形成一个类。然后采用jdbc的原始方式进行循环连接各url。获取到列的数据之后,转入到相应的类中。使用jpa的@entity的方式,将数据 分批 保存到数据库中

非功能性

为保障程序的稳健性运行,需要考虑 日志,异常,可配置性

日志

logback:rolling policy:file-name-pattern: "datemeta.%d{yyyy-MM-dd}.%i.log"max-history: 10max-file-size: 1000KBtotal-size-cap: 20000KB

异常

自定义异常及枚举异常的类型

public enum DbMetaErrorCode {// 文件相关错误CONFIG_FILE_NOT_FOUND(1001, "配置文件未找到: {0}"),CONFIG_PARSE_ERROR(1002, "配置文件解析失败: {0}"),// 配置验证错误DUPLICATE_DATA_INSTANCE(2001, "发现重复的数据源实例名称: {0}"),MISSING_DATA_INSTANCE_NAME(2002, "数据源实例缺少有效的 dbinstancename"),INVALID_DATASOURCE_URL(2003, "{0}: URL无效"),MISSING_DRIVER_CLASS(2004, "{0}: 缺少驱动类名"),INVALID_KEEPDAYS(2005, "保留天数无效, 必须在{0}-{1}之间, 当前值: {2}"),MISSING_DEST_DATASOURCE(2006, "目标数据源配置缺失"),MISSING_DEST_URL(2007, "目标数据源URL缺失"),MISSING_DEST_DRIVER(2008, "目标数据源驱动类名缺失"),// 系统错误SYSTEM_STARTUP_FAILED(5001, "系统启动失败"),DATABASE_CONNECTION_FAILED(5002, "数据库连接失败: {0}"),// 通用错误INVALID_CONFIG(6001, "配置无效: {0}");private final int code;private final String messageTemplate;DbMetaErrorCode(int code, String messageTemplate) {this.code = code;this.messageTemplate = messageTemplate;}public int getCode() {return code;}public String getMessage(Object... params) {return MessageFormat.format(messageTemplate, params);}
}

配置化

原始数据库的连接,配置化

目标数据库的连接,配置化

用户的使用方式

本机具有jdk8以上环境

有3个文件,将这3个文件,复制到同一个目录下。该目录不要使用中文。

数据源配置config.xml

字段解释

keepdays:在数据库中保留的表的元数据历史版本天数

<sourcedatasource>

        是针对原始的数据库实例的目录

        datainstance是数据库的实例,可以有多个实例,如A,B,C等

        数据库实例中有多个数据库,仅选择任意一个数据库,配置数据库连接。这样就可以访问该实例中所有的元数据。

        如,数据库有5个实例,ABCDE,每个实例下有100个库。

        那么在 需要配置 datainstance 5个。

        每个里面的原始选择该 datainstance下任意一个数据库的driveclass, url,password

<destinationdatasource>

这个是将结果的元数据存入的数据库;统计的数据会被执行到该数据库中,

注意:在xml中配置连接的时候,如果出现特殊字符,需要进行转义。如& 字符需要转换为&amp,

<destinationdatasource><driverclassname>com.mysql.cj.jdbc.Driver</driverclassname><url>jdbc:mysql://localhost:3306/speed?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</url><username>root</username><password>Steven@123</password><note>目标数据库</note></destinationdatasource>

目标数据库下sql语句执行

CREATE TABLE `tablemetainfo` (`id` bigint NOT NULL,`codecreateUserId` varchar(255) DEFAULT NULL,`codecreateTime` datetime(6) DEFAULT NULL,`codelastModifiedUserId` varchar(255) DEFAULT NULL,`codelastModifiedTime` datetime(6) DEFAULT NULL,`codeversion` int DEFAULT NULL,`dbinstancename` varchar(255) DEFAULT NULL,`note` varchar(255) DEFAULT NULL,`tableCatalog` varchar(255) DEFAULT NULL,`tableSchema` varchar(255) DEFAULT NULL,`tableName` varchar(255) DEFAULT NULL,`tableType` varchar(255) DEFAULT NULL,`engine` varchar(255) DEFAULT NULL,`version` int DEFAULT NULL,`rowFormat` varchar(255) DEFAULT NULL,`tableRows` bigint DEFAULT NULL,`avgRowLength` bigint DEFAULT NULL,`dataLength` bigint DEFAULT NULL,`maxDataLength` bigint DEFAULT NULL,`indexLength` bigint DEFAULT NULL,`dataFree` bigint DEFAULT NULL,`autoIncrement` bigint DEFAULT NULL,`createTime` datetime(6) DEFAULT NULL,`updateTime` datetime(6) DEFAULT NULL,`checkTime` datetime(6) DEFAULT NULL,`tableCollation` varchar(255) DEFAULT NULL,`checksum` varchar(255) DEFAULT NULL,`createOptions` varchar(255) DEFAULT NULL,`tableComment` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;CREATE TABLE `columnmetainfo` (`id` bigint NOT NULL,`codecreateUserId` varchar(255) DEFAULT NULL,`codecreateTime` datetime(6) DEFAULT NULL,`codelastModifiedUserId` varchar(255) DEFAULT NULL,`codelastModifiedTime` datetime(6) DEFAULT NULL,`codeversion` int DEFAULT NULL,`dbname` varchar(255) DEFAULT NULL,`note` varchar(255) DEFAULT NULL,`tableCatalog` varchar(255) DEFAULT NULL,`tableSchema` varchar(255) DEFAULT NULL,`tableName` varchar(255) DEFAULT NULL,`columnName` varchar(255) DEFAULT NULL,`ordinalPosition` int NOT NULL,`columnDefault` varchar(255) DEFAULT NULL,`isNullable` varchar(255) DEFAULT NULL,`dataType` varchar(255) DEFAULT NULL,`numericPrecision` int DEFAULT NULL,`numericScale` int DEFAULT NULL,`datetimePrecision` int DEFAULT NULL,`characterSetName` varchar(255) DEFAULT NULL,`collationName` varchar(255) DEFAULT NULL,`columnType` varchar(255) DEFAULT NULL,`columnKey` varchar(255) DEFAULT NULL,`extra` varchar(255) DEFAULT NULL,`privileges` varchar(255) DEFAULT NULL,`columnComment` varchar(255) DEFAULT NULL,`generationExpression` varchar(255) DEFAULT NULL,`srsId` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;CREATE TABLE `logdto` (`id` bigint NOT NULL,`codecreateUserId` varchar(255) DEFAULT NULL,`codecreateTime` datetime(6) DEFAULT NULL,`codelastModifiedUserId` varchar(255) DEFAULT NULL,`codelastModifiedTime` datetime(6) DEFAULT NULL,`codeversion` int DEFAULT NULL,`logContent` varchar(255) DEFAULT NULL,`logType` int DEFAULT NULL,`operateType` int DEFAULT NULL,`createBy` varchar(255) DEFAULT NULL,`createTime` datetime(6) DEFAULT NULL,`costTime` bigint DEFAULT NULL,`ip` varchar(255) DEFAULT NULL,`requestParam` varchar(255) DEFAULT NULL,`requestType` varchar(255) DEFAULT NULL,`requestUrl` varchar(255) DEFAULT NULL,`method` varchar(255) DEFAULT NULL,`username` varchar(255) DEFAULT NULL,`userid` varchar(255) DEFAULT NULL,`tenantId` int DEFAULT NULL,`clientType` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

运行程序

在3个文件的目录下,进入dos的界面,执行

java -jar .\dbmeta-1.0.1.jar;将自动部署一个web服务程序

获取表的元数据

用户手动触发访问

这个是获取到最新的表的元数据。

http://127.0.0.1:8066/tabledatainfo

自动定时任务

// 每天凌晨5点执行,cron 表达式:0 0 5 * * ?
@Scheduled(cron = "0 0 5 * * ?")

每次执行的时候,把今天的数据先进行删除,然后把60天的数据删除,然后在插入本次获取的数据。

获取列的元数据

 这个是获取到最新的列的元数据

http://127.0.0.1:8066/columndatainfo

列每次手动更新,没有必要定时任务

数据分析

SELECT
    dbinstancename,
    tableSchema,
    tablename,(
    max( tablerows )- min( tablerows )) maxmindiff 
FROM
    tableinfo 
GROUP BY
    dbinstancename,
    tableSchema,
    tablename 
HAVING
    max( tablerows )- min( tablerows )>10

假设   最大值-最小值=10,为更新频率高的标记。

从这个结果集中,可以初步评估有哪些是高频更新,哪些是低频更新。

这种评估方法对于在ods中没有更新时间的来看,是可参考的。

最理想的方式,是在ODS的同步时候,同时需要同步 updatetime的时间

开源的代码地址

https://gitee.com/stevenworkshop_admin/dbmeta

http://www.yayakq.cn/news/472254/

相关文章:

  • 橙云的主机支持放两个网站吗长春seo整站优化
  • 个人网站设计主题静态网站怎么入侵
  • WordPress英文网站网站建设只有20%的利润
  • 布吉建设网站轻量服务器wordpress
  • 国际摄影网站网站建设冒用身份信息
  • 一定要知道的网站中国纪检监察报社长
  • 荆州网站建设 众火网北京高端网页制作
  • 现在做网站建设的公司多么成都计算机培训机构排名前十
  • 自己做的网站如何上传文件wordpress数据库连接时错误
  • 海南千筑建设工程有限公司网站广西建设厅网站
  • php网站开发需要学哪些开发大型网站
  • 济南网站建设(选 聚搜网络)企业网站的常见类型有
  • 互联网网站制作大学学术建设专题网站
  • 用wps网站栏目做树形结构图张店网站建设方案
  • 网站站点查询网站建设包括哪些流程
  • 用jsp做网站的难点网店推广的平台有哪些
  • 电子商务网站建设与管理相关论文合肥网络推广费用
  • 将任意网站提交给google搜索引擎腾讯风铃wordpress
  • 站外推广方式360搜索网站提交
  • 商城模板网站模板wordpress谷歌字体
  • 怎么建设网站容易被百度抓取邯郸微信推广平台
  • 东莞专业建网站网站建设大概好多钱
  • 个人做民宿需要建立网站吗怎么做网站呀
  • 卖服务器网站源码网页设计代码大全表单
  • 甘肃网站怎样备案公司官网制作百度
  • 江门专业网站制作公司怎么更改网页上的内容
  • 桂林网站建设 腾云应不应该购买老域名建设新网站
  • 成都建工雅安建设有限责任公司网站工程公司会计账务处理
  • 网站建设基础资料品牌建设部门工作职责与分工
  • 在哪个网站可以学做衣服制作官网