Neo4j - 删除模式标签需要永远

时间:2015-07-29 20:51:26

标签: neo4j cypher

我跑了这个:

function isEmail($email) {
    return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i", $email));
}

if($_POST) {

    // Enter the email where you want to receive the message
    $emailTo = 'email@gmail.com';

    $clientName = trim($_POST['name']);
    $clientEmail = trim($_POST['email']);
    $subject = trim($_POST['subject']);
    $message = trim($_POST['message']);

    $array = array();
    $array['nameMessage'] = '';
    $array['emailMessage'] = '';
    $array['messageMessage'] = '';

    if($clientName == '') {
        $array['nameMessage'] = 'Please enter your name.';
    }
    if(!isEmail($clientEmail)) {
        $array['emailMessage'] = 'Please insert a valid email address.';
    }
    if($message == '') {
        $array['messageMessage'] = 'Please enter your message.';
    }
    if($clientName != '' && isEmail($clientEmail) && $message != '') {
        // Send email
    $headers = "From: " . $clientName . " <" . $clientEmail . ">" . "\r\n" . "Reply-To: " . $clientEmail;
    mail($emailTo, $subject, $message, $headers);
    }

    echo json_encode($array);

}

?>

现在我想删除标记为Main的节点。 查询

MATCH (b:Bisac) WHERE (b.bisac_code =~ '.*000000') SET b:Main;

永远需要删除,只有52个节点。 我在这里做错了什么?

虽然这些删除永远不会完成,但是没有其他查询返回。看起来db引擎不再响应。

过了一会儿就这样失败了:

match (m:Main)-[r]-() delete r, m;

再次提到:虽然这是无休止的,但没有其他查询返回,也没有其他会话可以打开。 显然,数据库的工作方式类似于单用户/单连接/单线程系统。

3 个答案:

答案 0 :(得分:2)

首先,可能确保只有52:

MATCH (m:Main) RETURN count(m)

除此之外,您可以尝试此查询:

MATCH (m:Main) OPTIONAL MATCH m-[r]-() DELETE r, m;

虽然我不太清楚为什么另一个会要求这么多资源。

答案 1 :(得分:1)

如果我是你,我会尝试分离关系和节点删除,运行两个单独的查询:

match (m:Main)-[r]-() delete r;
match (m:Main) delete m;

不确定这是不是一个好主意,但我怀疑Neo4j必须推迟删除你的第一个查询类型中的关系,并将某种关系标记为“to_be_deleted”。如果你的数据库中有如此多的关系,可能会导致问题。

但正如我所说,我远远不能确定,这是一种猜测......

答案 2 :(得分:0)

我在neo4j-wrapper.conf文件中更改了以下参数。

wrapper.java.initmemory=10240
wrapper.java.maxmemory=10240

我还删除了所有内容并在没有SET Main的情况下重新加载。 我永远不会再使用它,因为不再需要时不清楚如何消除它。