このコンテンツは選択した言語では利用できません。
Chapter 7. Hints for program developers
There are also several hints for developers which can be easily applied to the client application and will boost up the performance.
7.1. Ignore return values リンクのコピーリンクがクリップボードにコピーされました!
When you’re not interested in returning value of the #put(k, v) or #remove(k) method, use Flag.IGNORE_RETURN_VALUES flag as shown below:
Using Flag.IGNORE_RETURN_VALUES
Cache noPreviousValueCache = cache.getAdvancedCache().withFlags(Flag.IGNORE_RETURN_VALUES); noPreviousValueCache.put(k, v);
Cache noPreviousValueCache = cache.getAdvancedCache().withFlags(Flag.IGNORE_RETURN_VALUES);
noPreviousValueCache.put(k, v);
It is also possible to set this flag using ConfigurationBuilder
Using ConfigurationBuilder settings
ConfigurationBuilder cb = new ConfigurationBuilder(); cb.unsafe().unreliableReturnValues(true);
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.unsafe().unreliableReturnValues(true);
7.2. Use Externalizer for marshalling リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Data Grid uses JBoss Marshalling to transfer objects over the wire. The most efficient way to marshall user data is to provide an AdvancedExternalizer. This solutions prevents JBoss Marshalling from sending class name over the network and allows to save some bandwidth:
User entity with Externalizer
The Externalizer must be registered in cache configuration. See configuration examples below:
Adding Externalizer using XML
<cache-container>
<serialization>
<advanced-externalizer class="Book$BookExternalizer"/>
</serialization>
</cache-container>
<cache-container>
<serialization>
<advanced-externalizer class="Book$BookExternalizer"/>
</serialization>
</cache-container>
Adding Externalizer using Java
GlobalConfigurationBuilder builder = ... builder.serialization().addAdvancedExternalizer(new Book.BookExternalizer());
GlobalConfigurationBuilder builder = ...
builder.serialization().addAdvancedExternalizer(new Book.BookExternalizer());
7.3. Storing Strings efficiently リンクのコピーリンクがクリップボードにコピーされました!
If your strings are mostly ASCII, convert them to UTF-8 and store them as byte[]:
-
Using
String#getBytes("UTF-8")allows to decrease size of the object -
Consider using G1 GC with additional JVM flag -
XX:+UseStringDeduplication. This allows to decrease memory footprint (see JEP 192 for details).
7.4. Use simple cache for local caches リンクのコピーリンクがクリップボードにコピーされました!
When you don’t need the full feature set of caches, you can set local cache to "simple" mode and achieve non-trivial speedup while still using Red Hat Data Grid API.
This is an example comparison of the difference, randomly reading/writing into cache with 2048 entries as executed on 2x8-core Intel® Xeon® CPU E5-2640 v3 @ 2.60GHz:
| Cache type | single-threaded cache.get(…) | single-threaded cache.put(…) | 32 threads cache.get(…) | 32 threads cache.put(…) |
|---|---|---|---|---|
| Local cache | 14,321,510 ± 260,807 | 1,141,168 ± 6,079 | 236,644,227 ± 2,657,918 | 2,287,708 ± 100,236 |
| Simple cache | 38,144,468 ± 575,420 | 11,706,053 ± 92,515 | 836,510,727 ± 3,176,794 | 47,971,836 ± 1,125,298 |
| CHM | 60,592,770 ± 924,368 | 23,533,141 ± 98,632 | 1,369,521,754 ± 4,919,753 | 75,839,121 ± 3,319,835 |
The CHM shows comparison for ConcurrentHashMap from JSR-166 with pluggable equality/hashCode function, which is used as the underlying storage in Red Hat Data Grid.
Even though we use JMH to prevent some common pitfals of microbenchmarking, consider these results only aproximative. Your mileage may vary.