Sorry those images did not come through, posting the email again with the
raw data:

I work with web application that has Jackrabbit 2.10 embedded and we
wanted to try upgrading to Oak.  Our current configuration that we use for
Jackrabbit 2.10 is the FileDataStore along with MySql for the Persistence
DataStore.  We wrote some test cases to measure the performance of
JackRabbit 2.1.0 vs latest Oak 1.2.  In the case of JackRabbit 2.10, we
used what our current application configuration - FileDataStore along with
MySql.  In the case of Oak we tried many configurations but the one we
settled on was a DocumentNodeStore with a FileDataStore backend. We tried
all 3 RDB options (Mongo, PostGress, MySql).  All Test cases used the same
code which standard JCR 2.0 code.   The test cases did the following:

.       create 1000 & 10,000 nodes
.       move 1000 & 10,000 nodes
.       copy 1000 & 10,000 nodes
.       delete 1000 & 10,000 nodes
.       upload 100 files
.       read 1 property on 1000 & 10,000 nodes
.       update 1 property on 1000 & 10,000 nodes


The results were as follows (all results in milliseconds):

Oak tests ran with the creation, move, copy, delete, update, and read of
1000 nodes:

Create 1000 Nodes,Query Properties,Upload 100,Move 1000,Copied 1000,Delete
1000
MySql:3444,2,1445,96349,2246,92923,48647,98
Postgress:2483,19,1130,2404,556,1523,1055,111
Mongo:8497,2,845,14428,4432,7667,4640,142

Postgress seems to perform well overall.

In the case of Jackrabbit 2.10 (tests ran with the creation, move, copy,
delete, update, and read of 1000 nodes):
Create 1000 Nodes,Query Properties,Upload 100,Move 1000,Copied 1000,Delete
1000
MySql:3022,143,1105,16,764,1481,1139,12


Jackrabbit 2.10 performs slightly better than Oak.

The next set of tests were ran with Oak with the creation, move, copy,
delete, update, and read of 10000 nodes:

Create 10000 Nodes,Query Properties,Upload 100,Move 10000,Copied
10000,Delete 10000,Update 10000,Read 10000
MySql:31250,4,1146,741474,20755,728737,374387,2216
Postgress:16475,16,605,30339,7615,24461,12453,2989
Mongo:342192,2,753,406259,321040,43670,41053,968

Postgress once again performed ok.  Mongo and MySql did not do well around
Moves, deletes, and updates. Querying did well also as indexes were
created.

In the case of Jackrabbit 2.10 (tests ran with the creation, move, copy,
delete, update, and read of 10000 nodes):
Create 10000 Nodes,Query Properties,Upload 100,Move 10000,Copied
10000,Delete 10000,Update 10000,Read 10000
MySql:8507,94,744,14,489,824,987,8

Jackrabbit 2.10 performed much better than Oak in general.

Based on the results I have a few questions/comments:

.       Are these fair comparisons between Jackrabbit and Oak?  In our
application it is very possible to create 1-10,000 nodes in a user
session.
.       Should I have assumed Oak would outperform Jackrabbit 2.10?
.       I understand MySql is experimental but Mongo is not - I would
assume Mongo would perform as well if not better than Postgress
.       The performance bottlenecks seem to be at the JDBC level for
MySql.  I made some configuration changes which helped performance but the
changes would make MySql fail any ACID tests.

Just a few notes:

The same JCR code was used for creating, moving, deleting etc any nodes.
The JCR code was used for all the tests.  The tests were all run on the
same machine

Used DocumentMK Builder for all DataStores:

Mongo:
                DocumentNodeStore storeD = new
DocumentMK.Builder().setPersistentCache("D:\\ekm-oak\\Mongo,size=1024,bina
ry=0").setMongoDB(db).setBlobStore(new
DataStoreBlobStore(fds)).getNodeStore();

MySql:
       RDBOptions options = new
RDBOptions().tablePrefix(prefix).dropTablesOnClose(false);
        DocumentNodeStore storeD = new
DocumentMK.Builder().setBlobStore(new
DataStoreBlobStore(fds)).setClusterId(1).memoryCacheSize(64 * 1024 *
1024).

setPersistentCache("D:\\ekm-oak\\MySql,size=1024,binary=0").setRDBConnecti
on(RDBDataSourceFactory.forJdbcUrl(url, userName, password),
options).getNodeStore();
PostGres:
                                RDBOptions options = new
RDBOptions().tablePrefix(prefix).dropTablesOnClose(false);
        DocumentNodeStore storeD = new
DocumentMK.Builder().setAsyncDelay(0).setBlobStore(new
DataStoreBlobStore(fds)).setClusterId(1).memoryCacheSize(64 * 1024 *
1024).

setPersistentCache("D:\\ekm-oak\\postGress,size=1024,binary=0").setRDBConn
ection(RDBDataSourceFactory.forJdbcUrl(url, userName, password),
options).getNodeStore();

The repository was created the same for all three:
Repository repository = new Jcr(new Oak(storeD)).with(new
LuceneIndexEditorProvider()).with(configureSearch()).createRepository();

Any input is welcome..

Thanks,
Domenic

-----Original Message-----
From: Marcel Reutegger [mailto:mreut...@adobe.com]
Sent: Tuesday, March 29, 2016 4:41 AM
To: oak-dev@jackrabbit.apache.org
Subject: Re: Jackrabbit 2.10 vs Oak 1.2.7

Hi,

the graphs didn't make it through to the mailing list.
Can you please post raw numbers or a link to the graphs?

Without access to more data, my guess is that Oak on DocumentNodeStore is
slower with the bigger changes set because it internally creates a branch
to stage changes when it reaches a given threshold. This introduces more
traffic to the backend storage when save() is called, because previously
written data is retrieved again from the backend.

Jackrabbit 2.10 on the other hand keeps the entire changes in memory until
save() is called.

You can increase the threshold for the DocumentNodeStore with a system
property: -Dupdate.limit=100000

The default is 10'000.

Regards
 Marcel

On 29/03/16 04:19, "Domenic DiTano" wrote:

>Hello,
>
>I work with web application that has Jackrabbit 2.10 embedded and we
>wanted to try upgrading to Oak.  Our current configuration that we use
>for Jackrabbit
>2.10 is the FileDataStore along with MySql for the Persistence DataStore.
> We wrote some test cases to measure the performance of JackRabbit
>2.1.0 vs latest Oak 1.2.  In the case of JackRabbit 2.10, we used what
>our current application configuration ­ FileDataStore along with MySql.
>In the case of Oak we tried many configurations but the one we settled
>on was a DocumentNodeStore with a FileDataStore backend.We tried all 3
>RDB options (Mongo, PostGress, MySql).
>All Test cases used the same code which standard
>JCR 2.0 code.   The test cases did the following:
>
>.
>create 1000 & 10,000 nodes
>.
>move 1000 & 10,000 nodes
>.
>copy 1000 & 10,000 nodes
>.
>delete 1000 & 10,000 nodes
>.
>upload 100 files
>.
>read 1 property on 1000 & 10,000 nodes
>.
>update 1 property on 1000 & 10,000 nodes
>
>
>The results were as follows (all results in milliseconds):
>
>Oak tests ran with the creation, move, copy, delete, update, and read
>of
>1000 nodes:
>
>
>
>Postgress seems to perform well overall.
>
>In the case of Jackrabbit 2.10 (tests ran with the creation, move,
>copy, delete, update, and read of 1000 nodes):
>
>
>
>Jackrabbit 2.10 performs slightly better than Oak.
>
>The next set of tests were ran with Oak with the creation, move, copy,
>delete, update, and read of 10000 nodes:
>
>
>
>Postgress once again performed ok.  Mongo and MySql did not do well
>around Moves, deletes, and updates. Querying did well also as indexes
>were created.
>
>In the case of Jackrabbit 2.10 (tests ran with the creation, move,
>copy, delete, update, and read of 10000 nodes):
>
>
>
>Jackrabbit 2.10 performed much
>better than Oak in general.
>
>Based on the results I have a few questions/comments:
>
>.
>Are these fair comparisons between Jackrabbit and Oak?  In our
>application it is very possible to create 1-10,000 nodes in a user
>session.
>.
>Should I have assumed Oak would outperform Jackrabbit 2.10?
>.
>I understand MySql is experimental but Mongo is not ­ I would assume
>Mongo would perform as well if not better than Postgress
>.
>The performance bottlenecks seem to be at the JDBC level for MySql.  I
>made some configuration changes which helped performance but the
>changes would make MySql fail any ACID tests.
>
>Just a few notes:
>
>The same JCR code was used for creating, moving, deleting etc any nodes.
>The JCR code was used for all the tests.  The tests were all run on the
>same machine
>
>Used DocumentMK Builder for all DataStores:
>
>Mongo:
>                DocumentNodeStore storeD = new
>DocumentMK.Builder().setPersistentCache("D:\\ekm-oak\\Mongo,size=1024,b
>ina
>ry=0").setMongoDB(db).setBlobStore(new
>DataStoreBlobStore(fds)).getNodeStore();
>
>MySql:
>       RDBOptions options = new
>RDBOptions().tablePrefix(prefix).dropTablesOnClose(false);
>        DocumentNodeStore storeD = new
>DocumentMK.Builder().setBlobStore(new
>DataStoreBlobStore(fds)).setClusterId(1).memoryCacheSize(64 * 1024 *
>1024).
>
>setPersistentCache("D:\\ekm-oak\\MySql,size=1024,binary=0").setRDBConne
>cti on(RDBDataSourceFactory.forJdbcUrl(url, userName, password),
>options).getNodeStore();
>PostGres:
>                                RDBOptions options = new
>RDBOptions().tablePrefix(prefix).dropTablesOnClose(false);
>        DocumentNodeStore storeD = new
>DocumentMK.Builder().setAsyncDelay(0).setBlobStore(new
>DataStoreBlobStore(fds)).setClusterId(1).memoryCacheSize(64 * 1024 *
>1024).
>
>setPersistentCache("D:\\ekm-oak\\postGress,size=1024,binary=0").setRDBC
>onn ection(RDBDataSourceFactory.forJdbcUrl(url, userName, password),
>options).getNodeStore();
>
>The repository was created the same for all three:
>Repository repository = new Jcr(new Oak(storeD)).with(new
>LuceneIndexEditorProvider()).with(configureSearch()).createRepository()
>;
>
>Any input is welcomeŠ.
>
>Thanks,
>Domenic
>
>

Reply via email to