我正在使用Spring 4,我为缓存创建了以下类以避免连接

package com.pu.services;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class CacheSRV {

private Map<Long, String> countriesMap = new ConcurrentHashMap<Long, String>();
private Map<Long, String> provinceMap = new ConcurrentHashMap<Long, String>();
private Map<Long, String> divisionMap = new ConcurrentHashMap<Long, String>();
private Map<Long, String> districtMap = new ConcurrentHashMap<Long, String>();
private Map<Long, String> cityMap = new ConcurrentHashMap<Long, String>();
private Map<Long, String> zoneMap = new ConcurrentHashMap<Long, String>();

public Map<Long, String> getCountriesMap() {
    return countriesMap;
}

public void setCountriesMap(Map<Long, String> countriesMap) {
    this.countriesMap = countriesMap;
}

public Map<Long, String> getProvinceMap() {
    return provinceMap;
}

public void setProvinceMap(Map<Long, String> provinceMap) {
    this.provinceMap = provinceMap;
}

public Map<Long, String> getDivisionMap() {
    return divisionMap;
}

public void setDivisionMap(Map<Long, String> divisionMap) {
    this.divisionMap = divisionMap;
}

public Map<Long, String> getDistrictMap() {
    return districtMap;
}

public void setDistrictMap(Map<Long, String> districtMap) {
    this.districtMap = districtMap;
}

public Map<Long, String> getCityMap() {
    return cityMap;
}

public void setCityMap(Map<Long, String> cityMap) {
    this.cityMap = cityMap;
}

public Map<Long, String> getZoneMap() {
    return zoneMap;
}

public void setZoneMap(Map<Long, String> zoneMap) {
    this.zoneMap = zoneMap;
}

}


当我得到值时,将遍历所有地图以找出值。
假设我得到一个学生列表,学生列表的大小为100,世界上有195个国家。因此,对于每一次迭代,我都需要遍历195个国家/地区来找出属于学生的国家/地区。那是性能开销吗?如果是,如何克服?

或者我最好使用join

Select * from  Student ST
INNER JOIN COUNTRY C ON C.countryid = st.countryid
INNER JOIN Province P ON P.provinceid = st.provinceid
INNER JOIN Division D ON D.divisionid = st.divisionid
INNER JOIN District DS ON DS.districtid = st.districtid
INNER JOIN City CT ON CT.cityid = st.cityid
INNER JOIN Zone ZE ON ZE.zoneid = st.zoneid

最佳答案

世界上有195个国家。因此,对于每一次迭代,我都需要遍历195个国家/地区来找出属于学生的国家/地区。


WAT?您是否不想使用Map

countriesMap.get(student.countryId)


到此为止。它(除了发生过多冲突的罕见问题之外)是恒定时间的操作。

虽然数据库非常擅长连接,但是使用地图肯定会更快。但是,它还有其他缺点:


如果要更改数据,则需要与表保持同步。这可能变得非常复杂。
您的地图受到您的物理内存的限制,而表的大小可能会增加几个数量级。


在您的情况下,两者都应该没问题。是否值得做的问题仍然存在。

09-19 07:26