如何将数据大容量加载到dgraph/standalone:graphql容器中?
假设我有一个db,就像 i、 e 现在我想导入数百万个条目,因此希望使用批量加载程序。我的数据集是一个充满如何将数据大容量加载到dgraph/standalone:graphql容器中?,graphql,bulk-load,bulkloader,dgraph,Graphql,Bulk Load,Bulkloader,Dgraph,假设我有一个db,就像 i、 e 现在我想导入数百万个条目,因此希望使用批量加载程序。我的数据集是一个充满.json文件的bug文件夹 据我所见,我应该能够运行如下命令 dgraph bulk-f folderOfJsonFiles-s goldendata.schema--map_shards=4--reduce_shards=2--http localhost:8000--zero=localhost:5080 但是要运行我的服务器,我使用的是dgraph/standalone:graphq
.json
文件的bug文件夹
据我所见,我应该能够运行如下命令
dgraph bulk-f folderOfJsonFiles-s goldendata.schema--map_shards=4--reduce_shards=2--http localhost:8000--zero=localhost:5080
但是要运行我的服务器,我使用的是dgraph/standalone:graphql
image-randocker-run-v$(pwd):/dgraph-p 9000:9000-it-dgraph/standalone:graphql
现在如何开始批量导入
1:
我应该在docker容器本身内运行该命令(并共享包含所有.json
文件的卷(文件夹)还是在主机上安装dgraph并从主机运行dgraph bulk
命令
2:文件的.json
格式应该是什么
3:大容量加载程序是否支持空白节点(id不是)\uU4:0x1234
[编辑]
- 大容量加载程序似乎不支持graphql模式,该模式应首先转换为rdf。为了实现这一点,我在导入graphql模式之后立即导出了模式和数据
curl'localhost:8080/admin/export?format=json'
- 批量加载程序不是实时加载程序的脱机版本。该工具用于为Dgraph Alpha(s)服务器准备数据
- 散装装载机,似乎只能装载
- 大容量加载程序可以加载架构和文件,但这不是graphql架构,以后必须分开加载graphql架构
- 使用docker run-v$(pwd)/dgraph:/dgraph-p 8000:8000-p 9000:9000-p 8080:8080-p 9080:9080-p 5080:5080-it dgraph/standalone:graphql启动dgraph-graphql服务器,以供参考,此图像启动
脚本,该脚本本身将运行/tmp/run.sh
(其中lru_mb是给dgraph alpha的内存)。保留容器id以备以后使用dgraph ratel&dgraph zero&dgraph alpha--lru_mb$lru_mb&dgraph graphql
查找丢失的容器docker ps
- 除非您有+500万条条目(或没有时间),否则请尝试使用live loader。如果您在使用live loader时遇到问题,例如:在几十万个条目(在我的例子中是300k)之后,它变得非常慢,这很可能是因为您的alpha没有足够的内存。在我的例子中,我必须调整docker以向引擎提供16Gb的内存,脚本为
变量提供主机内存的三分之一$lru_mb
- 一旦您使用live loader导入了完整的数据集,您就可以使用
,导出将生成两个文件,例如:docker exec-it yourDockerContainerId curl localhost:8080/admin/export?format=json
和g01.json.gz
,它们对应于您的条目及其模式(这不是graphql模式)g01.schema.gz
- 要将这两个文件
和g01.json.gz
导入回dgraph graphql实例,您需要将它们转换为组的“p”目录输出。据我所知,“p”目录保存Dgraph Alpha的所有数据。如果删除它,您的数据将丢失,如果用另一组数据替换它,您将用刚才复制的数据替换/恢复数据。大容量加载程序不是Dgraph的实例,它只是生成这些“p”的工具目录输出。我已经成功地在容器中运行了它。只需运行g01.schema.gz
。老实说,我不明白docker exec-it yourDockerContainerId dgraph bulk-f export/pathTo/g01.json.gz-s export/pathTo/g01.schema.gz--map_shards=1--reduce_shards=1--http localhost:8001--zero=localhost:5080
此命令中的参数。如果批量加载程序成功运行,它将创建一个http localhost:8001
文件夹,其中包含您可以在Dgraph Alpha中使用的数据。停止docker容器out/0/p
然后用生成的文件夹替换当前Dgraph Alpha的docker停止docker容器ID
文件夹批量加载器。(重新)启动docker容器,您应该有您导入的数据。(可能也会丢弃w和zw文件夹,我不知道它们的用法)p
- 数据已导入,但您将看到一条警告,提示没有graphql架构。好的,让我们导入我们的架构(假设您的架构位于路径
)dgraph/schemas/schema.graphql
这可能需要几分钟的时间,因为graph可能必须根据graphql模式的索引规则对数据进行索引(通常与schema=$(cat-dgraph/schemas/schema.graphql | tr'\\n'');jq-n--arg schema\“$schema\”{query query:\“addSchema\”($sch:String!){addSchema(输入:{schema:$sch}}}{schema{schema}}}}\”,变量:{sch:$schema}}}'| curl-X POST-H\“内容类型:application/json\”http://localhost:9000/admin -d@-
装饰器相关)@search
- 运行dgraph-graphql服务器
docker Run-v$(pwd)/dgraph:/dgraph-p8000:8000-p9000:9000-p8080:8080-p9080:9080-p5080-it dgraph/standalone:graphql
type Product { productID: ID! name: String @search(by: [term]) reviews: [Review] @hasInverse(field: about) } type Customer { custID: ID! name: String @search(by: [hash, regexp]) reviews: [Review] @hasInverse(field: by) } type Review { id: ID! about: Product! @hasInverse(field: reviews) by: Customer! @hasInverse(field: reviews) comment: String @search(by: [fulltext]) rating: Int @search }
mutation { addCustomer(input:{name:"Toto"}){ name } }
- 以下是一些需要了解的事情: