查询时更新SQL表的最佳方法

时间:2018-01-15 19:54:56

标签: mysql

所以我有一个MySQL表,需要每天更新,结构如下:

siteid    user  proportion
1000      1     0.1
1000      2     0.5
1000      3     0.4

问题是代码的其他部分需要在更新时访问此表,而更新可能每天需要几分钟。这就是每天发生的事情:

  • 任务在美国东部时间每天早上8点左右运行,根据昨天的数据更新上表。此更新可能需要半个小时。
  • 用户应该可以随时访问此表以获取最新的更新

我已经提出了以下想法,但很确定他们都不会为我工作:

  • 创建临时表以在更新主表时访问它:这听起来不是一个好主意,因为有五个表并且不可能在临时表和主表之间切换。
  • 在更新表时暂停所有操作,这是不可能的,因为访问表的其他代码必须始终启动并运行。

对于任何可能的解决方案,我将非常感激。我知道这是广泛的,可能没有任何正确或错误的答案,主要是对你在类似情况下的经历感兴趣。

注意:

  1. 这些表中存储着数百万行。
  2. 我在这里使用MySQL并且之前提到过无法锁定交易,因为一切都必须在线。
  3. 后端代码是用python编写的

1 个答案:

答案 0 :(得分:0)

你可以这样做吗?

  1. 有两个具有相同结构的表,名称以_A和_B结尾。
  2. 有一个可以即时切换到指向_A或_B的视图(在Oracle中我们会使用同义词)。
  3. 在您的更新程序中: 1.将数据从_A复制到_B。 2.将视图指向_A(更新视图)。 3.对_B进行更新 4.将视图指向_B(更新视图)。

    下次运行时,您将重复此过程,但_A引用变为_B,反之亦然。您可能想要跟踪"当前"表是(_A OR _B)。