我有一个db表,它会定期完全重新填充新数据。然后,需要将此数据推送到相应的实时数据库表中,覆盖以前的实时数据。
随着表格大小的增加,将数据推送到实时表格所需的时间也会增加,而应用程序看起来就像是缺少数据。
一种解决方案是将新数据推送到live_temp表,然后在此表上运行SQL RENAME命令将其重命名为实时表。重命名通常在亚秒内运行。这是解决这个问题的“正确”方法吗?
是否有其他策略或工具可以解决这个问题?感谢。
答案 0 :(得分:1)
我不喜欢以这种方式搞乱架构对象 - 它可能会混淆查询优化器,我不知道在执行重命名时会发生什么事情会发生什么。
我更喜欢在表中添加一个版本列,并且有一个单独的表来保存当前版本。
这样,客户端代码变为
select *
from myTable t,
myTable_currentVersion tcv
where t.versionID = tcv.CurrentVersion
这也保留了历史 - 这可能有用也可能没用;如果在设置CurrentVersion列后没有删除旧记录。
答案 1 :(得分:1)
创建一个重复的表 - 精确副本。
创建一个新表,除了跟踪“最新”表之外什么也不做。 MostCurrent(表) id(列) - 保存包含“最新”数据的表的名称。
重新填充时,填充旧表并更新MostCurrent.id以反映此表。
现在,在将数据绑定到页面的应用程序中,绑定最新的表。
答案 2 :(得分:0)
仅将更改推送到实时数据库表是否合适?对于我工作过的大多数应用程序而言,变化很小。您应该能够在单个事务中应用所有更改。提交交易将使它们在桌面上没有中断时可见。
如果数据确实完全改变,那么您可以配置数据库,以便可以替换单个事务中的所有数据。