gpt4 book ai didi

mysql - MySQL 遗留数据库的终极噩梦

转载 作者:IT王子 更新时间:2023-10-28 23:50:45 26 4
gpt4 key购买 nike

表格1:
一切,包括厨房水槽。日期格式错误(最后一年,因此您无法对该列进行排序),存储为 VARCHAR 的数字,“街道”列中的完整地址,名字列中的名字和姓氏,姓氏列中的城市,不完整的地址,行根据一些多年来发生变化的规则,重复记录,不完整记录,垃圾记录...通过将数据从一个字段移动到另一个字段来更新前面的行,您可以说出它...哦,当然不是时间戳或主要KEY 列就在眼前。

表2:
打开这个婴儿后,任何正常化的希望都破灭了。
我们为每个条目和表一中的行更新一行。所以重复像没有明天(值(value) 800MB)和像 Phone1 Phone2 Phone3 Phone4 ... Phone15 这样的列(它们不被称为电话。我用这个来说明) 外键是 .. 猜猜看。根据表 1 中行中的数据类型,有 3 个候选对象

表3:
会不会更糟。哦是的。
“外键是破折号、点、数字和字母的 VARCHAR 列组合!如果这不提供匹配(通常不提供),则应该使用第二列类似产品代码。名称带有与其中的数据没有相关性,并且是强制性的 Phone1 Phone2 Phone3 Phone3 Phone4... Phone15。有列 Duplicated from Table1 而不是 TIMESTAMP 或 PRIMARY KEY 列。

表 4:被描述为正在进行中的工作,随时可能发生变化。它本质上与其他类似。

在接近 1m 行时,这是一个大困惑。幸运的是,这不是我的大麻烦。不幸的是,我必须从中提取每个“客户”的复合记录。

最初,我设计了 Table1 的四步翻译,添加一个 PRIMARY KEY 并将所有日期转换为可排序的格式。然后再执行几个查询步骤,返回过滤后的数据,直到我将 Table1 放到可以使用它从其他表中提取以形成组合的位置。经过数周的工作,我使用一些技巧将其简化为一步。所以现在我可以将我的应用指向困惑并拉出一个漂亮的干净的合成数据表。幸运的是,我只需要一个电话号码就可以满足我的目的,因此标准化我的表格不是问题。

然而,这是真正的任务开始的地方,因为每天都有数百名员工以您不想想象的方式添加/更新/删除这个数据库,而且每晚我都必须检索新行。

由于任何表中的现有行都可以更改,并且由于没有 TIMESTAMP ON UPDATE 列,我将不得不求助于日志来了解发生了什么。当然,这假设有一个二进制日志,但没有!

引入这个概念就像铅气球一样下降。我还不如告诉他们,他们的 child 将不得不接受实验性手术。他们不是完全高科技......以防你没有聚集......

情况有点微妙,因为他们有一些我的公司非常想要的有值(value)的信息。我被一家大公司的高级管理人员(你知道他们是怎么做的)派下来“让它发生”。

除了使用另一个应用程序解析 bin 日志文件以找出他们在白天对该数据库执行的操作,然后相应地组合我的表之外,我想不出任何其他方法来处理夜间更新。我真的只需要查看他们的 table1 就可以弄清楚如何处理我的表。其他表仅提供用于清除记录的字段。 (使用 MASTER SLAVE 无济于事,因为我会有一个困惑的副本。)

另一种方法是为其 table1 的每一行创建一个唯一的哈希并构建一个哈希表。然后我会每晚检查整个数据库以查看哈希值是否匹配。如果他们没有,那么我会读取该记录并检查它是否存在于我的数据库中,如果存在,那么我会在我的数据库中更新它,如果它不存在,那么它是一个新记录,我会插入它。这很丑陋而且速度不快,但是解析二进制日志文件也不是很好。

我写这篇文章是为了帮助弄清楚这个问题。经常告诉其他人有助于澄清问题,从而使解决方案更加明显。在这种情况下,我只是有更大的头痛!

您的想法将不胜感激。

最佳答案

日志文件(二进制日志)也是我的第一个想法。如果你知道他们是如何做事的,你会不寒而栗。对于每一行,在添加和更改部分时,日志中有许多条目。它只是巨大的!
现在我决定采用 Hash 方法。通过一些巧妙的文件内存分页,这非常快。

关于mysql - MySQL 遗留数据库的终极噩梦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/101333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com