gpt4 book ai didi

sql-server - 定期事件实现

转载 作者:行者123 更新时间:2023-12-03 12:30:38 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 2 网站。所有业务都在数据库存储过程中(MS SQL SERVER 2008)。
任务:
一些用户使用网站创建记录。适当的行插入到表中。该行有另一个表的外键,它的值在过程中设置。然后我希望应用程序将记录(更改外键字段)重新分配给另一个,如果它在 1 分钟内没有被处理。
例如:
1. 用户创建记录A(id = 1, adminId = 1)
2.只有id=1的管理员才能看到这条记录,他应该在1分钟内处理。
3. 如果admin 1 在1 分钟内没有处理记录,应该重新分配给另一个管理员。例如 A 更新为 (adminId = 3)
哪种方式会更好?并行线程?另一个应用程序在后台?或者……

最佳答案

我认为您不需要单独的进程来处理时间。

如果您跟踪记录创建时间,则可以在应用程序逻辑或数据库过程中实现上述内容 - 每次从数据库中提取数据时都会发生这种情况。

所以

  1. 用户创建时间戳为 ts 的记录 A(id = 1, adminId = 1)
  2. 如果管理员尝试访问记录,如果当前日期/时间与 ts 之间的差异小于 1 分钟,db/app 将允许访问;如果超过 1 分钟,记录将重新分配给另一个管理员
  3. 如果另一个管理员尝试访问记录,并且超过 1 分钟后,记录将分配给他们(再等一分钟?)

以上所有工作无需另一个进程协调(以上所有拉取数据)并且数据库可用于锁定(通过可以在记录上标记的某些状态和状态时间)。

仅当您要推送记录或自动完成上述维护(对于某些报告)时。仍然可以通过在获取其他数据之前检查记录是否已重新分配来完成。

拥有另一个进程并使其与数据库一样稳定并非易事,但您可以创建jobs它将在数据库环境中定期运行(或者如果更适用于您的场景,您可以转到 SMO 路径)。

但是,我相信您没有描述记录可以具有的所有状态(如果 adminId|3 不“处理”记录会发生什么)。

编辑评论后让我解释一下。假设您需要每 5 分钟(或每 1 分钟)完成一些工作,那么无论您实际上每分钟都在做一次,还是在用户请求可能受其影响的数据之前第一次做这件事,都没有关系.

两种做法有区别,主要有以下几点如果它是延迟完成的——除非用户请求数据,否则不会更新

延迟更新与及时更新

  • 如果此表的事件较少,您可以保存不必要的定期更新(但必须确保没有客户端获取过时数据!-例如,在数据库上运行报告将要求您确保数据已更新)
  • 如果此表上的事件繁重,则会产生一些开销(如果一分钟内有 100 个请求,则检查数据是否最新将需要额外的资源)
  • 您避免了需要管理的额外工作,也避免了对这些工作的依赖(不太复杂)

关于sql-server - 定期事件实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com