2.5. Tuning the Index
2.5.1. Exclusive Index Use
Lucene directory synchronizes access to the index using locks. For indices that are only ever accessed locally (such as RAM-based index, or filesystem index not shared between multiple nodes) you can set the following to gain a performance boost.
<property name="default.exclusive_index_use" value="true" />
Important
Set the
default.exclusive_index_use
property to false
to allow multiple caches to share the same stored index. However, this is not recommended because index writes triggered by any of the caches that share the same index will then compete for the write lock. When this happens, unless the business logic ensures that there is no contention, timeouts can be triggered, which result in runtime exceptions.
2.5.2. Near-Realtime Index Manager
By default, each update is immediately flushed into the index. In order to achieve better throughput, the updates can be batched. However, this can result in a lag between the update and query -- the query can see outdated data. If this is acceptable, you can use the Near-Realtime Index Manager by setting the following.
<property name="default.indexmanager" value="near-real-time" />
2.5.3. Tuning Infinispan Directory
Lucene directory uses three caches to store the index:
- Data cache
- Metadata cache
- Locking cache
Configuration for these caches can be set explicitly, specifying the cache names as in the example below, and configuring those caches as usual. All of these caches must be clustered unless you using Infinispan Directory in local mode.
Example 2.6. Tuning the Infinispan Directory
<namedCache name="indexedCache"> <clustering mode="DIST" /> <indexing enabled="true"> <properties> <property name="default.indexmanager" value="org.infinispan.query.indexmanager.InfinispanIndexManager" /> <property name="default.exclusive_index_use" value="{true|false}" /> <property name="default.metadata_cachename" value="lucene_metadata_repl" /> <property name="default.data_cachename" value="lucene_data_dist" /> <property name="default.locking_cachename" value="lucene_locking_repl" /> </properties> </indexing> </namedCache> <namedCache name="lucene_metadata_repl"> <clustering mode="REPL" /> </namedCache> <namedCache name="lucene_data_dist"> <clustering mode="DIST" /> </namedCache> <namedCache name="lucene_locking_repl"> <clustering mode="REPL" /> </namedCache>
Important
The
default.exclusive_index_use
configuration property in the provided sample configuration is set depending on which version of Red Hat JBoss Data Grid is in use:
- when using JBoss Data Grid 6.3.0, set the
default.exclusive_index_use
tofalse
. - when using JBoss Data Grid 6.3.1, to improve performance, either exclude
default.exclusive_index_use
(the default valuetrue
is then used) or explicitly set the value totrue
.
2.5.4. Per-Index Configuration
The indexing properties in examples above apply for all indices - this is because we use the
default.
prefix for each property. To specify different configuration for each index, replace default
with the index name. By default, this is the full class name of the indexed object, however you can override the index name in the @Indexed
annotation.