I will post my code so it will answer your questions.
(I used both OrientGraph and OrientGraphNoTx and there was no big
difference inserting edges. OrientGraphNoTx works faster when inserting
vertrices)
// OrientGraph graph = new
OrientGraph("plocal:D:/orientdb/mygraph");
OrientGraphNoTx graph = new
OrientGraphNoTx("plocal:D:/orientdb/mygraph");
graph.getRawGraph().declareIntent(new OIntentMassiveInsert());
int count = 0;
try {
Iterable<Vertex> outVertices =
graph.getVerticesOfClass("outClass");
Iterable<Vertex> inVertices =
graph.getVerticesOfClass("inClass");
for (Vertex outVertex : outVertices) {
for (Vertex inVertex : inVertices) {
if (compareProperties(outVertex, inVertex)) {
OrientEdge edge = graph.addEdge(null, outVertex,
inVertex, "someEdgeLabel");
edge.setProperty("someProperty",
"somePropertyValue");
count++;
if (count > 2000) {
long graphTimeStart =
System.currentTimeMillis();
System.out.println(" forcing graph commit");
graph.commit();
System.out.println(" forcing graph commit done:
" + (graphTimeStart - System.currentTimeMillis()));
count = 0;
}
}
}
}
graph.commit();
} catch (Exception e) {
System.out.println("Exception:");
e.printStackTrace();
}
On Wednesday, 22 October 2014 18:58:11 UTC+2, Luigi Dell'Aquila wrote:
>
> Ah, ok, I didn't understand. In OrientDB the word "link" is commonly used
> to refer a document field that refers to another document.
> So OK for graph model :)
>
> I have a couple of questions about your code:
> 1) what kind of graph connection are you using (remote, plocal, memory)?
> 2) have you tried putting some commit operations during loops, let's say
> every 1000 edge creations?
> 3) have you tried declaring MassiveInsert intent?
>
> Luigi
>
>
> 2014-10-22 18:23 GMT+02:00 BojanV <[email protected] <javascript:>>:
>
>> Regarding LINKLIST or LINKSET, isn't it for document model? I would
>> prefer to use graph model. And regarding of creating of edges (or links),
>> when I migrate stored procedure one by one, and when I find join expression
>> that I didn't have before, I guess I need than to create edges (links) to
>> that vertices? And so over and over, when I want to migrate join expression
>> I have to create new edges?
>>
>> My import code:
>>
>> Map<Integer, Vertex> bookMap = new HashMap<>();
>> String queryString = "SELECT * FROM Books";
>> Statement statement = connection.createStatement();
>> ResultSet rs = statement.executeQuery(
>> queryString);
>> while (rs.next()) {
>> Vertex bookVertex = graph.addVertex("class:Book");
>> Integer bookId = rs.getInt(1);
>> bookVertex.setProperty(...);
>> // fill vertex from result set
>> bookMap.put(bookId, bookVertex);
>> }
>> rs.close();
>> statement.close();
>>
>> Map<Integer, Vertex> authorMap = new HashMap<>();
>> queryString = "SELECT * FROM Authors";
>> statement = connection.createStatement();
>> rs = statement.executeQuery(queryString);
>> while (rs.next()) {
>> Vertex authorVertex = graph.addVertex("class:Author");
>> Integer authorId = rs.getInt(1);
>> authorVertex.setProperty(...);
>> // fill vertex from result set
>> authorMap.put(authorId, authorVertex);
>> }
>> rs.close();
>> statement.close();
>>
>>
>> graph.commit();
>>
>> queryString = "SELECT * FROM BookAuthor";
>> statement = connection.createStatement();
>> rs = statement.executeQuery(queryString);
>>
>>
>> while (rs.next()) {
>>
>> Integer bookId = rs.getInt(2);
>> Integer authorId = rs.getInt(2);
>>
>> Edge edge = graph.addEdge(null, bookMap.get(bookId),
>> authorMap.get(authorId), "BookAuthor");
>> edge.setProperty(....);
>> }
>> rs.close();
>> statement.close();
>>
>> graph.commit();
>>
>>
>> I used both OrientGraph and OrientGraphNoTx but I didn't see a big
>> difference
>>
>>
>>
>>
>> On Wednesday, 22 October 2014 16:39:33 UTC+2, Luigi Dell'Aquila wrote:
>>>
>>> Hi Bojan
>>>
>>> in general IMHO all this makes sense.
>>> I guess edge creation speed can be improved with some tuning or code
>>> tricks, but I should see your import code..
>>> Anyway, if you decided to go with links and you need 1:n or n:n, you can
>>> use LINKLIST or LINKSET properties instead.
>>>
>>> About procedure translation
>>> 1) if you want to use Gremlin you need a graph structure (so edges), if
>>> you decide to go with links you have to use OrientDB SQL or Javascript
>>> functions
>>> 2) I'm afraid you have to do it manually...
>>>
>>> Luigi
>>>
>>>
>>>
>>> 2014-10-22 11:33 GMT+02:00 BojanV <[email protected]>:
>>>
>>>> Hi guys!
>>>>
>>>> I was given a task to check could we migrate our document management
>>>> database to OriendDB. So far I was playing with OriendDB, gremlin so see
>>>> how it works.
>>>> My question is should we move it at all, could all things that we can
>>>> do now in rdbms be done in graph database?
>>>> The main reason we are investigating this is: some stored procedures
>>>> take too long to execute (because we have lots of data).
>>>>
>>>> Our db model has many tables, some of them are just connecting tables
>>>> (n:n relationship), but they all have one thing in common: no foreign
>>>> keys!
>>>> When we query the data we use case numbers, document numbers and
>>>> another "numbers" to connect data. These numbers sometimes are not unique
>>>> per table (we have 'deleted' or 'active' columns that we use in our
>>>> queries).
>>>> I managed to import some data, it went ok, importing of edges was
>>>> extremely slow, so instead of that I tried to create links between classes
>>>> but it failed because of this "uniqueness reason".
>>>>
>>>> And stored procedure that I have to "translate" to gremlin uses joins
>>>> heavily (and it has about 150 lines of code). Since I can not create
>>>> links,
>>>> creation of edges lasts too long, how to use gremlin to traverse data at
>>>> all?
>>>> And let's say that I create edges and links somehow so I can translate
>>>> my stored procedure, what should I do when I have to translate new stored
>>>> procedure which uses totally different join expressions?
>>>>
>>>> My question is should all these make sense?
>>>>
>>>>
>>>> --
>>>>
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "OrientDB" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>>
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "OrientDB" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.