我正在编码的Web项目使用复杂的CSV到MySQL转换器来创建他们的数据库。这意味着要使用CSV中的最新更改来更新数据库内容,运行转换器会截断相关表(但会保留通过网站填充的其他表),并使用CSV中的数据再次填充它们。 / p>
是的,这不是一个很好的过程,但有充分理由说明为什么选择这种方法而不是标准的“实际数据库”方法。
我正在努力解决的问题是找出运行此更新过程的最佳方法,而不会过多地损害用户体验。要记住几个数字:
1)此过程必须定期运行,每隔几周/每月一次
2)db转换器目前需要大约一个小时,将来可能需要长达15个小时,至少如果有关数据库增长的预测是正确的(是的,哎哟!)
3)完整数据库的sql转储目前低于20MB(允许通过phpmyadmin轻松导入),但很快就会打破这个障碍。我想这应该不是问题,因为我可以使用SSH上传。
以下是我想到的一些替代方案,它们都使用具有全局设置的单独数据库(在网站上的每次读/写都会检查这些设置)。备选方案2似乎是最糟糕的,因为它阻止了转换整个时间的读取访问,这可能很长,正如我所说。所有这些都阻止写入访问大约相同的长时间,这很好,但它不会阻止用户注册或任何类似的关键。我对第三种替代方案的可行性非常好奇,因为它通常允许缩短读取功能的停机时间,因为我不需要上传大转储。
有人做过这样的事吗?如果他们在那里或者有关如何改进这些以及是否选择1或3的任何反馈,我会感谢更好的选择。提前感谢:)
Alternative 1
1) Set globalsettings_booleans_writeable to 0
2) Download current DB (SQL dump)
3) Import downloaded DB locally
4) Run converter (in update mode) on local database
5) Export local DB
6) Set globalsettings_booleans_readable to 0
7) Import exported DB online
8) Set globalsettings_booleans_readable to 1
9) Set globalsettings_booleans_writeable to 1
Alternative 2
1) Set globalsettings_booleans_writeable to 0
2) Set globalsettings_booleans_readable to 0
3) Run converter (in update mode) on live database
4) Set globalsettings_booleans_readable to 1
5) Set globalsettings_booleans_writeable to 1
Alternative 3
1) Set globalsettings_booleans_writeable to 0
2) Create a remote copy of the database
3) Run converter (in update mode) on remote copy
4) Set globalsettings_booleans_readable to 0
5) Replace remote original with remote copy (easy?)
6) Set globalsettings_booleans_readable to 1
7) Set globalsettings_booleans_writeable to 1
答案 0 :(得分:1)
在我看来,通过检查CSV以查看哪些记录实际上会导致数据库更改,可以避免许多排他性。似乎CSV生成器是数据的实际来源,而数据库只是它的一面镜子,对吗?
如果是这样,可以忽略导致无变化的CSV记录,不截断d / b表,并且可以使用备选2运行剩余的CSV记录,这可能只需要几分钟。
这种方法的主要缺点是如果在源头删除记录,并且没有迹象表明d / b需要在本地删除它们。