Как я могу получить полные данные из apache geode, если geode имеет частичные данные, а другие данные присутствуют во внешнем источнике данных

У меня есть настройка apache geode. Я подключил геодез к внешнему источнику данных - postgres. Существует сценарий, при котором у меня мало данных в геоде apache, а все остальное находится в postgres. Я использую службу запросов для извлечения данных, и когда я запускаю запрос, я хочу, чтобы геодез apache предоставлял мне данные, присутствующие на его сервере, а также из postgres (для данных, отсутствующих в геоде apache). Как я могу продолжить?

У меня загружен кеш, который загружает данные, если их нет в Apache Geode.

'' 'Открытый класс @Service QuoteLoader реализует CacheLoader ‹String, Employee› {

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;
}

} '''


person user956021    schedule 19.04.2021    source источник


Ответы (1)


Механизм запросов просто выполняет OQL и возвращает результат, никакой CacheLoader не вызывается вообще во время выполнения запроса. CacheLoader вызывается только в случае промаха кеша при выполнении операции Region.get(key).

Это, если подумать, имеет смысл ... запрос - это произвольная строка, которая может возвращать любые результаты (в том числе ни одного), поэтому механизм запросов не может знать, должна ли запись быть частью результата или нет, если фактическая запись еще не присутствует в регионе Geode.

person Juan Ramos    schedule 19.04.2021