Skip navigation

Update: After enabling, by default, the query cache and Infinispan 2nd level cache, the write times decreased dramatically for this specific example (also 10-20x over JCR).  This is expected, due to several types of repeated queries used to initialize relationship targets, etc. that are now optimized by the cache.  On the other hand, you'll notice a slight increase in the initial query times.  This is also expected, as the first instance of each requires a "put" into the caches.  But, subsequent, repeated query executions will "hit" the cache and skip the DB entirely, the results get a lot more exciting...

 

When we announced the release of Artificer 1.0.0.Beta1, we described our switch to a new persistent storage setup (Artificer 1.0.0.Beta1 Released!).  While the initial performance results were promising, I was a bit disappointed.  However, Beta2 will change that.  After using a CQRS pattern, tweaking our use of Hibernate Search, and spending a lot of time with JProfiler, we were surprised by the magnitude of the improvements.  In our example, full-text queries improved over 10x, when compared to the old JCR setup.  Metadata queries improved a little under 20x!  Plus, neither of those used pagination, so real-world use cases will be exponentially faster.

 

2000 primary artifacts may not seem like much, even after derivation.  And that's fair enough.  However, this at least gives an idea as to why we made the decisions we did.  Even in this out-of-the-box example that skips clustering, in-memory caching, and other scaling techniques, the results are extremely promising.  Artificer should now be positioned to take on extremely large quantities of large documents, typical in enterprise development shops.

 

Note that this new setup heavily emphasizes fast reads over writes.  You'll notice that the writes have actually slowed a bit.  But, that's entirely expected, since there's a lot more to writing to RDBMS (as opposed to a JCR node), updating Hibernate Search indexes, etc.  But in the end, Artificer use cases have always leaned towards reads being the vital priority.  Although any solution has pros and cons, we feel this approach best fits where Artificer is headed.

 

A PDF of the results is attached!