我試圖改進商業網站的欺詐檢測系統。我們處理直接銀行交易,所以欺詐是我們需要管理的風險。我最近了解了圖形數據庫,並可以看到它如何應用於這些問題。因此,在過去的幾天裏,我設置了neo4j並解析了我們的數據:exampleneo4j欺詐檢測 - 高效的數據結構
我的直覺是爲每個訂單創建一個節點,併爲每個關聯的數據創建一個節點,然後連接他們都在一起。就像這樣:
MATCH (w:Wallet),(i:Ip),(e:Email),(o:Order)
WHERE w.wallet="ex" AND i.ip="ex" AND e.email="ex" AND o.refcode="ex"
CREATE (w)-[:USED]->(o),(i)-[:USED]->(o),(e)-[:USED]->(o)
但此查詢運行速度非常慢作爲數據庫大小的增加(我假設,因爲它需要尋找我所要求的節點整個數據集)。運行如下查詢也需要很長時間:
START a=node(179)
MATCH (a)-[:USED*]-(d)
WHERE EXISTS(d.refcode)
RETURN distinct d
這是爲了提取連接到起點的所有訂單。我對Cypher很陌生(< 24小時),我發現搜索解決方案特別困難。
我可以解決哪些數據結構或查詢有任何具體問題以提高性能?理想情況下,需要在幾秒鐘內完成這種事情,就像我期望從SQL數據庫中獲得的那樣。目前我們有大約17,000個節點。