Hi Ilya -
First of all, thank for your reply!
Here is my cache configuration:
private static CacheConfiguration<DpKey, BinaryObject>
getCacheConfiguration(IgniteConfiguration cfg) {
CacheConfiguration<DpKey, BinaryObject> cacheCfg = new CacheConfiguration();
cacheCfg.setName(IgniteCacheKey.DATA_POINT_NEW.getCode());
cacheCfg.setCacheMode(CacheMode.PARTITIONED);
cacheCfg.setBackups(1);
cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
cacheCfg.setDataRegionName(Constants.FIVE_GB_PERSISTENCE_REGION);
cacheCfg.setCacheStoreFactory(FactoryBuilder.factoryOf(DataPointCacheStore.class));
cacheCfg.setWriteThrough(true);
cacheCfg.setWriteBehindEnabled(true);
cacheCfg.setWriteBehindFlushThreadCount(2);
cacheCfg.setWriteBehindFlushFrequency(15 * 1000);
cacheCfg.setWriteBehindFlushSize(409600);
cacheCfg.setWriteBehindBatchSize(1024);
cacheCfg.setStoreKeepBinary(true);
cacheCfg.setQueryParallelism(16);
//2M
cacheCfg.setRebalanceBatchSize(2 * 1024 * 1024);
cacheCfg.setRebalanceThrottle(100);
cacheCfg.setSqlIndexMaxInlineSize(256);
List<QueryEntity> entities = getQueryEntities();
cacheCfg.setQueryEntities(entities);
CacheKeyConfiguration cacheKeyConfiguration = new
CacheKeyConfiguration(DpKey.class);
cacheCfg.setKeyConfiguration(cacheKeyConfiguration);
RendezvousAffinityFunction affinityFunction = new
RendezvousAffinityFunction();
affinityFunction.setPartitions(128);
affinityFunction.setExcludeNeighbors(true);
cacheCfg.setAffinity(affinityFunction);
cfg.setCacheConfiguration(cacheCfg);
return cacheCfg;
}
private static List<QueryEntity> getQueryEntities() {
List<QueryEntity> entities = Lists.newArrayList();
//????????(????????)????
QueryEntity entity = new QueryEntity(DpKey.class.getName(),
DpCache.class.getName());
entity.setTableName(IgniteTableKey.T_DATA_POINT_NEW.getCode());
LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put("id", "java.lang.String");
map.put("gmtCreate", "java.lang.Long");
map.put("gmtModified", "java.lang.Long");
map.put("devId", "java.lang.String");
map.put("dpId", "java.lang.Integer");
map.put("code", "java.lang.String");
map.put("name", "java.lang.String");
map.put("customName", "java.lang.String");
map.put("mode", "java.lang.String");
map.put("type", "java.lang.String");
map.put("value", "java.lang.String");
map.put("rawValue", byte[].class.getName());
map.put("time", "java.lang.Long");
map.put("status", "java.lang.Boolean");
map.put("uuid", "java.lang.String");
entity.setFields(map);
//????????????
QueryIndex devIdIdx = new QueryIndex("devId");
devIdIdx.setName("idx_devId");
devIdIdx.setInlineSize(32);
List<QueryIndex> indexes = Lists.newArrayList(devIdIdx);
entity.setIndexes(indexes);
entities.add(entity);
return entities;
}
public class DpKey implements Serializable {
private String key;
@AffinityKeyMapped
private String devId;
public DpKey() {
}
public DpKey(String key, String devId) {
this.key = key;
this.devId = devId;
}
public String getKey() {
return this.key;
}
public void setKey(String key) {
this.key = key;
}
public String getDevId() {
return this.devId;
}
public void setDevId(String devId) {
this.devId = devId;
}
public boolean equals(Object o) {
if (this == o) {
return true;
} else if (o != null && this.getClass() == o.getClass()) {
DpKey key = (DpKey)o;
return this.key.equals(key.key);
} else {
return false;
}
}
public int hashCode() {
return this.key.hashCode();
}
}
And I have described my issue in this post and some tests I have done :
http://apache-ignite-users.70518.x6.nabble.com/Ignite-Data-Streamer-Hung-after-a-period-td21161.html
------------------ ???????? ------------------
??????: "ilya.kasnacheev"<[email protected]>;
????????: 2019??2??28??(??????) ????9:03
??????: "user"<[email protected]>;
????: Re: Performance degradation in case of high volumes
Hello Justin!
Ignite 2.6 does have IGNITE_MAX_INDEX_PAYLOAD_SIZE system property.
We are talking about primary key here. What is your primary key type? What
other indexes do you have? Can you provide complete configuration for affected
tables (including POJOs if applicable?)
Regards,
--
Ilya Kasnacheev
????, 28 ????????. 2019 ??. ?? 15:29, Justin Ji <[email protected]>:
Ilya -
I use ignite 2.6.0, does not have IGNITE_MAX_INDEX_PAYLOAD_SIZE system
property.
But our index field has a fixed length:25 characters, so where can I find
the algorithm to calculate the 'index inline size'.
Looking forward to your reply.
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/