【发布时间】:2014-02-11 01:55:52
【问题描述】:
我需要关于提高社交图谱性能的建议。目标查询适用于较小的结果数。但它可能会返回超过 1000 行的大型结果。 能否根据密码查询的大响应调整性能?
使用密码查询:
START givenFriend=node:Nodes('id:709387498'),
item=node:ItemCat1Cat2('category:a.b')
MATCH p = givenFriend-[:FRIEND]-friend1-[:FRIEND]-friend2-[:DATA]->item
RETURN p, item
Neo4j 核心 1.9.5
图表包含已连接的朋友:
friend1Node-[:FRIEND]->friend1Node
一个朋友可以有多个数据项,这些数据项表示为具有属性的节点:
friendNode-[:DATA]->DataNode
一个数据节点大约有 8 个属性。其中有一个类别属性。数据项节点按类别索引。
朋友节点数:650,772
朋友关系号:842,755
数据项节点数:5,640
需要改进的查询应该选择从给定节点 id 到通过 2 个朋友定义类别的数据项的所有路径。路径具有以下视图:
givenFriend-friend1-friend2-dataItem
遍历可以提高性能吗?
迁移到 2.0.0 能否提高 db 模型和查询性能?
**UPD
- 我使用php库https://github.com/jadell/neo4jphp 但我对其他变体持开放态度。现在我正在研究新主义(Golang)。我还考虑使用 neo4j 扩展来执行查询。目标查询也通过 neo4j 仪表板进行测试。所以没有客户端层。
- 新版本的 php 库正在使用 X-Stream。我的不是。但由于查询是在没有客户端的情况下测试的,因此可以省略此因素。
- 这个问题很好。我已经调整了查询 - 它返回的不是节点,而是我需要的属性,并且性能有所提高。
- 如果我对 SLA 的理解正确 - 这种类型的请求应该使用并发 100 和每个请求的允许响应时间 2 秒。通过仪表板的查询响应时间:
限制 1 = 195 毫秒
限制 100 = 564 毫秒
限制 1000 = 1549 毫秒
限制 3000 = 3208 毫秒
跳过 7000 限制 1 = 2051 毫秒
响应最多可以包含 13K 条记录。
【问题讨论】:
标签: neo4j