Составной индекс ребер и свойств (tinkerpop / orientDB)

У меня есть график в OrientDB (использует стек Tinkerpop), и мне нужно включить очень быстрый поиск значений/свойств/полей ребер и вершин входа/выхода ребра.

Таким образом, в основном пользователю нужно будет выполнить поиск следующим образом:

ВЫБЕРИТЕ ИЗ myEdges, ГДЕ inVertex = {VertexIdentity}, outVertex = {VertexIdentity}, property1 = 'xyz'

По сути, это составной индекс для класса ребер из 3 свойств: inVertex, outVertex и property1.

В основном - если у пользователя уже есть VertexIdentity для 2 вершин (возможно, в форме: #CLUSTER_ID:RECORD_ID) - и значение свойства (в данном случае xyz) - это позволит очень быстро просмотреть, была ли комбинация уже существует в графе (если 2 вершины связаны свойством1) - без обхода.

До сих пор я нашел следующий код, чтобы помочь с составными индексами, но я не вижу, можно ли включить в него входные/исходящие вершины (для ребра графа).

https://github.com/orientechnologies/orientdb/blob/master/tests/src/test/java/com/orientechnologies/orient/test/database/auto/SQLSelectCompositeIndexDirectSearchTest.java

Является ли это возможным??


person Imme22009    schedule 14.10.2013    source источник


Ответы (2)


Это отлично работает для определения уникальности края:

OCommandSQL declareIn= new OCommandSQL();
declareIn.setText("CREATE PROPERTY E.in LINK");
OCommandSQL declareOut= new OCommandSQL();
declareOut.setText("CREATE PROPERTY E.out LINK");
OCommandSQL createIndexUniqueEdge= new OCommandSQL();
createIndexUniqueEdge.setText("CREATE INDEX unique_edge ON E (in, out) UNIQUE");
graph.command(declareIn).execute();
graph.command(declareOut).execute();               
graph.command(createIndexUniqueEdge).execute();

В вашем случае просто добавьте еще одно свойство в класс Edge и, следовательно, в индекс

person Filippo    schedule 09.11.2013

Вы можете сделать это с OrientDB, просто создайте составной индекс для свойств входа и выхода (ранее объявите их в классе E).

Это также используется в качестве ограничений, чтобы избежать нескольких ребер, соединяющих одни и те же вершины.

person Lvca    schedule 14.10.2013