2

我正在解析比特币区块链,整个想法是构建一个看起来像这样 (address)-[redeemed]->(tx)-[sent]->(address) 的节点图,这样我就可以看到比特币地址与彼此。问题是执行时间,有时只导入一笔交易就需要几分钟。此外,其中一些查询太长,如几千行,根本不会执行。我已经阅读了几篇关于如何优化匹配查询的文章,但几乎没有发现关于创建和合并的内容。我在这里看到一些人建议使用 UNWIND 并发送尽可能多的数据作为参数,以缩短查询时间,但我不知道如何在我的查询中实现这一点。

这是我的查询示例:http: //pastebin.com/9S0kLney

4

1 回答 1

1

您可以尝试使用以下简单查询,传递字符串参数“hash”、“time”、“block”和“confs”;和一个名为“data”的集合参数:

CREATE (tx:Tx {hash: {hash}, time: {time}, block: {block}, confirmations: {confs}})
FOREACH(x IN {data} |
  MERGE (addr:Address {address: x.a})
  CREATE (addr)-[:REDEEMED {value: x.v}]->(tx)
);

用于字符串参数的值应该是显而易见的。

每个“数据”元素都是一个包含地址(“a”)和值(“v”)的映射。例如,下面是与示例查询中的数据相对应的“数据”集合的片段:

[
  {a: "18oBAMgFaeFcZ5bziaYpUpsNCJ7G8EgH8g", v: "240"},
  {a: "192W3HUVDyrp6ewvisHSijcx9f5ZoarrwX", v: "410"},
  {a: "18tnEFy4usZvpMZLnjBFPjbmLKEzqPz958", v: "16.88"},
  ...
]

此查询应该比您的原始示例运行得更快,但我不知道要快多少。

于 2015-07-17T02:56:39.983 回答