如果geode具有部分数据并且外部数据源中存在其他数据,我如何从apache geode获取完整数据

问题描述

我有一个 apache geode 设置。我已将 geode 与外部数据源 postgres 连接。有一种情况,我在 apache geode 中几乎没有数据,其余的都在 postgres 中。我正在使用查询服务来获取数据,当我触发查询时,我希望 apache geode 应该向我提供存在于其服务器和 postgres 中的数据(对于 apache geode 中不存在的数据)。我该如何继续?

我已加载缓存,如果 Apache Geode 中不存在数据,则会加载该缓存。

''' @服务 公共类 QuoteLoader 实现 CacheLoader {

private static Logger logger = LoggerFactory.getLogger(QuoteLoader.class);

@Autowired
EmployeeImpl employeeImpl;

@Autowired
EmployeeRepository employeeRepository;

public QuoteLoader() {
}

@Override
public void init(Properties props) {
}

@Override
public void close() {
}

@Override
public Employee load(LoaderHelper<String,Employee> helper) throws CacheLoaderException {
    
    Employee value = null;
    try {
        value = employeeImpl.getEmployeeById(Long.valueOf(helper.getKey()));
    } catch (Exception e) {
        e.printstacktrace();
        logger.error("Error Occured",e);
    }
    return value;
}

} '''

解决方法

查询引擎只执行 OQL 并返回结果,在查询执行期间不会调用任何 CacheLoaderCacheLoader 仅在执行 Region.get(key) 操作时出现缓存未命中时才会调用。

如果你仔细想想,这是完全有道理的......查询是一个可以返回任何结果(包括无)的任意字符串,因此查询引擎无法知道一个条目是否应该是其一部分如果 Geode 区域中不存在实际条目,则返回结果与否。