【问题标题】:Neo4j social graph performance on large respondNeo4j 社交图在大响应上的表现
【发布时间】: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

  1. 我使用php库https://github.com/jadell/neo4jphp 但我对其他变体持开放态度。现在我正在研究新主义(Golang)。我还考虑使用 neo4j 扩展来执行查询。目标查询也通过 neo4j 仪表板进行测试。所以没有客户端层。
  2. 新版本的 php 库正在使用 X-Stream。我的不是。但由于查询是在没有客户端的情况下测试的,因此可以省略此因素。
  3. 这个问题很好。我已经调整了查询​​ - 它返回的不是节点,而是我需要的属性,并且性能有所提高。
  4. 如果我对 SLA 的理解正确 - 这种类型的请求应该使用并发 100 和每个请求的允许响应时间 2 秒。通过仪表板的查询响应时间:

限制 1 = 195 毫秒

限制 100 = 564 毫秒

限制 1000 = 1549 毫秒

限制 3000 = 3208 毫秒

跳过 7000 限制 1 = 2051 毫秒

响应最多可以包含 13K 条记录。

【问题讨论】:

    标签: neo4j


    【解决方案1】:
    1. 您使用什么客户端?
    2. 你是否使用流媒体,即 X-Stream:true 标头
    3. 只返回您需要的数据,而不是路径或节点,而只返回执行用例真正需要的那些属性。
    4. 2.0.1 将提高事务端点的性能

    您的 SLA 和当前响应时间是多少?响应有多大?

    【讨论】:

    • 答案添加到**UPD
    • 有什么建议吗?如果不进行数据层重构,我是否有机会提高性能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多