gpt4 book ai didi

mysql - 如何在实时数据库上运行大更新?

转载 作者:可可西里 更新时间:2023-11-01 07:42:48 24 4
gpt4 key购买 nike

我正在编写的一个 Web 项目使用复杂的 CSV 到 MySQL 转换器来创建他们的数据库。这意味着要用 CSV 的最新更改更新数据库内容,运行一个转换器截断相关表(但留下通过网站填充的其他表)并再次用 CSV 中的数据填充它们。

是的,这不是一个很好的过程,但有充分的理由选择这种方法而不是标准的“在实际数据库上工作”方法。

我正在努力解决的问题是找出运行此更新过程的最佳方式,同时又不会对用户体验造成太大影响。请记住一些数字:

1) 这个过程必须定期运行,在每隔几周/每月一次的范围内
2) 数据库转换器目前需要大约一个小时,将来可能需要长达 15 小时,至少如果关于数据库增长的预测是正确的(是的,哎哟!)
3) 完整数据库的 sql 转储目前不到 20MB(这允许通过 phpmyadmin 轻松导入)但很快就会打破这个障碍。我想这应该不是问题,因为我可以改用 SSH 上传。

以下是我想到的一些备选方案,它们都使用具有全局设置的单独数据库(网站上的每次读/写都会检查这些设置)。备选方案 2 似乎是最糟糕的,因为它会在整个转换期间阻止读取访问,正如我所说,这可能会很长。它们都在大约相同的时间内阻止写访问,这很好,但它不会阻止用户注册或类似的重要事情。我很好奇第三种替代方案的可行性,因为它理论上允许缩短读取功能的停机时间,因为我不必上传大转储。

有没有人做过这样的事情?如果有更好的选择,或者关于如何改进这些选择以及是否选择 1 或 3 的任何反馈,我将不胜感激。提前致谢:)

Alternative 1<br/>
1) Set globalsettings_booleans_writeable to 0<br/>
2) Download current DB (SQL dump)<br/>
3) Import downloaded DB locally<br/>
4) Run converter (in update mode) on local database<br/>
5) Export local DB<br/>
6) Set globalsettings_booleans_readable to 0<br/>
7) Import exported DB online<br/>
8) Set globalsettings_booleans_readable to 1<br/>
9) Set globalsettings_booleans_writeable to 1

Alternative 2<br/>
1) Set globalsettings_booleans_writeable to 0<br/>
2) Set globalsettings_booleans_readable to 0<br/>
3) Run converter (in update mode) on live database<br/>
4) Set globalsettings_booleans_readable to 1<br/>
5) Set globalsettings_booleans_writeable to 1

Alternative 3<br/>
1) Set globalsettings_booleans_writeable to 0<br/>
2) Create a remote copy of the database<br/>
3) Run converter (in update mode) on remote copy<br/>
4) Set globalsettings_booleans_readable to 0<br/>
5) Replace remote original with remote copy (easy?)<br/>
6) Set globalsettings_booleans_readable to 1<br/>
7) Set globalsettings_booleans_writeable to 1

最佳答案

在我看来,通过检查 CSV 以查看哪些记录实际上会导致数据库发生更改,可以避免很多排他性。 CSV 生成器似乎是数据的实际来源,而数据库只是它的一个镜像,对吧?

如果是这样,则可以忽略不会导致更改的 CSV 记录,不会截断 d/b 表,并且可以使用备选方案 2 运行剩余的 CSV 记录,这大概只需要几分钟。

这种方法的主要弱点是,如果记录在源头被删除,并且没有迹象表明 d/b 需要在本地删除它们。

关于mysql - 如何在实时数据库上运行大更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4385724/

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