Cluster computing Hazelcast 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

我们如何强制在启动时加载所有值,并通过一个数据库调用来完成?配置带有急切加载的maploader似乎不能做到这一点?相反,会加载单个值,这意味着需要大量往返数据库

MapLoader实现代码段如下所示:

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(集合键)

您使用的是什么版本的Hazelcast?它的设计是这样的:一个集群成员加载所有密钥,然后将它们分发给集群成员。它批量加载值,我相信批量大小设置为1000。使用3.8.1。可以,但是相对于数据库来说,性能非常差。我们实际上需要做的只是一个SELECT*语句来获取所有行?
SELECT*语句
并不好,因为它会迫使Hazelcast做出以下选择:1。由单个成员加载所有键值对,并将它们分发给其他成员。这个成员将成为一个瓶颈。2.所有成员都可以获得
select*语句
。但是,这可能会给数据库造成不必要的负载。因为所有成员都将从DB获取所有密钥。如果只有一个成员执行SELECT*,那么任何加入成员都只会从“主”接收所有密钥(不需要运行其maploader并执行SELECT*)?