更新实时数据库表有哪些好的策略?

时间:2011-06-24 22:57:29

标签: database dev-to-production

我有一个db表,它会定期完全重新填充新数据。然后,需要将此数据推送到相应的实时数据库表中,覆盖以前的实时数据。

随着表格大小的增加,将数据推送到实时表格所需的时间也会增加,而应用程序看起来就像是缺少数据。

一种解决方案是将新数据推送到live_temp表,然后在此表上运行SQL RENAME命令将其重命名为实时表。重命名通常在亚秒内运行。这是解决这个问题的“正确”方法吗?

是否有其他策略或工具可以解决这个问题?感谢。

3 个答案:

答案 0 :(得分:1)

我不喜欢以这种方式搞乱架构对象 - 它可能会混淆查询优化器,我不知道在执行重命名时会发生什么事情会发生什么。

我更喜欢在表中添加一个版本列,并且有一个单独的表来保存当前版本。

这样,客户端代码变为

select * 
from myTable t, 
     myTable_currentVersion tcv
where t.versionID = tcv.CurrentVersion

这也保留了历史 - 这可能有用也可能没用;如果在设置CurrentVersion列后没有删除旧记录。

答案 1 :(得分:1)

创建一个重复的表 - 精确副本。

创建一个新表,除了跟踪“最新”表之外什么也不做。 MostCurrent(表) id(列) - 保存包含“最新”数据的表的名称。

重新填充时,填充旧表并更新MostCurrent.id以反映此表。

现在,在将数据绑定到页面的应用程序中,绑定最新的表。

答案 2 :(得分:0)

仅将更改推送到实时数据库表是否合适?对于我工作过的大多数应用程序而言,变化很小。您应该能够在单个事务中应用所有更改。提交交易将使它们在桌面上没有中断时可见。

如果数据确实完全改变,那么您可以配置数据库,以便可以替换单个事务中的所有数据。