我们如何强制在启动时加载所有值,并且通过单个数据库调用来完成此操作?配置急切加载的maploader似乎不这样做?相反,会加载单个值,这意味着大量往返数据库。
MapLoader实现代码段如下所示:
public V load(K key) {
// issues a SQL query
return databaseService.findByPrimaryKey(key);
}
Config看起来像这样:
mapStoreCfg.setImplementation(装载机)
.setInitialLoadMode(MapStoreConfig.InitialLoadMode.EAGER)
答案 0 :(得分:0)
MapLoader界面如下所示
public interface MapLoader<K, V> {
V load(K key);
Map<K, V> loadAll(Collection<K> keys);
Iterable<K> loadAllKeys();
}
现在,
loadAllKeys
hashing
密钥并根据散列算法将所有密钥分批分发到所有分区,以便每个分区获取分区负责的密钥loadAll(Collection<K> keys);
,其中keys
是每个分区从MapLoading orchestrator获取的密钥。因此,
N
loadAll(Collection<K> keys)
个调用,每个分区执行一个调用,以便为每批密钥调用loadAll(Collection<K> keys)
。