【问题标题】:How do I schedule regular database clean up tasks in Classic ASP?如何在 Classic ASP 中安排定期数据库清理任务?
【发布时间】:2009-11-10 13:00:32
【问题描述】:

我有一个经典的 ASP 站点,它需要按计划从会话数据中清空一些数据库表。此系统无权访问计划任务(它位于共享网络主机上,并使用 MySQL 服务器)

我正在考虑使用global.asa 来触发这样的事件:

  1. Application_OnStart - 从数据库中删除所有会话数据
  2. Application_OnEnd - 删除所有会话数据
  3. Session_OnStart - 创建用户会话
  4. Session_OnEnd - 删除与此会话相关的所有会话数据。

我有什么理由不应该在global.asa 中创建数据库连接?这些将在此处创建和销毁,不会在会话或应用程序范围内共享。我将其视为每个用户(在会话开始和结束时)运行这些管理任务两次并且不会因为它们再次被触发而等同于非常少的数据库流量的一种方式。

任何人对为什么这可能不好有任何想法吗?有什么理由不连接到global.asa 中的数据库?

如果有人认为上述想法很糟糕 - 对于我如何在没有以下一项或多项的情况下定期清空这些表格,您是否还有其他想法:

  1. 计划任务
  2. 数据库定时任务
  3. 在每个页面的页面加载时运行代码(因此有 Session_OnStart 挂钩)

塔'

高级椰子

【问题讨论】:

    标签: asp-classic database-connection global.asa


    【解决方案1】:

    您可以编写一个清空会话表的网页,并通过计划任务从外部框调用该页面。

    【讨论】:

    • 这是我们已经设置好的 - 但是我不喜欢依赖另一个盒子来清理会话数据,并希望使它成为一个“自包含”的解决方案。
    【解决方案2】:

    这取决于您的清理任务需要多长时间。由于 Application_Start 运行时不会处理任何请求,因此它可能会阻塞一段时间。

    此外,您无法保证在所有情况下都会调用 Application_End(或 Session_End)(当服务器关闭时,它可能不会被触发,或者某些灾难性故障可能会完全绕过这些事件)。

    按照您的建议,最好的方法是运行一个计划任务来负责清理过时的会话数据。

    【讨论】:

    • 嗨Yann,好点re:Application_Start 减慢速度-我没有考虑过-尽管不确定潜在的延迟是什么-希望很短。我希望 session_end 会删除大部分会话数据,将 Application_Start 中的任何延迟限制在最低限度(即,除非服务器崩溃,否则这些查询应该很少)
    【解决方案3】:

    我会清理Session_OnEnd 中的单个会话和Application_OnStart 中的所有会话。如果你的 all-sessions-cleanup 很慢,你可以做一件丑陋的事情并将清理放在一个单独的 asp 文件中,你可以使用 XMLHTTP 类发出 http-request,记住不要等待请求完成在Application_OnStart 中的所有代码运行之前不会开始提供服务。

    【讨论】:

      【解决方案4】:

      如果您有稳定的流量,您可以在请求周期结束时搭载小任务。只需发出一个 response.flush 然后执行数据库查询。当然,您需要编写自己的调度程序。另一种选择是创建一个单独的 asp 文件(tasklet),您在请求开始时使用服务器端、异步、xmlhttpreq 对其进行 ping。这使清理代码远离客户端请求周期并减少延迟。

      实际上,如果还没有一些聪明的基于 appengine 的 webappr/api 可以按时 ping 你的旧 tasklet/webhook,我不会感到惊讶。如果没有,你可以自己写一个,选择无穷无尽:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-03
        • 2018-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多