如何从文件复制数据库表?

时间:2016-02-24 19:30:22

标签: database replication etl

我需要用文件内容替换数据库表的内容。这种情况每天都会在规定的时间发生。这是使用Java应用程序完成的。我无法访问生成该文件的原始数据库。

旧版应用程序正在创建一个新表并将文件内容插入到新表中。然后它删除旧表并将新表重命名为旧名称。

我的主管说他有更好的方法,那就是将文件内容加载到内存中。接下来,我们将旧表的内容加载到内存中。我们进行一些比较并提出一个插入列表(仅在文件中的条目),更新列表(旧表中具有相同pk的条目和文件并且不匹配)和删除列表(条目)只在旧表中。)

我的主管说这样做的好处是从文件中读取每一行并插入它需要很长时间,这可能是由于文件I / O造成的。那么我们仍在阅读文件中的每一行。也许好处是它没有插入重复的行,而数据很可能主要是重复的行。此方法也不需要删除和创建表权限,因为从安全角度来看,旧方法似乎是一件好事。

我的问题是这项技术还有其他问题吗?它似乎确实使用了很多内存,我们基本上将表的内容加载到内存中两次。有一个更好的方法吗?一种想法是将文件内容加载到新表中并进行一些连接。虽然在加载新表之后,我们也可以像传统应用程序一样交换表。

我可能最终会在内存使用和速度方面比较两种策略,但我想知道其中任何一种是最佳实践,如果不是,那么是什么?

1 个答案:

答案 0 :(得分:0)

好处可能取决于您使用的DBMS和硬件。例如,对于每次写/更新/删除操作,MySQL将增长其二进制日志,这将不容易被删除。这会导致不必要的空间浪费。

通常,写操作比读操作耗时更多。因此,将所有内容放入内存并计算delta可能会显着降低IO利用率。

另一个建议是,为什么不将文件内容放入内存表中,如果你没有更新数据,除了每天从外部源更新?