2017-04-06 8 views
0

2番目のコード行の実行クエリは、アトミックトランザクションの一部です。つまり、別のスレッドが次のコードの2行目と4行目の間でクエリを正常に実行する可能性がありますか?neo4j-php-clientでトランザクションの後にphpコードを実行してからコミットアトミックを実行していますか?

$tx = $client->transaction(); 
$result = $tx->run('CREATE (n:Person) SET n.name = {name} RETURN id(n)', ['name' => 'Michal']); 
$tx->push('CREATE (n:Person) RETURN id(n)'); 
$results = $tx->commit(); 

答えて

1

PHPはスレッドセーフでスレッド間で何も共有しません。

他のスレッドが現在のスレッドで開かれたものと同じトランザクションでクエリを実行することはできません。むしろ独自のトランザクションを使用します。

+0

しかし、コミットする前であっても、直ちに結果を2行目に戻します。つまり、私がコミットしないと、少なくとも特定のタイムアウトに達するまで他のスレッドからの他のすべての要求をブロックします。あなたは何を言っているのですか? – Ibos

+0

あなたはおそらく私の質問を正しく理解していないでしょう。私は各スレッドが独自のトランザクションを持つことを知っていますが、ここのトランザクションオブジェクトはコミットせずにクエリを実行できます。コミットされたトランザクションの一部ではなく、コミットされた部分の直後にある、コミットされたトランザクションの一部ではなく、コミットされていない部分とコミットされた部分との間の時間間隔でデータベースの使用があるかもしれない、ありがとう。 – Ibos

+0

私はとてもよく理解しました。あなたはトランザクションスコープとロックについて話しています。したがって、トランザクションに書き込もうとすると、トランザクションがコミットされるまでロックを保持しようとします。そのトランザクションで発生したすべての変更は、ロックが解除されるまで他のトランザクションには表示されません。これはPHPとは関係ありませんが、neo4jの仕組みと同じです。 –

関連する問題