Как обновить существующие данные в Oracle с помощью постоянного хранилища Hazelcast

Следуя примерам из справочных руководств Hazelcast по загрузке и хранению постоянных данных, мы можем реализовать хранилище карт для хранения (вставки) данных в Oracle-DB. Однако у Hazelcast нет специального интерфейса, который позволил бы нам обновить существующую запись. Поскольку интерфейс MapStore предоставляет только : store/ storeAll . В любом случае мы можем добиться обновления существующих записей в Oracle-DB через интерфейс Hazelcast-MapStore.


person Tarun Patel    schedule 14.03.2018    source источник


Ответы (1)


IMap Hazelcast представляет собой хранилище ключей и значений, поэтому в нем нет разделения вставки/обновления. Для обновления вашей СУБД с помощью SQL вам необходимо реализовать собственную логику в MapStore#store/MapStore#storeAll методах. Другими словами, вам нужно проверить БД, существует ли запись или нет, а затем принять решение об использовании вставки/обновления соответственно.

person Alparslan Avci    schedule 14.03.2018
comment
это всегда будет 2 запроса к транзакции типа БД: 1) проверка выбора на rdbms на основе ключа IMap. 2) запустить обновление/вставку. Есть ли способ получить доступ к карте (в настоящее время кэшированные значения) в реализации MapStore, чтобы я мог быстро изучить ее, а не выполнять RDBMS-SQL - person Tarun Patel; 14.03.2018
comment
@TarunPatel тебе не нужно. Hazelcast имеет 2 типа загрузки данных при использовании MapLoader: EAGER и LAZY. В режиме ожидания при первом касании карты вызывается loadAllKeys. Затем возвращаются ключи, распределенные всем участникам на основе их хэша, и каждый вызов участника loadAll будет использовать эти ключи. Это загрузит все данные на карту сразу. - person Gokhan Oner; 14.03.2018
comment
Но если вы хотите, вы можете использовать режим LAZY. В этом режиме, когда вы вызываете map.get(key), Hazelcast сначала проверяет, есть ли связанное значение в памяти для этого ключа. Если не найдено, вызывается метод MapLoader.load(key), возвращаются данные, хранящиеся в карте памяти, и возвращаются вызывающему. В следующий раз, когда вы его вызовете, если срок его действия не истек или он не удален, он будет возвращен непосредственно из карты Hazelcast. - person Gokhan Oner; 14.03.2018
comment
Кроме того, если вы используете расширение MapStore для MapLoader, при вызове «map.put» или «map.set» на этот раз будет вызываться метод MapStore.store(key, value). Здесь вы можете обновить свою базу данных. Если вы не хотите загружать/сохранять все записи, то в методах загрузки и хранения вы можете проверить ключи/значения и условно их обработать. Это полностью зависит от вас. - person Gokhan Oner; 15.03.2018
comment
@TarunPatel, вы можете получить доступ к HazelcastInstance реализации HazelcastInstanceAware на своем MapStore и проверить запись на карте. Однако лучший способ выполнить ваш запрос — использовать процедуры БД и просто вызвать их в MapStore. - person Alparslan Avci; 15.03.2018