1

我正在解析一个由 ~600K 行组成的 XML 文件。解析 XML 中的数据并将其插入数据库不是问题,因为我使用 SAX 解析并使用 LOAD DATA INFILE(来自 .txt 文件)插入数据库。txt 文件使用 JDBC 在 Java 中填充。所有这些都需要 5 秒钟才能填充到数据库中。

我的瓶颈现在正在执行多个 SELECT 查询。基本上,每次我点击某个 XML 标记时,我都会调用 SELECT 查询从另一个数据库表中获取数据。添加这些 SELECT 查询使我的填充时间达到 2 分钟。

例如:

  1. 我正在解析一个由书籍、文章、论文等组成的 XML。
  2. 每本书/文章都有子元素,例如 isbn、标题、作者、编辑、出版商。
  3. 在每个作者/编辑/出版商处,我需要查询数据库中的一个表。
  4. 假设我遇到了价值托尔金的作者标签。
  5. 我需要查询数据库中已经存在的名为 author_table 的表
  6. 查询是 [select author_id from author_table where name = 'Tolkien']

这就是瓶颈发生的地方。

现在我的问题是:有没有办法加快速度?

顺便说一句,我认为 2 分钟很长的原因是因为这是一个家庭作业,我还没有完成填充数据库。我估计整个数据库人口需要 5 分钟。因此,我寻求性能优化建议的原因。

4

1 回答 1

2

您可以考虑以下几点:

  • 使用连接池,这样您就不会在每次执行查询时创建/关闭新连接。这样做很昂贵
  • 缓存您通过 SELECT 查询获得的任何数据。是否可以预先预取所有数据,这样您就不必在现场查询它们?
  • 如果您的 SELECT 很慢,请确保查询已优化并且您有适当的索引以避免扫描整个表
  • 确保在 Java 中使用缓冲 IO
  • 你能把工作细分成多个线程吗?如果是这样,请创建多个工作线程以并行执行您的工作的多个实例
于 2013-02-26T01:17:42.053 回答