【问题标题】:MySQL and Scheduled Updates by User Preference?MySQL 和用户偏好的计划更新?
【发布时间】:2011-10-18 05:31:39
【问题描述】:

我正在开发一个应用程序

  • 将电子邮件地址(给用户)存储在表格中。
  • 存储用户希望在表格中停留的天数。
  • 当天数到了时,让用户离开桌子。

我真的不知道如何解决这个问题,所以这里是我的问题:

  1. 每秒,我是否让应用程序检查每个表条目的当前存储时间,比如 time_left 列?
  2. 如果我期望有大量(10,000 多个)用户,那么 (1) 会不会效率低下?
  3. 如果不是 (2),那么执行此类任务的最佳算法是什么?
  4. 我在这里尝试做的事情的名称是什么?我想在编写脚本之前和编写脚本时对其进行更多研究,因此我需要一个好的搜索查询来开始。

我计划用 Perl 编写这个脚本,尽管我愿意接受有关语言选择、​​框架等方面的建议...我实际上是 Web 开发的新手(后端和前端都是如此) ),所以如果您能准确地建议我,我将不胜感激。

谢谢!

*发布后,Topener 提出了一个有效的问题:

如果用户不被请求,你为什么要存储他们?

假设用户只是坐在数据库中。

假设我从用户被添加到数据库时每 5 分钟使用一次用户的电子邮件地址(因此,如果用户的条目出生于 10 月 18 日下午 2:00,则用户将在2:05、2:10 等...)。

如果用户决定他们希望在 10 天内退出数据库,这意味着他们的条目将被正常访问(从下午 2:00 到 10 月 18 日每 5 分钟一次)直到下午 2:00 到 10 月 28 日。

所以要澄清一下,基于这种情况:

系统必须不断将当前时间与用户的到期日期进行比较,不是吗?

【问题讨论】:

    标签: mysql sql algorithm perl scheduling


    【解决方案1】:

    您不应该存储 time_left 变量,而是应该存储 vaildTo。这样,每当从数据库请求用户时,您都可以检查它是否有效。

    如果没有,那就随心所欲。

    这种方法不会让您进行任何 cronjobs,否则会花费您额外的负载。

    【讨论】:

    • 鉴于我描述的场景,为什么会请求用户?这仍然没有告诉我何时或如何检查用户何时应该从数据库中删除。
    • 如果用户没有被请求,你为什么要存储他们?此外,我希望你能比较两个日期?
    • 回答,是的。但这仍然比每秒/分钟运行一次更有意义
    • 但我必须每隔一秒/一分钟/(或任何其他时间间隔)检查哪些用户是周期中的下一个到期用户——在这种情况下,我的意思是“周期”筛选整个数据库以比较有问题的两个值。
    【解决方案2】:

    嘿 Mr_spock 我喜欢 Topener 的上述回答。与其存储用户希望有效的天数,不如存储用户希望被删除的日期。

    添加一个像validToDate这样的字段,它是一个DATETIME字段类型,你可以做一个类似的查询

    从表名中删除 validToDate

    在哪里

    • 斜体文本是一个 SQL 查询
    • tablename 是相关表的名称
    • NOW() 是返回当前 DATETIME 的有效 sql 函数
    • validToDate 是 DATETIME 类型的字段

    这已经达到了 SQL 服务器所承诺的效率,我认为它相当不错。

    【讨论】:

      【解决方案3】:

      您可以编写一个单独的程序/脚本,在设定的时间间隔内进行删除查询。如果您在 Linux 机器上,您可以创建一个 cron 作业来执行此操作。对于速度较慢的机器和较大的表来说,每秒执行一次可能会占用大量资源,但我认为这不会成为简单删除查询的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-27
        • 1970-01-01
        相关资源
        最近更新 更多