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