Neo4j:选择操作速度慢,数据量大

Neo4j:选择操作速度慢,数据量大,neo4j,cypher,Neo4j,Cypher,我每次都尝试从图中随机删除节点。数据库中的节点数为2460968。下面的查询 MATCH (n:Employee) WITH n AS emp,rand() AS ids ORDER BY ids LIMIT 10 MATCH (n:Company) WITH emp, n AS com,rand() AS ids ORDER BY ids LIMIT 10 RETURN emp.guid,com.guid 这需要很长时间。时间到了 Returned 10 rows in 306863 ms

我每次都尝试从图中随机删除节点。数据库中的节点数为2460968。下面的查询

MATCH (n:Employee)
WITH n AS emp,rand() AS ids ORDER BY ids LIMIT 10

MATCH (n:Company)
WITH emp, n AS com,rand() AS ids ORDER BY ids LIMIT 10
RETURN emp.guid,com.guid
这需要很长时间。时间到了

Returned 10 rows in 306863 ms.
我怎样才能加快这个过程

  • 运行两个单独的语句

  • 试试这个

  • 通过一组随机ID查找节点,并检查它们是否为员工

    MATCH (n) WITH count(*) as total
    WITH [_ IN range(1,10000) | toInt(rand()*total)] as ids
    MATCH (emp) WHERE id(emp) IN ids AND emp:Employee
    RETURN emp LIMIT 10
    
    您的查询生成一个24M随机值的列表,并对其进行排序(两次),同时将那么多节点从图中拉入内存(不确定您有多少内存)

  • 运行两个单独的语句

  • 试试这个

  • 通过一组随机ID查找节点,并检查它们是否为员工

    MATCH (n) WITH count(*) as total
    WITH [_ IN range(1,10000) | toInt(rand()*total)] as ids
    MATCH (emp) WHERE id(emp) IN ids AND emp:Employee
    RETURN emp LIMIT 10
    

    您的查询生成一个24M随机值的列表,并对其进行排序(两次),同时还将那么多节点从图形中拉入内存(不确定您有多少内存)

    您的查询的目标是什么?你想通过随机选择10名员工对数据库进行抽样吗?我正在开发一个图形数据模拟器。我必须随机选择节点并创建关系。我明白了。我不知道如何进行“正确”的采样,但基于此,您可以尝试以下方法:
    MATCH(n)WHERE rand()<0.1 RETURN n LIMIT 10
    。不幸的是,这给出了一个倾斜的示例-第一个节点更有可能到达示例。倾斜不能概括我的要求您的查询的目标是什么?你想通过随机选择10名员工对数据库进行抽样吗?我正在开发一个图形数据模拟器。我必须随机选择节点并创建关系。我明白了。我不知道如何进行“正确”的采样,但基于此,您可以尝试以下方法:
    MATCH(n)WHERE rand()<0.1 RETURN n LIMIT 10
    。不幸的是,这给出了一个倾斜的样本-第一个节点更有可能到达样本。倾斜不能概括我的要求在这个范围内,为什么上限是10000?而不是总数。在这个范围内,为什么上限是10000?而不是全部。