首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从文件复制数据库表?

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

Stack Overflow用户
提问于 2016-02-25 03:30:22
回答 1查看 31关注 0票数 0

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

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

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

我的领导说,这样做的好处是,从文件中读取每一行并插入它需要很长时间,这可能是由于文件I/O。我们仍然在读取文件中的每一行。也许这样做的好处是它不会插入重复的行,因为数据很可能大部分都是重复的行。此外,这种方法不需要像旧方法那样具有drop和create table权限,从安全性的角度来看,这似乎是一件好事。

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

我可能会在内存使用和速度方面对这两种策略进行比较,但我想知道这两种策略是否都是最佳实践,如果不是,又是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-02-25 07:40:44

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

通常,写操作比读操作耗时多。因此,将所有内容放入内存并计算增量可以显著降低IO利用率。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35611311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档