Mysql 每T秒将列值增加X

Mysql 每T秒将列值增加X,mysql,node.js,Mysql,Node.js,我希望每设置一段时间增加(或通常篡改)一个数据库列值(例如,time_passed) 我如何解决这个问题?我应该接近这个服务器端还是数据库端 我的应用程序使用的是Express、Socket.IO,我使用的是MySQL数据库 假设我在午夜(00:00:00)存储时间戳,我感兴趣的是每10秒将列值(比如100)增加1。所以,实际上我不需要做任何其他事情。60秒后,我知道新值只是: 100 + (1 x ((60-0)/10)) = 106 假设我在午夜(00:00:00)存储一个时间戳,我感兴趣

我希望每设置一段时间增加(或通常篡改)一个数据库列值(例如,time_passed)

我如何解决这个问题?我应该接近这个服务器端还是数据库端


我的应用程序使用的是Express、Socket.IO,我使用的是MySQL数据库

假设我在午夜(00:00:00)存储时间戳,我感兴趣的是每10秒将列值(比如100)增加1。所以,实际上我不需要做任何其他事情。60秒后,我知道新值只是:

100 + (1 x ((60-0)/10)) = 106

假设我在午夜(00:00:00)存储一个时间戳,我感兴趣的是每10秒将列值(比如100)增加1。所以,实际上我不需要做任何其他事情。60秒后,我知道新值只是:

100 + (1 x ((60-0)/10)) = 106

我建议为此使用Cron作业

软件实用程序Cron是类Unix中基于时间的作业调度器 计算机操作系统。安装和维护软件的人员 环境使用cron将作业(命令或shell脚本)调度到 以固定的时间、日期或间隔定期运行。它通常 通过its自动化系统维护或管理 通用性使它很有用

您可以设置一个Cron作业来定期自动运行脚本,您可以使用该脚本进行数据库维护

Cron由crontab(Cron表)文件驱动,该文件是一个配置文件,用于指定按照给定计划定期运行的shell命令。用户可以有自己的crontab文件,并且通常有一个系统范围的crontab文件(通常在/etc或/etc的子目录中),只有系统管理员可以编辑

crontab文件的每一行表示一个作业,如下所示:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                       7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * *  command to execute
以下示例将在每个星期六晚上11:45在
/home/oracle/scripts/export\u dump.sh
运行脚本

45 23 * * 6 /home/oracle/scripts/export_dump.sh

我建议为此使用Cron作业

软件实用程序Cron是类Unix中基于时间的作业调度器 计算机操作系统。安装和维护软件的人员 环境使用cron将作业(命令或shell脚本)调度到 以固定的时间、日期或间隔定期运行。它通常 通过its自动化系统维护或管理 通用性使它很有用

您可以设置一个Cron作业来定期自动运行脚本,您可以使用该脚本进行数据库维护

Cron由crontab(Cron表)文件驱动,该文件是一个配置文件,用于指定按照给定计划定期运行的shell命令。用户可以有自己的crontab文件,并且通常有一个系统范围的crontab文件(通常在/etc或/etc的子目录中),只有系统管理员可以编辑

crontab文件的每一行表示一个作业,如下所示:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                       7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * *  command to execute
以下示例将在每个星期六晚上11:45在
/home/oracle/scripts/export\u dump.sh
运行脚本

45 23 * * 6 /home/oracle/scripts/export_dump.sh


到目前为止你尝试了什么?您可以使用
setInterval
,但如果没有任何代码,就很难告诉您一些事情。如果您存储了时间戳,那么您总是知道自时间戳以来经过了多少次“设置次数”。那么你为什么需要这样做呢?Cron jobs是一个选项吗?@valamore好吧,你只是每x次运行一个脚本,所以我会像你那样做,如果你只是将脚本添加到一个由用户tbh加载的页面中。更新查询可能是一种方式。正如其他人所指出的,这是一种奇怪的方式。将
time\u passed
字段改为
time\u start
字段。存储一个Unix时间戳,您总是可以从当前时间戳中减去该值来获得经过的时间?您可以使用
setInterval
,但如果没有任何代码,就很难告诉您一些事情。如果您存储了时间戳,那么您总是知道自时间戳以来经过了多少次“设置次数”。那么你为什么需要这样做呢?Cron jobs是一个选项吗?@valamore好吧,你只是每x次运行一个脚本,所以我会像你那样做,如果你只是将脚本添加到一个由用户tbh加载的页面中。更新查询可能是一种方式。正如其他人所指出的,这是一种奇怪的方式。将
time\u passed
字段改为
time\u start
字段。存储一个Unix时间戳,您总是可以从当前时间戳中减去该值以获得经过的时间。我不需要计算实际值,只需要使用正确的编程方法在node.js中每隔(比如)10秒将列值增加(比如)5。也许我的问题不够清楚,我应该编辑它吗?@Valamore你可以通过这种方式实现这个目标。如果你想让它每10秒增加5,使用模数(
diff%10
)然后乘以5。这将确保答案始终正确,即使您的服务器出现故障或其他情况。@ceejayoz您的建议非常有趣!你有没有可能在一个答案中用一个片段的例子写下这句话?@valamore IMO,我的评论只是对这个答案的一个小小的修改,值得称赞。模数的加法只会使其颗粒化,这样就不会有分数的增加。当需要该值时,可以运行该计算。如果要向用户显示它,只需作为该过程的一部分运行它。我不需要计算实际值,只需要在node.js中以编程方式将列值每(比如)10秒增加(比如)5。也许我的问题不够清楚,我应该编辑它吗?@Valamore你可以通过这种方式实现这个目标。如果你想让它每10秒增加5,使用模数(
diff%10
)然后乘以5。这将确保答案始终正确,即使您的服务器出现故障或其他情况。@ceejayoz您是什么