Нужна помощь в повышении производительности запросов Hazelcast

У меня есть около 200 тысяч записей для хранения. Я реализовал Java-клиент для поиска записей с карты hazelcast. Я не получаю результат поиска в ожидаемое время.

Как только я делаю запрос Hazelcast Like или In, он занимает от 400 до 500 мс.

Можно ли изменить конфигурацию на стороне клиента и сервера, чтобы улучшить эту пропускную способность?

Я сохранил информацию о Java Bean внутри Map с ключом-значением. Я также создал индекс по одному полю. Также реализован механизм сериализации идентификаторов.

Конфигурация на стороне сервера (используется файл XML для настройки сервера):

<map name="app-data">
    <in-memory-format>BINARY</in-memory-format>
    <statistics-enabled>false</statistics-enabled>
    <optimize-queries>false</optimize-queries>
    <cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
    <backup-count>0</backup-count>
    <async-backup-count>0</async-backup-count>
    <time-to-live-seconds>0</time-to-live-seconds>
    <max-idle-seconds>0</max-idle-seconds>
    <eviction-policy>NONE</eviction-policy>
    <max-size policy="PER_NODE">2147483647</max-size>
    <eviction-percentage>25</eviction-percentage>
    <min-eviction-check-millis>100</min-eviction-check-millis>
    <merge-policy batch-size="100">com.hazelcast.map.merge.LatestUpdateMapMergePolicy</merge-policy>
    <read-backup-data>false</read-backup-data>
    <hot-restart enabled="false">
        <fsync>false</fsync>
    </hot-restart>
    <map-store enabled="false" initial-mode="LAZY">
        <write-delay-seconds>0</write-delay-seconds>
        <write-batch-size>1</write-batch-size>
    </map-store>
    <indexes>
        <index ordered="true">index</index>
    </indexes>
</map>

<data-serializable-factories>
        <data-serializable-factory factory-id="1">com.tmobile.services.cacheserver.config.hazelcast.cache.serialization.CacheServerDataSerializableFactory</data-serializable-factory>

Код клиента:

ClientConfig config = new ClientConfig();

    config.getSerializationConfig()
          .addDataSerializableFactory(
            CacheServerDataSerializableFactory.FACTORY_ID,
            new CacheServerDataSerializableFactory());

    config.getNetworkConfig().setAddresses(addresses).setConnectionAttemptPeriod(3000)
          .getSocketOptions().setBufferSize(256 * SocketOptions.KILO_BYTE);

    HazelcastInstance hazelcastInstance = HazelcastClient.newHazelcastClient(config);
    return hazelcastInstance;

Я использовал версию Hazelcast как 3.11.

Ниже представлен объект, который я использовал для хранения информации.

    public class AppData implements IdentifiedDataSerializable {

    private static final long serialVersionUID = 1L;

    @JsonIgnore
    private Long index = 0l;

    private Integer appId = 0;

    public void setIndex(Integer index) {
        this.index = index;
    }

    public Integer getIndex() {
        return this.index;
    }

    public void setAppId(Integer appId) {
        this.appId = appId;
    }

    public Integer getAppId() {
        return this.appId;
    }

    @Override
    public final int hashCode() {
        return Objects.hash(this.getAppId());
    }

    @Override
    public void writeData(ObjectDataOutput out) throws IOException {
        out.writeLong(index);
        out.writeInt(appId);
    }

    @Override
    public void readData(ObjectDataInput in) throws IOException {

        this.index = in.readLong();
        this.appId = in.readInt();
    }

    @Override
    @JsonIgnore
    public int getFactoryId() {
        return CacheServerDataSerializableFactory.APP_DATE_FACTORY_TYPE;
    }

    @Override
    @JsonIgnore
    public int getId() {
        return CacheServerDataSerializableFactory.APP_DATE_ID;
    }
}

Я использовал ниже запрос / предикат для фильтрации данных.

Predicate pred = new InPredicate(attribute, (Comparable[]) ((List) filterValue).toArray(new String[0]));
Collection<Object> items =  map.values(predicate);

person Prashant Goswami    schedule 31.12.2018    source источник
comment
Вы пробовали <in-memory-format>OBJECT</in-memory-format>? Это поможет некоторым запросам, но замедлит put()/get() операции.   -  person Neil Stevenson    schedule 31.12.2018
comment
Можете ли вы поделиться объектом, который вы храните на карте Hazlecast, запросами, которые вы выполняете, и версией Hazelcast, которую вы используете?   -  person Gokhan Oner    schedule 01.01.2019
comment
Я обновил свой вопрос, поделившись версией объекта, запроса / предиката и hazelcast.   -  person Prashant Goswami    schedule 02.01.2019


Ответы (1)