mysql - 最佳实践:截断并重新创建关联表条目或每天更新它们?
问题描述
我们正在将定制的中间件/API 从 Python 2 重构到 3。该软件负责在许多不同平台(如 ebay、amazon、 shopware) 通过从我们的 ERP 软件导出的数据。该软件在虚拟化的 Ubuntu 服务器上运行,并拥有自己的 MariaDB 数据库,每天运行。我们正在接触负责处理 ERP 软件数据导出的脚本,现在正在讨论如何处理我们的某些关联表的“最佳”方法。
一个例子:有两个表用于处理产品到图像的关系,“global_images”(~140k 行)和“article_image_mapping”(~250k 行)。'global_images' 包含图像文件名和排序顺序,并通过其在 'article_image_mapping' 中的 ID 以及相应的产品 ID 进行引用。例如,每当产品获得新图像时,我们必须确保所有条目都是最新的。需要删除旧的“article_image_mapping”行,需要引用新的行,我们还必须更新与产品 ID 相关的所有条目的排序顺序。
这个过程当然没什么大不了的,类似于在 MySQL 中更新关联表,但我们在想:是什么让我们不能简单地截断两个表并每天重新创建它们?这将使我们的代码更简洁、更简单,只要产品 ID 保持不变,其他引用就可以随意更改。此外,我们不会用数十万个 ON DUPLICATE KEY UPDATE 查询来膨胀 AI 索引,即使这可能可以忽略不计。
不知何故,这感觉不那么优雅。我们还必须确保我们的异常处理达到标准,因为如果没有图像产品映射,其他脚本将无法运行。
解决方案
如果您的重点是正确的数据,那么每天重建整个表是一个非常合理的解决方案。我不确定您的确切过程是什么,但如果它很容易符合您重建和资源的时间限制,那么您就知道数据就是您想要的。
主要优点是数据简单。使用一种方法,update
您必须处理insert
//逻辑。在处理边缘情况时,可能不清楚您需要做什么。update
delete
主要缺点是您最终可能会重写历史记录。如果对影响历史的源数据进行了更改,那么事情可能会变得混乱。这可能是报告的问题。
我经常设计每天都在重建的系统。. . 但有一个警告。它们位于云服务器上,存储基本上是免费的,我们可以存档旧副本以查看过去“真正发生了什么”。
推荐阅读
- sql - SQL Server 数据透视协助
- reactjs - 异步反应钩子
- reactjs - 无法设置 nivo 饼图配色方案
- reactjs - React-plotly:使用 WebGL(scattergl)不可见绘图线
- spring-boot - SpringBoot 安全 - 未经授权的 URL
- html - 如何制作多个
- 标记内联
- c# - 如何将自定义控件的输出发送到文本框
- spring-boot - 即使将 fallbackExecution 设置为 true,TransactionalEventListener 也不会触发
- python - 无法单击按钮以查看更多结果,导致异常元素不可单击
- android - Android 软键盘“下一步”如何工作?