2013-06-25 52 views
0

我需要这样做: 我有一个繁重的处理方法,我的客户访问很多时候执行那种繁重方法的网站部分。所以我想一种不会每次都执行这种沉重的方法。触发器x PHP控制器

我的解决方案是什么?我将保存这种繁重方法的第一次运行的值,并使用此已处理的值,而没有更改使该方法再次运行。例如,

因此,例如。当我的客户访问主页时,系统向他说“您的X产品已损坏”,当我的客户在产品上改变某种东西时,我会更改数据库上的标志,并且此标志对我说“再次运行繁重的方法来计算这个”。

这种情况,现在我的疑问,它更好地使用触发器来说“当表产品发生了变化,更新标志为false”,或者在PHP上执行该操作?

如果我选择使用触发器,什么是proccess /数据库/内存/带宽成本?

我读触发器是坏的,因为可维护性低,很难让新的程序员找到这个函数在哪里。但它不会很快改变。我在代码上有很多地方可以更改产品并关闭标志。

所以我知道PHP在很多方面都比较好,但实施起来比较困难。

你们可以告诉我什么?

+0

为什么不缓存? –

+0

@DamienPirsy嗨,感谢您的关注。由于我需要全球化的背景,这个功能是某种“警戒”,还有很多其他的情况。我需要它给所有用户。 – Guerra

回答

0

我会去触发器。虽然他们可能会在痛苦的脖子有时他们允许集中代码并将其与应用程序逻辑分开,这意味着无论产品如何更改,数据库将标记它进行处理。

话虽这么说,可能整体的高级处理流程可能如下:已改变插入的product_id特殊表

  1. AFTER UPDATEtrigger标志产品flagged_products
  2. 存储过程(我们称之为sp_process_flagged_products )按需(当用户点击按钮时)或定期(例如每天一次)使用mysql events或cron处理标记的产品并从flagged_products表中清除处理过的产品。

现在触发跟踪更改产品可能是一样简单

CREATE TRIGGER tg_product_update 
AFTER UPDATE ON products 
FOR EACH ROW 
    INSERT IGNORE INTO flagged_products (`product_id`) VALUES (NEW.product_id); 

...,是很难的新编程人员找到哪里是这个函数...

要列出数据库中的所有触发器,请使用SHOW TRIGGERS

SHOW TRIGGERS 
-- LIKE '%product%' 

这里是SQLFiddle演示。