gpt4 book ai didi

Neo4j 浏览器关系限制?

转载 作者:行者123 更新时间:2023-12-01 11:29:26 25 4
gpt4 key购买 nike

Neo 似乎从大量关系的聚合中返回不正确的值。 注意:我使用 Neo 浏览器进行所有查询。

我首先创建一些简单的示例数据:

CREATE (p:PERSON)
CREATE (e:EVENT)
WITH range(0, 100000) AS list, p, e
UNWIND list AS val
CREATE (p)-[:ATTENDED {val: val}]->(e)

然后运行我的聚合:

MATCH (:PERSON)-[a:ATTENDED]->(:EVENT)
RETURN avg(a.val)

我得到的值是 7050.7... 而不是预期的 50000。我也运行了 countminmax 聚合,它们都符合预期(分别为 100001、0、100000)。

我的代码有问题吗?还是 Neo 浏览器有某种限制?还是别的……?

备注:

如果我运行相同的查询但只创建到 10000 的范围:

...
WITH range(0, 10000) AS list, p, e
...

我从聚合中得到期望值。

最佳答案

这似乎是无符号 32 位 integer overflow 的结果.

如果您更改查询以返回总和,您也会看到错误的结果:

MATCH (:PERSON)-[a:ATTENDED]->(:EVENT)
RETURN SUM(a.val);

而不是 5000050000(50000*100001 的结果),返回的总和大约为 705082704(实际总和取决于什么值导致发生溢出)。

最大的无符号 32 位整数值是 4294967295(或 2^32 - 1)。如果您将其添加到 705082704,或者无论您的总和是多少,您得到的总数将接近预期的 5000050000。它通常不完全是预期值,因为溢出通常发生在添加数字的“中间”而不是“开始”。

如果您的查询将值转换为 float ,您会看到预期的结果:

MATCH (:PERSON)-[a:ATTENDED]->(:EVENT)
RETURN AVG(TOFLOAT(a.val))

或者,如果您存储了浮点属性值,则您的原始查询会起作用:

CREATE (p:PERSON)
CREATE (e:EVENT)
WITH RANGE(0, 100000) AS list, p, e
UNWIND list AS val
CREATE (p)-[:ATTENDED {val: TOFLOAT(val)}]->(e);

关于Neo4j 浏览器关系限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34182521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com