导入数据

有多种方法可以将文件中的数据导入 Neo4j 实例。此页面介绍了将数据导入在 Kubernetes 集群上运行的 Neo4j 实例的最常见方法。

将数据导入 Kubernetes 上的 Neo4j

Neo4j Helm 图表在 /import 处配置卷挂载作为 Neo4j import 目录,如默认文件位置中所述。您将要导入的所有文件都放置在此卷中。

要将 CSV 文件中的数据导入 Neo4j,请使用命令 neo4j-admin database import 或 Cypher 查询 LOAD CSV

  • 可以使用neo4j-admin database import命令对大量数据执行批量导入到以前未使用的数据库中,并且每个数据库只能执行一次。

  • LOAD CSV Cypher 语句可用于将小型到中型的 CSV 文件导入现有数据库。LOAD CSV 可以根据需要运行任意多次,并且不需要空数据库。有关简单的示例,请参阅入门指南→导入数据

根据您的 Neo4j 配置,某些方法支持从远程位置获取要导入的数据(例如,使用 HTTP 或从云对象存储中获取)。因此,并不总是需要将源数据文件放在 Neo4j import 目录中。

配置导入卷挂载

/import 卷挂载的默认配置是共享 /data 卷挂载。通常,这已足够,并且无需在 Helm 部署的 values.yaml 文件中显式配置 import 卷。有关为 Neo4j Helm 部署配置卷挂载的完整详细信息,请参阅卷挂载和持久卷

此示例演示如何配置/import 以使用默认StorageClass动态预配的持久卷。

volumes:
  import:
    mode: "defaultStorageClass"
    defaultStorageClass:
      requests:
        storage: 100Gi

使用kubectl cp将文件复制到import

可以使用kubectl cp将文件复制到import卷。此示例演示如何将本地目录my-files/复制到命名空间default中发布名称为my-graph-db的Neo4j实例的/import/files-1

kubectl cp my-files/ default/my-graph-db-0:/import/files-1

# Validate: list the contents of /import/files-1
kubectl exec my-graph-db-0 -- ls /import/files-1

除了使用kubectl cp之外,还可以通过以下方式将数据加载到/import目录:

  • 使用额外的容器或initContainer加载数据。

  • 使用kubectl exec运行命令加载数据。

  • 挂载已填充数据的卷。

    数据必须放置在卷的/import目录中。

使用neo4j-admin database import

运行neo4j-admin database import最简单的方法是使用kubectl exec在Neo4j容器中运行它。但是,在与Neo4j进程相同的容器中运行neo4j-admin database import执行大型导入可能会导致资源争用问题,包括导致一个或两个进程被节点操作系统OOM杀死。为避免这种情况,请使用单独的容器或initContainer,或将Neo4j Helm部署置于离线维护模式下以运行neo4j-admin database import

neo4j-admin database import不能在Neo4j运行时用于替换现有数据库。要替换现有数据库,请在运行neo4j-admin database import之前,要么DROP数据库,要么将Neo4j Helm部署置于离线维护模式。

替代方法

将数据导入Neo4j的另一种方法是在Kubernetes外部运行一个单独的Neo4j独立实例,在该Neo4j实例上执行导入,然后使用备份和恢复转储和加载过程将生成的数据库复制到基于Kubernetes的Neo4j实例中。