首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果MongoDB关闭并且操作悬而未决,该采取什么策略?

如果MongoDB关闭并且操作悬而未决,该采取什么策略?
EN

Stack Overflow用户
提问于 2019-01-25 10:27:28
回答 2查看 546关注 0票数 0

我有一个列表,每个员工都有一名经理。因此,对于每个对象,其中都有一个manager引用,它不是一个管理器id,而是一组字段,通过这些字段我们可以识别一个管理器。

每个Manager对象都有员工引用列表

所以课程是这样的

代码语言:javascript
复制
Class Manager {

ObjectId _id;

//some attributes

List<Employees> employees;

LocalDateTime createdOn;

}
代码语言:javascript
复制
Class Employee {

ObjectId _id

//some attributes

Manager manager; //Having only attributes but not ObjectId of manager

LocalDateTime createdOn;

}

我们这样做是因为可以更改这个管理器的名称和一些属性,因此可以在manager集合中引入一个新的Manager对象,然后所有现有的雇员现在都属于新的Manager对象。我们的结构就是这样。

在查询时,我们将获得Manager的属性,并根据属性和createdOn字段返回经理的最新员工列表

所以我面临的问题是:

在保存属于新Manager的新员工列表时,我首先使用mongoClient的mongoClient()函数保存所有员工。然后使用insert()保存Manager。

如果在保存员工列表之后,在保存Manager之前,发生了一些在Mongo和Db上发生的坏事,所以我无法保存Manager,因此所有员工现在都将成为孤儿。

我可以遵循什么样的策略,以确保当MongoDB再次出现时,我可以首先存储所有挂起的对象,然后继续执行其余的操作。

我使用的是SpringBoot 2和原始Java驱动程序3.8.0和Java 8

我尝试了Mongo写选项,但只尝试过一次。

EN

回答 2

Stack Overflow用户

发布于 2019-01-25 10:34:26

从我的头顶上,想到了以下两种选择。

  • 如果MongoDB关机,有一个备份数据存储区(例如,另一个Mongo实例,自由格式文本文件,PostgreSQL),并自动切换到它。之后,您可能需要手动将数据放回Mongo,然后重新打开Mongo,但是如果Mongo下降非常罕见,这可能是可以接受的。
  • 在主应用程序和工作进程之间放置一个队列,该进程的唯一目的是写信给Mongo。如果Mongo关闭,工作进程将停止,失败的写入将保留在队列中。当Mongo重新出现时,工人进程将重新启动,一切都会好起来的。
票数 0
EN

Stack Overflow用户

发布于 2019-01-26 04:56:15

从4.0版开始,mongodb支持事务。请参阅https://docs.mongodb.com/manual/core/transactions/和java示例。注意,3.8驱动程序已经包含了所有必要的方法,支持只是数据库服务器版本的一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54363363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档