导入数据
将文件中的数据导入 Neo4j 实例的方法有很多。本页面介绍了将数据导入在 Kubernetes 集群上运行的 Neo4j 实例的最常用方法。
在 Kubernetes 上将数据导入 Neo4j
Neo4j Helm chart 会将 /import 挂载为 Neo4j 的 import 目录,如默认文件位置中所述。您需要将所有想要导入的文件放入此卷中。
要将 CSV 文件中的数据导入 Neo4j,请使用 neo4j-admin database import 命令或 Cypher 查询 LOAD CSV。
-
neo4j-admin database import命令可用于将大量数据批量导入到之前未使用的数据库中,并且每个数据库只能执行一次。 -
LOAD CSVCypher 语句可用于将中小型的 CSV 文件导入到现有数据库中。LOAD CSV可以根据需要多次运行,并且不需要空的数据库。有关详细信息,请参阅 Cypher 手册 →LOAD CSV。
|
根据您的 Neo4j 配置,某些方法支持从远程位置获取要导入的数据(例如,使用 HTTP 或从云对象存储获取)。因此,并不总是需要将源数据文件放在 Neo4j 的 import 目录中。 |
配置导入卷挂载
/import 卷挂载的默认配置是共享 /data 卷挂载。通常,这就足够了,无需在 Helm 部署的 values.yaml 文件中显式配置 import 卷。有关配置 Neo4j Helm 部署卷挂载的完整详细信息,请参阅 卷挂载和持久卷。
此示例展示了如何配置 /import 以使用默认 StorageClass 的动态配置持久卷 (Persistent Volume)。
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 Kill(内存溢出杀死)。为避免这种情况,请使用单独的容器或 initContainer,或者将 Neo4j Helm 部署置于离线维护模式以运行 neo4j-admin database import。
当 Neo4j 正在运行时,不能使用 neo4j-admin database import 来替换现有数据库。要替换现有数据库,请在运行 neo4j-admin database import 之前执行 DROP 数据库操作,或者将 Neo4j Helm 部署置于离线维护模式。