2017-12-13 3 views
0

私たちのJavaプロジェクトでは、ハローキャストサーバーとクライアントモデルを使用して、アプリケーションのロード時にデータベースからデータをキャッシュしています。 これは私のhazelcast.xml以下メモリデータグリッドのヘーゼルキャストはspring jpaに比べて非常に遅い

<hazelcast> 
<group> 
    <name>dev</name> 
    <password>dev-pass</password> 
</group> 
<management-center enabled="true">http://localhost:8080/mancenter</management-center> 
<network> 
    <port auto-increment="true">5701</port> 
    <join> 
     <multicast enabled="false"></multicast> 
     <tcp-ip enabled="true"> 
      <member>172.22.3.74</member> 
      <!--<interface>127.0.0.1</interface>--> 
     </tcp-ip>  </join> 
    <interfaces enabled="false"> 
     <interface>10.10.1.*</interface> 
    </interfaces> 
    <symmetric-encryption enabled="false">   
     <algorithm>PBEWithMD5AndDES</algorithm> 
     <!-- salt value to use when generating the secret key --> 
     <salt>thesalt</salt> 
     <!-- pass phrase to use when generating the secret key --> 
     <password>thepass</password> 
     <!-- iteration count to use when generating the secret key --> 
     <iteration-count>19</iteration-count> 
    </symmetric-encryption> 
</network> 
<properties> 
    <property name="hazelcast.http.healthcheck.enabled">true</property> 
    <property name="hazelcast.health.monitoring.delay.seconds">5</property> 
    <property name="hazelcast.health.monitoring.level">NOISY</property> 
</properties> 


<map name="scripMasterMap"> 
    <near-cache name="default"> 
     <in-memory-format>BINARY</in-memory-format> 
     <time-to-live-seconds>300</time-to-live-seconds> 
     <max-idle-seconds>100</max-idle-seconds> 
    </near-cache>  
    <backup-count>1</backup-count>  
    <time-to-live-seconds>8000</time-to-live-seconds>  
    <max-idle-seconds>3000</max-idle-seconds>  
    <eviction-policy>LRU</eviction-policy>  
    <eviction-percentage>25</eviction-percentage>  
    <merge-policy>hz.ADD_NEW_ENTRY</merge-policy> 
</map> 

がhazelcastサーバーのコードです。

RefData.java:

ClientConfig cl = new ClientConfig(); 
HazelcastInstance client = Hazelcast.newHazelcastClient(cl); 
IMap<Object, Object> map = cl.getMap("scripMasterMap"); 
return map; 

以下はhazelcastクライアントマップからデータを返している私の方法です:

HazelcastInstance in = Hazelcast.newHazelcastInstance(); 
IMap<Integer, ScripMaster> map = in.getMap("scripMasterMap"); 
for(ScripMaster scripMaster: scripMasterService.getAllScripMasterList()) { 
scripMasterMap.put(scripMaster.getAllToken(), scripMaster); 
} 

以下hazelcastクライアントコードです。

public Set<String> getAssetByInstrumentName(
    IMap<Integer, ScripMaster> map, String instrument) { 

    Set<String> myset = new HashSet<String>(); 
    Predicate namePredicate = Predicates.equal("instrument", instrument); 
    Collection<ScripMaster> assets = map.values(namePredicate); 
    for(Iterator<ScripMaster> it = assets.iterator(); it.hasNext();) { 
    ScripMaster scripmaster = it.next(); 
    myset.put(scripmaster.getAsset()); 
    } 
    return myset; 
} 

これは簡単なコードです。クライアントがメモリ内のデータを持つことができるようにする必要があるものがありますか? この部分は解決しました。

public Set<String> getAllCommodity(IMap<Integer, ScripMaster> map) { 
Set<String> commoditySet = new HashSet<String>(); 
Aggregator<Map.Entry<Integer, ScripMaster>, Set<String>> aggregation = new CommodityAggregator(); 
PropertyExtractor<ScripMaster, String> propertyExtractor = new CommodityPropertyExtractor(); 
commoditySet = map.aggregate(aggregation); 
//  Aggregators.distinct("scripMaster.commodity"); 
//  Aggregators.distinct(); 
LOG.info("Number of commodities loaded::" + commoditySet.size()); 
return commoditySet; 
} 

public class CommodityAggregator extends Aggregator <Map.Entry<Integer, ScripMaster>, Set<String>> { 

Set<String> commoditySet = new HashSet<String>(); 

@Override 
public void accumulate(Map.Entry<Integer, ScripMaster> input) { 

    commoditySet.add(input.getValue().getCommodity()); 
} 

@Override 
public void combine(Aggregator aggregator) { 
} 
@Override 
public Set<String> aggregate() { 
    return commoditySet; 
} 

}

+0

hazelcast.xmlのコンテンツを追加できますか? – noctarius

+0

@noctarius hazelcast.xmlを追加しました –

+0

ありがとう、どのようなシリアル化を使用していますか?オブジェクトツリーはどのくらい複雑ですか?いつでもシリアライズしてデシリアライズする必要があるので、Hazelcastのようなシステムでは、優れた高速シリアル化が不可欠です。 – noctarius

答えて

0

機器のフィールドにインデックスを追加します。

関連する問題