php中有没有什么方法可以实现实时监听数据库中的某张表的变化

php中有没有什么方法可以实现实时监听数据库中的某张表的变化,第1张

最好的办法是,应用程序生命周期内,对于数据库设置有事件钩子,用于监听程序对于数据库的 *** 作。这样非常方便处理逻辑流程。

1 - 表的数据变化

表数据发生了变化,毫无疑问是写 *** 作,包括以下几种情形:

新建条目 create

更新条目 update

删除条目 delete

以上三种都是写 *** 作,会对表数据写入。

2 - 事件钩子

既然需要实时监控,那么每个数据库的 *** 作,都需要考虑在内,这是全局的监听。

以laravel的Eloquent ORM 模型触发事件,允许你挂接到模型生命周期的如下节点: retrieved、creating、created、updating、updated、saving、saved、deleting、deleted、restoring 和 restored。事件允许你每当特定模型保存或更新数据库时执行代码。每个事件通过其构造器接受模型实例。

模型内添加事件监听钩子

如果重用率很高,那么使用观察者 Observer 方式进行监听更为高效。

Laravel Observer

结语

上面的方法要求读者有laravel框架的使用基础,对于构建中大型应用非常有利。

创建表,存储每天的表空间占用情况

CREATE TABLE [dbo].[t_rpt_table_spaceinfo](

[table_name] [sysname] NOT NULL,

[record_date] [date] NOT NULL,

[record_time] [time](7) NOT NULL,

[rows_count] [bigint] NULL,

[reserved] [bigint] NULL,

[data_size] [bigint] NULL,

[index_size] [bigint] NULL,

[unused] [bigint] NULL,

CONSTRAINT [PK_t_rpt_table_spaceinfo] PRIMARY KEY CLUSTERED

(

[table_name] ASC,

[record_date] ASC,

[record_time] ASC

)

)

2. 新建作业

新建作业,作业计划每天凌晨运行一次,每天记录表占用的空间情况,存储到上一步建立的表中

作业中执行的T-SQL代码为:

SET NOCOUNT ON

/*创建临时表,存放用户表的空间及数据行数信息*/

CREATE TABLE #tablespaceinfo

(

nameinfo VARCHAR(500) ,

rowsinfo BIGINT ,

reserved VARCHAR(20) ,

datainfo VARCHAR(20) ,

index_size VARCHAR(20) ,

unused VARCHAR(20)

)

DECLARE @tablename VARCHAR(255)

/*使用游标,循环得到表空间使用情况*/

DECLARE Info_cursor CURSOR

1、象你这种情况多半是另外一个不受控的软件在写数据。

2、然后你用类似计时器技术,定时去读数据库。

3、允许多久的时间差?

4、数据多大、结构是否合理,有可辨识的时间字段用于减少排查工作量。

5、这种情况下,差个5分钟,对于不懂的外行来说,也基本是实时了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10870911.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存