数据库触发器,是异步的吗?

发布于 2024-12-10 21:05:10 字数 137 浏览 0 评论 0 原文

我计划在我的网站上审核/记录一些事件(例如添加/更新/删除一些表)。我计划添加数据库触发器,我认为随着时间的推移,审计表可能会有大量数据,并且在该表中插入行可能需要更多时间。 我的问题是触发器将异步运行或者是否需要在前端调用返回之前完成?

谢谢

I am planning to audit/log few events on my Web site (like adding/updating/deleting few tables). I am planning to add database triggers, I think over the time the audit table may have lot of data and inserting row in that table may take more time.
My question is that the triggers will run Asynchronous or whether it needs to completed before the front end call returns?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

请恋爱 2024-12-17 21:05:10

几乎可以肯定它们将是同步的,因为否则,您已经破坏了原子性的全部要点(可以原子地对表进行更改,然后触发器可能会失败,这意味着您的审计跟踪是无用的)。

我并不是说异步触发器不可能,但我看不出它们对您有任何用处。

如果您担心表变大,还有其他方法可以解决这个问题。一种是分区(例如基于日期),或者,如果不可用,则定期将审核行传输到基于日期的存档表,然后在主表中将其删除。

这样,主表只保存最近 N 个月的数据,所有其他数据都存储在其他地方。

Almost certainly they would be synchronous since, otherwise, you've blown the whole point of atomicity away (a change may be made to a table atomically then the trigger may fail, meaning that your audit trail is useless).

I'm not saying async triggers aren't possible but I can't see them being of any use to you.

If you're worried about the table getting large, there are other ways to handle that. One is partitioning (based on date for example) or, if that's not available, periodic transfer of audit rows to date-based archive tables, followed by their deletion in the main table.

That way, the main table only ever holds data for the last N months and all other data is stored elsewhere.

时光沙漏 2024-12-17 21:05:10

触发器始终是同步的。它们作为事务的一部分运行,无论是显式的(使用 BEGIN TRAN)还是隐含的(使用 INSERT 等)。

在大多数应用程序中,日志记录和审核是强制性的:如果触发器中写入日志或历史表失败,则父 INSERT 等也会失败。

仅当循环编码错误、发送电子邮件或调用 时,触发器才会花费很长时间MS Word 拼写检查器

href="http://clicpharmacodebits.wordpress.com/2010/11/27/call-a-web-service-from-sql-server-trigger/" rel="nofollow">调用 您还可以使用 更改数据捕获

Triggers are always synchronous. They run as part of the transaction whether explicit (with BEGIN TRAN) or implied (with INSERT etc).

In most applications, logging and auditing is mandatory: if the write to a log or history table fails in a trigger, then then parent INSERT etc fails too.

Triggers only a take a long time when coded badly with loops, or sending emails, or invoking the MS Word Spell Checker or calling web services

Instead of triggers you can also use Change Data Capture

东北女汉子 2024-12-17 21:05:10
  • 我建议创建一个适当的审计表结构
  • 示例:- 灵长类审计表和带有 old & 的辅助表。新值
  • 审核日志可以通过触发器进行管理
  • 如果管理得当,它不应该成为开销
  • 您应该有适当的归档流程
  • I'd suggest to create an appropriate audit-table(s) structure
  • Example:- A primate audit table and a secondary table with old & new values
  • Audit-logs could be managed via triggers
  • It shouldn't be an overhead if managed appropriately
  • You should have archival process in place
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文