Arr*_*rrr 1 persistence mongodb
关于 Mongo 是 NoSql 数据库的事实,并考虑到 NoSql Dbs 对 RAM 的严重依赖,我一直想知道在以下情况下会发生什么?
假设我在服务器中安装了 MongoDb,并且我正在文档中记录付款。例如:
{
UserId: "X-123456",
//Rest of user data,
Payments: [
{
TransactionId: "X-123456"
//Rest of payment data
}
]
}
Run Code Online (Sandbox Code Playgroud)
当用户付款时,服务器收到付款成功响应,在响应添加到文档后大约几秒钟内,电源熄灭,服务器关闭。例如:
1- Response received at 04.01.01.100
2- Response added to Mongo Document at 04.01.01.300
3- Power goes out at 04.01.05.00
Run Code Online (Sandbox Code Playgroud)
在这种情况下,数据会发生什么变化?它还会出现在User文档中吗?
简短回答:是的,数据仍然可用。
长答案介绍:是;一方面,MongoDB 复杂的日志系统意味着必须在 50 毫秒内断电才能丢失数据。另一方面,如果您使用更高的writeConcern,那么您可以确保数据永远不会丢失。
以下是日记的内容:
进入 MongoDB 数据库的每个更改(可能影响一个、一个或多个文档)首先更改为一系列单文档更改,称为日志。这首先存储在 RAM 缓冲区中,但该缓冲区每 50 毫秒写入一次磁盘。这意味着:
50 毫秒的窗口意味着丢失数据的风险很小但非零。
以下是 writeConcern 的情况:
通过使用合适的writeConcern,例如j:true,可以完全消除这种风险。这意味着,当您第一次从客户端收到更新时,服务器不会将确认发送回客户端,直到数据写入磁盘日志。这意味着,一旦您的客户端从服务器获得肯定的确认,那么数据就可以保证安全。
| 归档时间: |
|
| 查看次数: |
4089 次 |
| 最近记录: |