java - 服务器之间同步时间

标签 java sql database jakarta-ee

我有一个网络服务器,它处理来自多个源/机器的事件。 对于每个事件,我都会给出一个时间戳,并将其存储在数据库中。这样,即使不是源计算机中的所有时钟都有准确的时间 - 也没关系。事件的顺序将被保留,因为服务器对时间戳负责。

现在,我想再添加一台可以处理这些事件的服务器,并将它们存储在同一个数据库中。 在服务器之间同步时钟的最佳方法是什么?服务器部署在客户站点上,尽管我可以指示他时钟必须同步,但我想确保这一点。

有什么办法可以解决服务器之间不通信的问题吗? 有没有办法在SQL语句中使用DB机器时钟? (我应该支持mysql、sqlserver和oracle。我的O/R映射是hibernate)。

最佳答案

  1. 同步应用程序服务器时间(NTP 等)并不能“确保”它们之间的事件完美排序。两个服务器有不同的时间线,它们无法独立决定两个服务器发生事件的“顺序”。这是众所周知的:http://en.wikipedia.org/wiki/Lamport_timestamps

  2. 你说“相同”DB => 这是决定事件“顺序”的好地方。但“事件”将是“INSERT 请求到达数据库”。您可以接受吗?

  3. 如果 #1 可以接受,并且出现的“顺序”很重要,那么最好使用自动增量字段:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

您仍然可以保留时间戳,只是不要用它来决定“顺序”。

关于java - 服务器之间同步时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411795/

相关文章:

java - 使用 Maven 的可执行 jar 中资源文件的相对路径问题

java - 多人 Java 游戏 - 通过 GUI 启动服务器时程序卡住

sql - 是否可以将 ''(空字符串)作为非 NULL 值存储在数据库中?

mysql - 根据两列按相邻行进行分组

java - 在 Mac 上通过 Java 使用数据库

php - Magento 以编程方式更改库存可用性

PHP 脚本不从列中获取数据

java - 调用禁用的 JButton 的 actionlistener

java - 找到最近的邻居/经纬度

java - 使用内容值的更新方法