小编Joh*_*ohn的帖子

argparse augment子命令默认通过全局选项

我希望能够使用argparse.ArgumentParser对象中的全局选项来覆盖/扩充子命令的默认值.

一个例子是显示的帮助反映了全局更新,即以下玩具示例:

import argparse
import os
import sys

# Global parser and options.
parser = argparse.ArgumentParser(
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument("--user", 
                    dest="user", 
                    default=os.environ.get("USER"),
                    help="Override the setting of the $USER variable.")

# Sub-command parser and options.
subparsers = parser.add_subparsers()

command = subparsers.add_parser(
    "command",
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)

command.add_argument("--config",
                     dest="config",
                     default="~%s/config" % os.environ.get("USER"),
                     help="The config file.")

options = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

理想情况下,当我在帮助模式下运行时,我会得到,

> python example.py --user thing command --help
usage: example.py command [-h] [--config CONFIG]

optional arguments:
  -h, --help       show this help message and exit
  --config CONFIG  The config file. …
Run Code Online (Sandbox Code Playgroud)

python arguments default command-line-arguments argparse

5
推荐指数
1
解决办法
1969
查看次数

Neo4j 中性能缓慢的批量更新关系属性

我正在努力在 Neo4j 中有效地批量更新关系属性。目标是更新大约 500,000 个关系(每个关系大约有 3 个属性),我将它们分成 1,000 个批次并在单个 Cypher 语句中处理,

UNWIND {rows} AS row
MATCH (s:Entity) WHERE s.uuid = row.source
MATCH (t:Entity) WHERE t.uuid = row.target
MATCH (s)-[r:CONSUMED]->(t)
SET r += row.properties
Run Code Online (Sandbox Code Playgroud)

但是,每批 1,000 个节点大约需要 60 秒。:Entity标签的UUID 属性上存在索引,即我以前运行过,

CREATE INDEX ON :Entity(uuid)
Run Code Online (Sandbox Code Playgroud)

这意味着根据查询计划匹配关系非常高效,

在此处输入图片说明

总共有 6 次 db 命中,查询执行时间约为 150 毫秒。我还在 UUID 属性上添加了唯一性约束,以确保每个匹配项仅返回一个元素,

CREATE CONSTRAINT ON (n:Entity) ASSERT n.uuid IS UNIQUE
Run Code Online (Sandbox Code Playgroud)

有谁知道我如何进一步调试以了解为什么 Neo4j 需要这么长时间来处理关系?

请注意,我正在使用类似的逻辑来更新节点,这些节点的速度要快几个数量级,这些节点具有更多与之关联的元数据。

作为参考,我使用的是 Neo4j 3.0.3、py2neo 和 Bolt。Python 代码块的形式为,

for chunk in chunker(relationships): # 1,000 relationships …
Run Code Online (Sandbox Code Playgroud)

neo4j cypher py2neo

5
推荐指数
1
解决办法
781
查看次数

Neo4j执行索引的问题

我遇到了一个问题,我在Cypher批量查询中强制使用索引,

UNWIND {rows} AS row
MATCH (s:Entity)
USING INDEX s:Entity(uuid)
WHERE s.uuid = row.source
MATCH (t:Entity)
USING INDEX t:Entity(uuid)
WHERE t.uuid = row.target
MATCH (s)-[r:CONSUMED]->(t)
DELETE r
Run Code Online (Sandbox Code Playgroud)

哪里row.source和哪row.target两个UUID字符串.问题是我得到了错误ERROR - Cannot use index hint in this context.

如果我将查询扩充为仅返回Neo4j UI中特定源和目标节点的关系,即

MATCH (s:Entity)
USING INDEX s:Entity(uuid)
WHERE s.uuid = '04bc79e1-a836-11e6-b841-22000bcec6a9'
MATCH (t:Entity)
USING INDEX t:Entity(uuid)
WHERE t.uuid = 'a245f46a-a837-11e6-b841-22000bcec6a9'
MATCH (s)-[r:CONSUMED]->(t)
RETURN r
Run Code Online (Sandbox Code Playgroud)

没有错误被抛出并且关系被返回,因此我有点困惑的问题是什么?

neo4j cypher

3
推荐指数
1
解决办法
147
查看次数