线性回归在数据库中的应用

简介

        今天看到微信群有人问,如何知道数据库一年的磁盘增量?如果没有研究过统计学,IT人员对于这个问题就只能靠经验了去断定了。没经验的往往都是回复扩容越大越好。当然未来的事情我们是无法预料的。本博主就通过简单的线性回归做一个计算,算出一年数据库的磁盘增量的大小和概率。

线性回归 

        线性回归是一种统计学和机器学习中常用的方法,用于建立自变量(输入)与因变量(输出)之间的线性关系模型。它假设自变量与因变量之间存在线性关系,并试图找到最佳拟合直线,以最小化预测值与实际观测值之间的差距。

        在简单线性回归中,只涉及一个自变量和一个因变量。模型可以表示为:

y=mx+b

         其中,y是因变量,x是自变量,m是斜率,b是截距。模型的目标是找到最合适的斜率和截距,使得预测值与实际观测值之间的平方差最小化,这被称为最小二乘法。

        在多元线性回归中,涉及多个自变量和一个因变量。模型可以表示为:

        

 

        其中,y是因变量,x1​,x2​,…,xn​是多个自变量,b0​,b1​,b2​,…,bn​是回归系数。模型的目标是找到最合适的回归系数,以最小化预测值与实际观测值之间的误差。

        线性回归常用于预测、建模和理解变量之间的关系。它的简单性和解释性使其成为许多数据分析和机器学习问题的基础。然而,线性回归也有其局限性,例如,它假设自变量与因变量之间的关系是线性的,而且对异常值敏感。

统计数据库大小

        在实际生产中,我们需要知道数据库每日增量大小,具有一定的数据量进行对未来预测。我们使用存储过程,每天定时统计数据库大小。

创建表结构

        用于装载数据库每日的磁盘空间大小和变化

CREATE TABLE daily_stats (
    date date NOT NULL,
	database_name varchar(200),
    databases_size integer NOT NULL,
    size_increment integer
);

创建存储过程计算数据库的磁盘空间大小和变化

CREATE OR REPLACE FUNCTION update_daily_stats()
RETURNS void AS $$
DECLARE
    today_size integer;
    yesterday_size integer;
    increment_size integer;
BEGIN
  
    -- 获取今天的数据库大小
    SELECT databases_size INTO yesterday_size
    FROM daily_stats
    WHERE date = current_date - interval '1 day';
   
   --插入到目标表中
   insert into  daily_stats (
    date,
	database_name,
    databases_size,
    size_increment)
SELECT
current_date, 
string_agg(datname::text,',') as database_name,
sum(pg_database_size(datname)) AS databases_size,
sum(pg_database_size(datname))-yesterday_size  size_increment
from pg_database;

    RETURN;
END;
$$ LANGUAGE plpgsql;

 加入到定时调度中(这里使用crontab虚拟机自带的程序)

[postgres@vm03 ~]$ crontab -e 

0 0 * * *   psql  -c "SELECT update_daily_stats();"

让其统计每一天的数据库空间变化。

本文作为演示,假设出30天的数据库单日增量如下

30, 15, 64, 45, 92, 14, 23, 88, 14, 33, 24, 30, 14, 20, 36, 49, 16, 16, 32, 35, 46, 97, 13, 56, 32, 45, 26, 32, 65, 12

python编程

        博主目前使用线性回归算法,多是numpy包和spark的MLlib库。本文均会进行举例说明。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 数据集
data = np.array([30, 15, 64, 45, 92, 14, 23, 88, 14, 33, 24, 30, 14, 20, 36, 49, 16, 16, 32, 35, 46, 97, 13, 56, 32, 45, 26, 32, 65, 12])

# 月份
months = np.arange(1, len(data) + 1)
##使用NumPy的arange函数生成一个包含1到数据集长度的数组,用于表示月份。


# 使用NumPy进行线性回归
coefficients = np.polyfit(months, data, 1)
linear_model = np.poly1d(coefficients)
##使用np.polyfit函数进行线性回归,其中1表示一次线性回归,次数越多,曲线的曲率越接近散点的波动。np.poly1d用于创建一个一次多项式对象,即线性模型。



# 画出原始数据和线性回归模型的拟合结果
plt.scatter(months, data, label="Actual Data")
plt.plot(months, linear_model(months), color='red', label="Linear Regression Model")
plt.xlabel("Month")
plt.ylabel("Increment (GB)")
plt.legend()
plt.show()
##使用Matplotlib绘制散点图表示原始数据,然后使用红色线条表示线性回归模型的拟合结果。



# 预测一年的总增量
one_year_months = 12 * np.arange(1, 13)
one_year_increment = linear_model(one_year_months).sum()
print("预测一年的总增量:", one_year_increment)
##创建包含一年内每个月份的数组,然后使用线性回归模型预测每个月的增量,最后使用sum函数计算一年的总增量。


# 生成正态分布的随机样本
num_samples = 1000
simulated_data = np.random.normal(loc=one_year_increment, scale=5, size=num_samples)
#使用NumPy的random.normal函数生成一个包含1000个样本的正态分布,其中loc是均值,scale是标准差。

# 画出正态分布图
sns.histplot(simulated_data, kde=True, color='skyblue')
plt.axvline(x=one_year_increment, color='red', linestyle='--', label='Predicted Value')
plt.xlabel("One Year Increment")
plt.ylabel("Frequency")
plt.legend()
plt.show()
##使用Seaborn绘制正态分布的直方图和核密度估计图,同时用红色虚线表示预测值。

        通过线性回归计算出在一个月内数据库空间增量大小的线性回归模型,

        根据线性回归模型做出一年数据库增量大小,并做出正态分布图。期望值是~400。其置信区间~50%。常规我们在做预判的时候,取置信区间~80%即可。

         根绝以上的结果,可以算出一年数据库的磁盘空间增量大概是400G 有大约50%的概率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/247126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XS9922B-国产cvi协议,满足国内车载视频传输领域国产化降本需求

XS9922B 是一款 4 通道模拟复合视频解码芯片,支持 HDCCTV 高清协议和 CVBS 标 清协议,视频制式支持 720P/1080P 高清制式和 960H/D1 标清制式。芯片将接收到的高清 模拟复合视频信号经过模数转化,视频解码以及 2D 图像处理之后,转…

CVE-2023-49371|RuoYi 若依后台管理系统存在SQL注入漏洞

0x00 前言 RuoYi是一个后台管理系统,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安…

相信99%的朋友都没有注意到的数据库时间类型的问题

文章目录 创建表SQL实例小测试知识点小测试可以怎样处理只有查询有问题吗?MySQL时间 很多时候,程序运行起来没有问题,并不代表程序就精确,例如创建时间多一秒少一秒这种事情,很多时候是没有人注意到这个问题。 当然&am…

C++/语法@初始化列表

目录 初始化列表特征疑惑区别必在初始化列表中初始化的三种成员变量1、引用成员变量程序例子:运行结果: 2、const成员变量程序例子:运行结果: 3、自定义类型成员(没有默认构造函数的类)程序例子&#xff1a…

【LeetCode:2132. 用邮票贴满网格图 | 二维前缀和 + 二维差分和】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【docker 】Dockerfile指令学习

学习文档地址 上篇文章:【docker 】基于Dockerfile创建镜像 Dockerfile指令文档地址 .dockerignore 文件 Dockerfile指令 常见的指令 Dockerfile 指令说明FROM指定基础镜像,用于后续的指令构建。MAINTAINER指定Dockerfile的作者/维护者。&#xff…

伦敦金投资者的本质其实是风险管理者

长期在市场中可以稳定盈利的投资者,他们的秘密是什么?很多人以为,肯定是他有别人所没有的交易策略。其实并不是,交易技术固然很重要,但在持续盈利的问题上,技术所占的重要性是次要的,而主要的是…

Django 模型操作 - 多对多(九)

一、多对多关联管理器(对象调用) 前提:多对多(双向均有关联管理器)一对多(只有多的那个类的对象有关联管理器,即反向才有) 语法格式:正向:属性名反向:小写类名加 _set注意…

H3C ER G2系列路由器信息泄露漏洞

H3C ER G2系列路由器信息泄露漏洞 免责声明漏洞描述漏洞影响漏洞危害漏洞页面漏洞复现1. 构造poc2. 发生数据包,获取密码3. 登录系统 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地提高网络安全意识和技术水平。 任何人不得利用该文章…

详解—【C++】lambda表达式

目录 前言 一、lambda表达式 二、lambda表达式语法 2.1. lambda表达式各部分说明 2.2. 捕获列表说明 三、函数对象与lambda表达式 前言 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #i…

Java EE 多线程之多线程案例

文章目录 1. 多线程案例1.1 单例模式1.1.1 饿汉模式1.1.2 懒汉模式1.1.3 多线程下的单例模式 1.2 阻塞队列1.2.1 阻塞队列定义1.2.2 生产者消费者模型的意义1.2.4 标准库中的阻塞队列1.2.5 实现阻塞队列1.2.6 用阻塞队列实现生产者消费者模型 1.3 实现定时器1.3.1 标准库中的定…

V2X在做什么?连接未来智能出行的车联网(上)

来源&#xff1a;德思特测试测量 德思特分享丨V2X在做什么&#xff1f;连接未来智能出行的车联网&#xff08;上&#xff09; 原文链接&#xff1a;德思特分享 | V2X在做什么&#xff1f;连接未来智能出行的车联网&#xff08;上&#xff09; 欢迎关注虹科&#xff0c;为您提…

美易官方:零售销售数据提振信心

美易全球投资中心副总裁Kenny Jolin表示全球股市在经历了动荡之后逐渐恢复了稳定。最近&#xff0c;美国股市表现强劲&#xff0c;连续六天上涨&#xff0c;道琼斯指数也创下了新高。这一趋势不仅反映了投资者信心的恢复&#xff0c;也表明了全球经济正在逐渐复苏。 他说&#…

如何在Centos 7环境下安装MySQL并登录

目录 先获取MySQL官方yum源 然后正常使用yum命令下载mysql即可完成MySQL的下载 使用mysql客户端登录mysqld服务端 能够登录mysql客户端后&#xff0c;我们最后还需要做一点配置 先获取MySQL官方yum源&#xff08;包括对yum源的介绍&#xff09; 介绍一下yum源 yum源就是一…

文献管理器Zotero使用WebDAV结合内网穿透实现公网环境跨平台同步文献笔记

文章目录 一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 Zotero 是一款全能型 文献管理器,可以 存储、管理和引用文献&#xff0c;不但免费&#xff0c;功能还很强大实用。 ​ Zotero 支…

net实践记录

文章目录 前言是否使用继承快捷输入 实体&#xff1b;引用class&#xff0c;提示有保护性System.NullReferenceException:“未将对象引用设置到对象的实例。” 总结 前言 记录使用.net 项目开发过程基础问题记录&#xff0c;便于快速回顾与查询&#xff1b; 是否使用继承 快捷…

关于git clone速度极慢的解决方法

&#xff01;&#xff01;&#xff01;&#xff01;前提条件&#xff1a;得有一个可靠且稳定的梯子&#xff0c;如果没有接下来的就不用看了 前言&#xff1a;我在写这篇文章前&#xff0c;也搜索过很多相关git clone速度很慢的解决方法&#xff0c;但是很多很麻烦&#xff0c…

Maven环境搭建及配置

Maven环境搭建及配置 1.下载部署 官方网站下载正式版的Maven文件,打开bin目录&#xff0c;复制路径然后去环境变量中的path下配置环境变量&#xff0c; 如果只有一个用户只需要在上面path配置复制的路径,当然也可以直接在下面配置,下面配置默认给所有用户都配置 设置完成打开控…

垃圾收集器及内存分配

目录 垃圾收集器种类 HotSpot虚拟机所包含的收集器 垃圾收集器部分源码 垃圾收集器后台日志参数说明与配对关系 1、串行垃圾收集器 串行垃圾收集器运行示意图 1&#xff09;、编写测试代码 2&#xff09;、设置垃圾回收为串行收集器 3&#xff09;、启动程序&#xff…

激活Windows过程及报错解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上, 运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本

激活Windows过程及报错问题解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上&#xff0c;运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本。 前言 最近在激活Windows过程中&#xff0c;遇到了报错: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上…