New issue opened 
at https://github.com/orientechnologies/orientdb/issues/6589.

BTW, the performance test results I shared yesterday where running under 
the debugger and with extensive instrumentation. Here are the "clean" 
results. Wow!

Created 10000 entities in 00:00:05.840, 1712.33 per second
Retrieving 10000 entities...
Retrieved 10000 entities in 00:00:01.561, 6406.15 per second
Deleting 10000 entities...
Deleted 10000 entities in 00:00:01.960, 5102.04 per second

Thanks again!

-- John

On Wednesday, August 17, 2016 at 11:55:51 PM UTC-4, l.garulli wrote:
>
> Hi John,
>
> Happy to help. Yes, please, could you open a new issue for the 
> documentation?
>
> Best Regards,
>
> Luca Garulli
> Founder & CEO
> OrientDB LTD <http://orientdb.com/>
>
> Want to share your opinion about OrientDB?
> Rate & review us at Gartner's Software Review 
> <https://www.gartner.com/reviews/survey/home>
>
>
> On 17 August 2016 at 07:45, John J. Szucs <[email protected] 
> <javascript:>> wrote:
>
>> Luca,
>>
>> I just tried this. The only change was:
>>
>> Iterable<Vertex> vertices=graph.getVertices("identifier", myUriStr);
>>
>> to:
>>
>> Iterable<Vertex> vertices=graph.getVertices("Identifier.identifier", 
>> myUriStr);
>>
>>
>> The results speak for themselves:
>>
>> Created 10000 entities in 00:02:05.755, 79.52 per second
>>
>>
>> This is the kind of performance I was expecting!
>>
>> Thank you!!!
>>
>> I will note that this was a very subtle change. Essentially, it seems 
>> that for the graph API's getVertices() method to use the indices, the 
>> property names have to be qualified with the vertex type name. Would you 
>> like for me to add an issue on GitHub to improve the documentation around 
>> this?
>>
>> Thanks again!
>>
>> -- John
>>
>> On Tuesday, August 16, 2016 at 7:01:10 PM UTC-4, l.garulli wrote:
>>>
>>> It looks like you're not using the index from the Graph API. Look at the 
>>> documentation:
>>>
>>>
>>> http://orientdb.com/docs/last/Performance-Tuning-Graph.html#use-indexes-to-lookup-vertices-by-an-id
>>>
>>> If it's not clear, please write here again, we will help you on this ;-)
>>>
>>> Best Regards,
>>>
>>> Luca Garulli
>>> Founder & CEO
>>> OrientDB LTD <http://orientdb.com/>
>>>
>>> Want to share your opinion about OrientDB?
>>> Rate & review us at Gartner's Software Review 
>>> <https://www.gartner.com/reviews/survey/home>
>>>
>>>
>>> On 16 August 2016 at 17:26, John J. Szucs <[email protected]> wrote:
>>>
>>>> In my OrientDB-based application, I need to do an INSERT-IF-NOT-EXISTS 
>>>> operation using the Java (TinkerPop) API.
>>>>
>>>> I have created a vertex type "Identifier." It has a single property, 
>>>> "identifier," which contains a URI (effectively a String for purposes of 
>>>> this discussion).
>>>>
>>>> I have also created an index like this:
>>>>
>>>> ParametersBuilder builder=new ParametersBuilder(); 
>>>>
>>>> builder.add("class", "Identifier"); 
>>>>
>>>> builder.add("type", "UNIQUE_HASH_INDEX");
>>>>
>>>> graph.createKeyIndex("identifier", Vertex.class, builder.build());
>>>>
>>>>
>>>> Then, I perform the INSERT-IF-NOT-EXISTS operation in a loop like this. 
>>>> This snippet is using the Google Guava libraries and is obviously a 
>>>> simplification of our real application:
>>>>
>>>> int n=10000;
>>>> for (int i=0; i<n; i++)
>>>> {
>>>>
>>>> String myUriStr="http://example.org/"+i.toString();
>>>>
>>>> Iterable<Vertex> vertices=graph.getVertices("identifier", myUriStr);
>>>>
>>>> Vertex vertex=Iterables.getOnlyElement(vertices);
>>>>
>>>> if (null==vertex)
>>>>
>>>> {
>>>>
>>>> // Create vertex
>>>>
>>>> ...
>>>>
>>>> }
>>>>
>>>> // Use vertex
>>>>
>>>> ...
>>>>
>>>> }
>>>>
>>>>
>>>> What I am seeing is that the throughput of this loop rapidly diminishes 
>>>> as more vertices are added, like this (with the throughput relative to the 
>>>> n=1,000 baseline):
>>>>
>>>>
>>>> n=1,000 throughput=100%
>>>> n=2,000 throughput=58.8%
>>>> n=5,000 throughput=29.7%
>>>>
>>>> n=10,000 throughput=16.5%
>>>>
>>>>
>>>> This obviously suggests that indexing is not working, so I tried a SQL 
>>>> EXPLAIN command.
>>>>
>>>> *explain select from identifier where identifier='http://example.org/1 
>>>> <http://example.org/1>'*
>>>> documentReads=1
>>>> fullySortedByIndex=false
>>>> documentAnalyzedCompatibleClass=1
>>>> recordReads=1
>>>> fetchingFromTargetElapsed=0
>>>> indexIsUsedInOrderBy=false
>>>> compositeIndexUsed=1
>>>> current=Identifier#153:0{identifier:
>>>> http://example.org/1,out_id:[size=1]} v2
>>>> involvedIndexes=[Identifier.identifier]
>>>> limit=-1
>>>> evaluated=1
>>>> user=#5:0
>>>> elapsed=2.387001
>>>> resultType=collection
>>>> resultSize=1 
>>>>  
>>>>
>>>> The documentation at http://orientdb.com/docs/master/SQL-Explain.html does 
>>>> not seem to be 100% current on how to interpret the output of the EXPLAIN 
>>>> command, but my interpretation is that the query did recognize and use the 
>>>> index that I created.
>>>>
>>>> I also tried some profiling (with JProfiler) and see a hot spot at 
>>>> com.tinkerpop.blueprints.impls.orient.OrientElementIterator.hasNext.
>>>>
>>>> All of this is with OrientDB running in embedded mode, on a fairly 
>>>> high-end Linux machine and with a fresh, empty database at the beginning 
>>>> of 
>>>> each test.
>>>>
>>>> I have to believe I am doing something wrong to see such a rapid 
>>>> drop-off in query performance under such relatively small data volumes.
>>>>
>>>> I have been struggling with this for several days off-and-on now and 
>>>> it's time to ask for help. Has anyone else encountered a similar issue? 
>>>> What can I do to address this?
>>>>
>>>> Thanks in advance!
>>>>
>>>> -- John
>>>>
>>>> -- 
>>>>
>>>> --- 
>>>> 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.

Reply via email to