数据导入

根据您的使用场景和数据集大小,有多种方法可以将数据导入到分片属性数据库中。

  • 使用 neo4j-admin database import full 从分隔文件进行初始导入到分片属性数据库。

  • 使用 neo4j-admin database import incremental 将数据增量加载到现有的分片属性数据库中。

  • 对于中小型数据集,使用 LOAD CSV 导入数据。

关于从现有数据库或备份创建分片属性数据库,请参阅 从 URI 创建分片数据库(在线)数据库重新分片

从分隔文件进行初始导入(离线)

您可以像在标准 Neo4j 数据库中一样,使用 neo4j-admin database import full 命令将数据从分隔文件导入到分片属性数据库中。这对于在启动应用程序之前进行批量导入或稍后进行增量导入的大型数据集特别有用。您可以指定 --property-shard-count 选项来定义您想要创建的属性分片数量。这将有助于在 Neo4j 集群的多台服务器上分布数据。

如果您在自托管服务器上创建属性分片,则执行 neo4j-admin database import 命令的服务器必须具有足够的存储空间,以容纳将要创建的所有属性分片。

使用 S3 导入(离线)

以下示例展示了如何导入一组 CSV 文件,使用 --target-location--target-format 选项将它们备份到 S3,然后使用 S3 中的这些种子数据创建数据库。

  1. 使用 neo4j-admin database import 命令将数据导入到 foo-sharded 数据库,并创建一个图分片和三个属性分片。如果 neo4j-admin 进程正在与 Neo4j DBMS 进程同一台服务器上运行,则必须停止 Neo4j DBMS 进程。--target-location--target-format 选项获取导入的输出,将其转换为未压缩的备份,并上传到准备好进行种子加载的位置。

    neo4j-admin database import full foo-sharded --nodes=nodes.csv --nodes=movies.csv --relationships=relationships.csv --input-type=csv --property-shard-count=3 --schema=schema.cypher --target-location=s3://bucket/folder/ --target-format=backup
  2. 通过从 AWS S3 存储桶中的备份进行种子加载,将数据库 foo-sharded 创建为分片属性数据库

    CREATE DATABASE `foo-sharded`
    DEFAULT LANGUAGE CYPHER 25
    PROPERTY SHARDS { COUNT 3 }
    OPTIONS {
     seedUri: `s3://bucket/folder/`
    };

使用本地文件系统导入(离线)

您可以将数据导入到无法访问任何云服务的 Neo4j 集群中。

  1. 使用 neo4j-admin database import 命令将数据导入到 foo-sharded 数据库,并创建一个图分片和三个属性分片。如果 neo4j-admin 进程正在与 Neo4j DBMS 进程同一台服务器上运行,则必须停止 Neo4j DBMS 进程。

    neo4j-admin database import full foo-sharded --nodes=nodes.csv --nodes=movies.csv --relationships=relationships.csv --input-type=csv --property-shard-count=3 --schema=schema.cypher --target-format=backup
  2. 使用数据库允许和拒绝列表,为集群中的每台服务器分配单个分片。请参阅 通过允许/拒绝数据库控制位置

  3. 将生成的备份从执行导入的机器的本地文件系统移动到托管每个分片的服务器上。每台服务器应有一个备份,且备份必须位于每台服务器的相同路径下。

  4. 在每台服务器上,更新 neo4j.conf 以包含文件种子加载的正确设置,如 从 URI 创建数据库 中所述。

  5. 通过从服务器文件系统中的备份进行种子加载,将数据库 foo-sharded 创建为分片属性数据库

    CREATE DATABASE `foo-sharded`
    DEFAULT LANGUAGE CYPHER 25
    PROPERTY SHARDS { COUNT 3 }
    OPTIONS {
     seedUri: `file:/backusp/`, seedOptions: 'NO_CHECK'
    };

在此上下文中,NO_CHECK 可防止种子加载过程验证所有备份是否存在于所有服务器上。

集群会自动将数据分发到其服务器上。有关种子提供程序的更多信息,请参阅 从 URI 创建数据库

增量导入 / 离线更新

您可以使用 neo4j-admin database import incremental 命令将数据导入到现有数据库。这对于想要添加到现有分片属性数据库中的大数据批次特别有用。它允许您比事务处理更快速地进行更新。

  1. 如果 foo-sharded 数据库正在运行,请将其停止。有关说明,请参阅 启动和停止分片属性数据库

  2. 运行 neo4j-admin database import incremental 命令,指定 --property-shard-count 选项以定义您要创建的属性分片数量,指定 --target-location--target-format 选项以上传生成的存储到准备用于重新创建数据库的位置,并指定您希望用于更新现有数据的 CSV 文件。有关更多信息和说明,请参阅 增量导入

neo4j-admin database import incremental foo-sharded --nodes=nodes.csv --nodes=movies.csv --relationships=relationships.csv --input-type=csv --property-shard-count=3 --schema=schema.cypher --target-location=s3://bucket/folder/ --target-format=backup
  1. 使用 dbms.recreateDatabase() 重新创建数据库,或者按照 将现有数据库拆分为分片 的第 2 步操作,并按照与普通离线增量导入相同的方式,使用生成的存储创建一个新数据库。

使用 LOAD CSV 导入数据(在线)

您可以使用 LOAD CSV 将数据导入到分片属性数据库。当您想要从本地和远程文件(包括云 URI)导入中小型数据集(最多 1000 万条记录)时,这一点特别有用。有关更多信息,请参阅 Cypher 手册 → LOAD CSV入门指南 → 教程:使用 LOAD CSV 导入 CSV 数据

涉及 MERGERELATIONSHIP 创建的事务性 Cypher 语句尚未优化。对于超过 10 万条记录的任何内容,使用 LOAD CSV 的性能不会很高。