导入性能最佳实践

本页提供了在hubble中优化导入性能的最佳实践。

导入速度主要取决于您要导入的数据量。但是,有两个主要因素会对运行导入所需的时间产生很大影响:

  • 拆分数据
  • 导入格式

如果导入文件大小很小,那么您不需要做任何事情来优化性能。在这种情况下,无论设置如何,导入都应该快速运行。

将数据拆分为多个文件

将导入数据拆分为多个文件会对导入性能产生很大影响。以下格式支持使用IMPORT INTO多文件导入:

  • CSV
  • DELIMITED DATA
  • AVRO

对于这些格式,建议将数据拆分为与节点数量一样多的文件。

例如,如果您有一个3节点集群,请将数据拆分为至少3个文件,创建表并导入该表:

create table emp (id int PRIMARY KEY, name TEXT, INDEX name_idx(name));

import into emp (id, name)
    CSV DATA (
      'nodelocal://1/emp.csv',
      'nodelocal://1/emp1.csv',
      'nodelocal://1/emp2.csv'
    );
    

hubble会导入您提供给它的文件,并且不会进一步拆分它们。例如,如果您为所有数据导入一个大文件,hubble将在一个节点上处理该文件,即使您有更多可用节点。但是,如果您导入两个文件(并且您的集群至少有两个节点),每个节点将并行处理一个文件。这就是为什么将数据拆分为与节点一样多的文件将大大减少导入数据所需的时间。

如果将数据拆分为比节点更多的文件,则不会对性能产生很大影响。

选择一种高性能的导入格式

由于处理方式不同,导入格式的性能不同。下面,导入格式从最快到最慢列出:

  • CSVDELIMITED DATA(两者的导入性能大致相同)
  • AVRO
  • MYSQLDUMP
  • PGDUMP

我们建议将您的导入文件格式化为CSV。这些格式可以由多个线程并行处理,从而提高性能。要以这些格式导入,请使用IMPORT INTO

MYSQLDUMPPGDUMP运行单个线程来解析它们的数据,因此性能会大大降低。

将模式与数据分开导入

对于单表MYSQLDUMPPGDUMP导入,将转储数据拆分为两个文件:

  • 包含表模式的SQL文件
  • 包含表数据的CSV文件

然后,导入仅模式文件:

import table emp
from pgdump
    'nodelocal://1/emp.sql' WITH ignore_unsupported_statements
;

并使用该IMPORT INTO语句将CSV数据导入新创建的表中:

import into emp (id, name)
CSV DATA
(
    'nodelocal://1/emp.csv' 
)
;

这种方法的另一个好处是可以更快地警告导入的潜在问题;也就是说,您不必等待文件加载模式和数据就可以在模式中找到错误。