3

たとえば、OrientDB グラフの 2 つの単純な頂点:

orientdb> CREATE DATABASE local:/databases/test admin admin local graph;       
Creating database [local:/databases/test] using the storage type [local]...
Database created successfully.
Current database is: local:/graph1/databases/test
orientdb> INSERT INTO V (label,in,out) VALUES ('vertexOne',[],[]);                                                                                                                 
Inserted record 'V#6:0{label:vertexOne,in:[0],out:[0]} v0' in 0.001000 sec(s).
orientdb> INSERT INTO V (label,in,out) VALUES ('vertexTwo',[],[]);
Inserted record 'V#6:1{label:vertexTwo,in:[0],out:[0]} v0' in 0.000000 sec(s).

「RID」ではなく「ラベル」のみを知って、これら 2 つの頂点間にエッジを作成する方法はありますか?

例(機能しません):

orientdb> INSERT INTO E (label, in, out) VALUES ('is_connected_to', (SELECT @rid FROM V WHERE label = 'vertexOne'), (SELECT @rid FROM V WHERE label = 'vertexTwo'));
Inserted record 'E#7:0{label:is_connected_to,in:null,out:null} v0' in 0.001000 sec(s).

潜在的な回避策として「FLATTEN」を試しました。運が悪い:

orientdb> INSERT INTO E (label, in, out) VALUES ('is_connected_to', (SELECT FLATTEN(@rid) FROM V WHERE label = 'vertexOne'), (SELECT FLATTEN(@rid) FROM V WHERE label = 'vertexTwo'));
Inserted record 'E#7:1{label:is_connected_to,in:null,out:null} v0' in 0.001000 sec(s).

作成されるエッジは と の間にnullありnullます。サイコロはありません。

接続のインポートが非常に多く、SQL アプローチの方が高速であるように思われるため、これには OrientDB SQL を使用したいと考えていました。

ただし、これが不可能な場合、エッジをバッチでインポートするための代替案 (約 2M) はありますか?

4

2 に答える 2

2

SQLCreateEdgeはおそらくあなたがやろうとしていることです:

create edge from
(select from V where label = 'vertexOne')
to
(select from V where label = 'vertexTwo')
set label = 'is_connected_to'

ただし、接続のインポートが非常に大きい場合は、SQLCreateLinkをお勧めします。この宝石はここで提案されています。

于 2012-08-02T13:42:39.490 に答える