簡體   English   中英

Neo4j瀏覽器關系限制?

[英]Neo4j Browser relationship limit?

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位整數溢出的結果

如果您更改了查詢以返回總和,那么您也會看到錯誤的結果:

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

返回的總和大約為705082704 (實際的總和取決於導致溢出的值),而不是500005000050000*100001的結果),而不是500005000050000*100001的結果)。

最大的無符號32位整數值是4294967295 (或2 ^ 4294967295 )。 如果將其添加到705082704 ,或者無論您的金額是多少,您的總數都接近預期的5000050000 它通常不完全是預期值,因為溢出通常發生在“中間”添加數字而不是“在開頭”。

如果您的查詢將值轉換為浮點值,您會看到預期的結果:

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);

Avg和sum有一個整數溢出的錯誤,因為它在這里得到了解決: https//github.com/neo4j/neo4j/pull/5707

您可以快速重現您的問題:

UNWIND range(0, 100000) as x
return min(x),max(x),count(x),sum(x),avg(x),sum(x) / count(x)

和cybersam的建議:

UNWIND range(0, 100000) as x
with toFloat(x) as x
return min(x),max(x),count(x),sum(x),avg(x),sum(x) / count(x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM