dgraph bulk和dgraph live的区别和操作

     当图谱构建完毕后,就需要将数据上传到图谱查看效果,往往数量量比较大,借助一些工具能实现数据的快速上传,dgraph 自带了两个上传命令,dgraph bulk 和 dgraph live。

    dgraph bulk:作为首选方案的原因是它的执行效率比dgraph live高很多,话不多说,先罗列一它的执行命令:

        dgraph bulk -f data.rdf -s data.schema --map_shards=4 --reduce_shards=1 --zero=localhost:5080

        (如果是docker镜像执行,需要在命令前面加上docker exec -it  xxx dgraph bulk……   <xxx为镜像名>)

    查看命令有什么参数,执行dgraph bulk --help,

    参数说明

        -f 为上传的数据文件名,可以为rdf格式或者压缩成gz文件

        -s 为字段定义文件,类似于mysql的表结构

        --map_shards 没有做特殊说明,大致意思是它设置的大一点,数据分布在不同分片会更均匀

        --reduce_shards  这个根据副本数和server的节点数来定,如果你是三个节点,并且副本为3, 此参数就设置为1,如果有6个节点,则设置为2,因为它会在执行该命令的服务器上生成out文件夹,里面会根据这个参数将数据分成reduce_shards份数

        --zero 这个参数即填写zero命令所在的服务器。

    操作说明

        这条命令是离线执行的,dgraph服务必须先停掉,将p和w文件清空,只需要启动zero命令的服务,执行完上传命令后,会生成一个out文件夹,会生成reduce_shards份数据,进入里面找到p和w文件夹,复制至各节点dgraph主目录对原先的p、w进行覆盖,重新启动服务, 数据导入完成。

    性能调优(来源:https://www.jianshu.com/p/ffd4c88e8280):        

        Map

        在map语句中,修改下面的参数可以降低内存使用:

    --num_go_routines 标志控制worker线程的数量,数值越小,占用的内存越少

    --mapoutput_mb 标志控制map输出文件的大小,数值越小,占用的内存越少

       对于更大的数据集,以及有很多core的服务器,map中的gzip解码可能会成为瓶颈,可以首先把RDF拆分成多个.rdf.gz文件(例如每个256MB)。这对内存使用会有略微的影响

        Reduce

        Reduce语句对内存的压力比map小,尽管它仍然可能会使用很多内存。有些参数可以提高性能,但是只有在你有很大的RAM的情况下使用:

  • --reduce_shards 控制产生的dgraph实例数。增大
  • The --map_shards flag controls the number of separate map output shards. Increasing this increases memory consumption but balances the resultant dgraph instances more evenly.
  • The --shufflers controls the level of parallelism in the shuffle/reduce stage. Increasing this increases memory consumption.

    dgraph live: 根据live单词即可知道,它是在线更新数据的,不需要暂停服务,命令如下:

        dgraph live -r g01.rdf.gz -s g01.schema -d localhost:9080 -z localhost:5080

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`bulkWrite()`和`bulkSave()`都是Mongoose中提供的用于批量操作文档的方法,但它们之间有几个重要的区别: 1. 操作类型不同:`bulkWrite()`支持多种操作类型,包括插入、更新、删除等,而`bulkSave()`仅支持插入操作。 2. API不同:`bulkWrite()`方法使用MongoDB原生的BulkWrite API,而`bulkSave()`方法则是Mongoose自己实现的。 3. 语法不同:`bulkWrite()`方法使用操作符对象来描述每个操作,而`bulkSave()`方法则直接传入文档数组。 下面是一个使用`bulkWrite()`方法进行批量更新的示例: ```javascript const User = mongoose.model('User', { name: String, age: Number }); const operations = [ { updateOne: { filter: { name: 'Tom' }, update: { $set: { age: 20 } } } }, { updateOne: { filter: { name: 'Jerry' }, update: { $set: { age: 21 } } } } ]; User.bulkWrite(operations) .then(result => { console.log(result); }) .catch(error => { console.error(error); }); ``` 上述代码中,我们首先定义了要更新的文档数组`operations`,然后使用`bulkWrite()`方法执行批量更新操作。在每个操作中,我们使用`updateOne`操作符来指定要更新的文档,以及要更新的字段。 下面是一个使用`bulkSave()`方法进行批量插入的示例: ```javascript const User = mongoose.model('User', { name: String, age: Number }); const users = [ { name: 'Tom', age: 20 }, { name: 'Jerry', age: 21 }, { name: 'Alice', age: 22 } ]; User.bulkSave(users) .then(result => { console.log(result); }) .catch(error => { console.error(error); }); ``` 上述代码中,我们使用`bulkSave()`方法执行批量插入操作,传入了要插入的文档数组`users`。在插入操作中,`bulkSave()`方法会自动为每个文档生成一个`_id`字段。需要注意的是,`bulkSave()`方法不支持`upsert`选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值