我有一个hazelcast IMap,我在其中覆盖了加载,存储等其他功能,以便备份也在我的MongoDB数据库中进行。因此,当有一个添加了hazelcast IMap时,MongoDB中也会有一个相应的备份。但是如何覆盖替换功能呢?我希望无论何时对hazelcast map的现有条目进行更新,都应该对相应的MongoDB文档进行更新。
修改:这是我的商店方法的代码
public void store(Key key, Doc value) {
ObjectMapper objectMapper = new ObjectMapper();
try {
String json = objectMapper.writeValueAsString(value);
BasicDBObject document = (BasicDBObject) JSON.parse(json);
this.collection.insertOne(new Document(document));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
我正在使用MapStore并覆盖加载,存储等功能,以便在MongoDB上启用备份。现在我有一个MongoDB集合,其中包含带有自动生成ID的条目。然而,我的hazelcast映射获取5个字段并生成密钥对象,并存储与密钥对象相对应的文档。该地图基本上是<Key, Doc>
格式,其中Key本身是一个包含五个字段的类。
因此,当我使用替换函数(map.replace(Key, Doc)
)时,对应于Key的Doc在hazelcast映射中更新,但MongoDB会插入另一个文档,其id为一些系统参数的组合,如timestamp等和值作为正确的文件。但是我希望它更新相同的条目,但是我应该在哪里指定mongodb的代码来拾取&#34; id&#34;文档中的字段并更新该文档本身?
编辑2:
我已经意识到我需要更新商店功能,使其搜索具有相同ID的现有文档并更新它,如果它不存在则插入它。现在的问题是,当hazelcast试图调用商店功能时,我获得的id是完全不同的,时间戳,机器标识符,进程标识符等的组合。为什么?
当我从地图中获取对象时,它具有mongodb具有的id,但是当我修改然后将其插回时,它具有不同的ID?
答案 0 :(得分:0)
@ shagufta-oliveyu-methwani,你能澄清store
的意思吗?
我相信你有一个MapStore来加载/存储来自后端存储的数据。如果是这种情况,当您致电.submit()
时,您的MapStore onsubmit
方法将会在存储在Hazelcast地图中的数据之前被调用。
您可以在此处找到示例项目:https://github.com/hazelcast/hazelcast-code-samples/tree/master/distributed-map/mapstore
如果您没有使用MapSore,这是将Hazelcast地图与第三方数据存储进行交互的正确方法。