首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与spring jpa相比,内存数据网格中的Hazelcast速度非常慢

与spring jpa相比,内存数据网格中的Hazelcast速度非常慢
EN

Stack Overflow用户
提问于 2017-12-13 21:44:13
回答 1查看 689关注 0票数 0

对于我们的java项目,我们使用hazelcast服务器和客户端模型在加载应用程序时缓存数据库中的数据。这是我的hazelcast.xml

代码语言:javascript
复制
<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:

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

以下是hazelcast客户端代码:

代码语言:javascript
复制
ClientConfig cl = new ClientConfig();
HazelcastInstance client = Hazelcast.newHazelcastClient(cl);
IMap<Object, Object> map = cl.getMap("scripMasterMap");
return map;

下面是我的方法,它从hazelcast客户端地图返回数据。

代码语言:javascript
复制
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;
}

这是简单的代码。为了让客户端可以在内存中获得数据,是否缺少任何需要做的事情?这个部分现在已经解决了。

代码语言:javascript
复制
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;
}

}

EN

回答 1

Stack Overflow用户

发布于 2017-12-21 16:35:45

在instrument字段上添加索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47794486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档