在我们的应用程序中,我们使用 Hibernate 和 PostgreSQL 来存储数据。在我们的一个数据库表中,我们有一个鉴别器列,例如“TIPPSPIEL”。它是一个固定的字符串,不能被任何用户操作。
突然间,我们在这个巨大的表格中有一个条目,其中我们有“TIPPQPIEL”而不是“TIPPSPIEL”。我们不知道这怎么会发生。
有没有可能我们的硬盘换了一位,所以我们的字母“S”不再编码为“1010001”,而是突然变成了硬盘上的“Q”,换了一位:1010011?
我不是硬盘物理学专家,但我猜操作系统或磁盘具有校验和和其他东西,以确保不会发生这种情况。
是否有可能只有一位切换所以我的文件显示一个字母“Q”而不是“S”?
更新:我们做了进一步的分析。我们的从数据库从主数据库(PostgreSQL 特性)获取它的 WAL 记录。不管怎样:我们的从服务器应该是同步的。但是从站对于这一特定行并不同步。我们可以看到它发生在几天前,没有用户对此特定条目进行任何交互。所以它必须有点翻转。害怕!
我们很少在这个网站上看到一个真正有趣的问题,所以首先谢谢你。
我认为您所看到的确实存在一位错误,说实话您可以发现它真是太神奇了,但是您假设第二个最低有效位已被切换是正确的(假设您使用的是 ASCII反正)。
至于校验和等,当它被写入磁盘时,它很可能已经被验证为正常 - 我很确定这个问题是通过一个简单的漏磁错误后来发展起来的。但是你是对的,已经完成了编码检查,它因制造商而异,但在某处可能有一个错误说“这看起来有点奇怪”——但是你的 IO 链有什么选项可用?拒绝你整个街区?我将假设这是一个非 RAID 磁盘,因为 RAID 磁盘在检测到错误时往往有更多可用选项。
这很奇怪,尽管这种事情可能每秒在世界范围内发生多次。