在java中有效跟踪数据库时间的方法

Posted

技术标签:

【中文标题】在java中有效跟踪数据库时间的方法【英文标题】:Way to efficiently keep track of the database time in java 【发布时间】:2013-12-05 18:23:06 【问题描述】:

在开始之前,我想说这与一个 Bukkit 插件有关。

我已经尝试在整个网络上搜索这个,但我无法找到一个好的方法。

我正在尝试构建一个可以连接到数据库(通常是 mysql)的插件,并在本地跟踪数据库的时间,即使它出现故障。该插件是一个禁止管理系统,适用于多个服务器。情况是这样的:数据库服务器的时区和服务器上的时间不同,每个服务器都有自己的时区。只有 1 个数据库,因此,最好的方法是使用数据库的时间来跟踪时间。但是,如果数据库出现故障,将运行一个线程,直到数据库恢复并成功插入记录。如果我要在创建禁令时存储的列上使用 UNIX_TIMESTAMP(),如果数据库出现故障,它只会在数据库恢复后开始计数。因此,分解它,我想要的是一种跟踪数据库时间的方法,即使数据库出现故障并重新启动。

提前致谢。

【问题讨论】:

您是说您已经知道如何从数据库中获取时间,而您真正的问题是如何获得对数据库时间的最佳猜测,即使它已关闭? 是的,这就是我尝试这样做的原因。抱歉回复晚了。 在查找日期的类中,每次得到日期,还可以算出你的系统时间(也就是JVM上报的当前时间),计算它是多少秒不同的。 (当表示为相同的时区时,确实应该不会有太大差异。)然后,如果您的数据库处于脱机状态,您可以从 JVM 返回时间,并根据保存的差异进行调整。将数据库简单地用作时间服务器似乎有点奇怪。而且,如果您使用它的用途不止于此,那么在读取/写入数据时您可能会遇到更大的问题。 因为所有的服务器都有不同的时区,我想使用数据库时间,因为那个不会改变,除非数据库的主机服务器发生变化。数据库确实也被用于存储禁令,并且使用数据库中的时间存储禁令的日期对我来说似乎是合乎逻辑的事情,但是是的,这有点奇怪。无论如何,我已经做到了:当插件第一次连接到数据库时,它会安排一个任务每秒执行一次,其中有一个变量存储数据库时间,并在每次任务执行时增加它。还是谢谢! 【参考方案1】:

插入程序计算的时间(事件真正发生时,而不是数据库“最终”插入数据时)in UTC。无论服务器如何,它都应该或多或少相同。基于时钟差异可能会略有不同,但您可以通过ntp 将其最小化,以保持服务器时间同步。

【讨论】:

以上是关于在java中有效跟踪数据库时间的方法的主要内容,如果未能解决你的问题,请参考以下文章

有效跟踪最新搜索

跟踪每个用户未读消息的最有效方法

当用户直接关闭浏览器时如何跟踪注销活动

根据值有效地跟踪字典的前 k 个键

日志文件跟踪工具

在 Java Spark 中迭代大型数据集的最快且有效的方法