Cluster computing Hazelcast MapLoader性能-强制从数据库加载所有值
我们如何强制在启动时加载所有值,并通过一个数据库调用来完成?配置带有急切加载的maploader似乎不能做到这一点?相反,会加载单个值,这意味着需要大量往返数据库 MapLoader实现代码段如下所示:Cluster computing Hazelcast MapLoader性能-强制从数据库加载所有值,cluster-computing,database-performance,hazelcast,hazelcast-imap,Cluster Computing,Database Performance,Hazelcast,Hazelcast Imap,我们如何强制在启动时加载所有值,并通过一个数据库调用来完成?配置带有急切加载的maploader似乎不能做到这一点?相反,会加载单个值,这意味着需要大量往返数据库 MapLoader实现代码段如下所示: public V load(K key) { // issues a SQL query return databaseService.findByPrimaryKey(key); } 配置如下所示: mapStoreCfg.setImplementation(加载器) .setI
public V load(K key) {
// issues a SQL query
return databaseService.findByPrimaryKey(key);
}
配置如下所示:
mapStoreCfg.setImplementation(加载器).setInitialLoadMode(MapStoreConfig.InitialLoadMode.EAGER)MapLoader界面如下所示
public interface MapLoader<K, V> {
V load(K key);
Map<K, V> loadAll(Collection<K> keys);
Iterable<K> loadAllKeys();
}
公共接口映射加载器{
V负载(K键);
地图加载全部(集合键);
Iterable loadAllKeys();
}
现在,
- 映射加载编排器不加载所有键
- 然后它对密钥进行
,并根据散列算法将所有密钥分批分发给所有分区,以便每个分区都获得该分区负责的密钥散列
- 每个分区不
其中loadAll(集合键)
是每个分区从MapLoading orchestrator获得的键键
- 有一个loadAllKeys()调用
- 有
N
调用,每个分区执行一个调用,因此为每批键调用loadAll(集合键)
loadAll(集合键)
SELECT*语句
并不好,因为它会迫使Hazelcast做出以下选择:1。由单个成员加载所有键值对,并将它们分发给其他成员。这个成员将成为一个瓶颈。2.所有成员都可以获得select*语句
。但是,这可能会给数据库造成不必要的负载。因为所有成员都将从DB获取所有密钥。如果只有一个成员执行SELECT*,那么任何加入成员都只会从“主”接收所有密钥(不需要运行其maploader并执行SELECT*)?