mongoDb更新丢数据问题

如其未来 2017-05-12 09:43:57
mongo 版本是3.0.2, 应用程序是nodejs。 近期 发现mongo有更新丢失的情况,
nodejs的请求日志查到了丢失的数据请求, 返回的状态是200, 但是没入mongo库。

mongo是分两个片 片上做了复制集,2个数据节点 一个投票节点。
目前库的ops 不到1000, 更新占大部分。

nodejs:

var query = {
deviceId: deviceId,
date: moment(playDate.format("YYYY-MM-DD")),
adId: logItemInstance.adId,
orderId: logItemInstance.orderId,
is_cross_day: isCrossDay
};
var update = {
$set: { lut: moment(), appVersion: appVersion, agentId: agentId },
$inc: { count: 1 },
$push: {
Detail: {
pT: moment(),
dPT: logItemInstance.playTime,
recordId: value.id,
}
}
};

adPlayRecordNewModel.update(query, update, { upsert: true }, function (err, a) {
if (err) {
next(err);
} else {
subNext(null, subValue);
}
});


mongo模型:

var safe = { w: 1, j: true, wtimeout: 60 * 1000 };
var mongoose = require('mongoose');
var modelName = "adPlayRecordNewModel";
var dbName = "ad_play_records_new";
var modelSchema = new mongoose.Schema({
date: Date,
deviceId: String,
agentId: Number,
adId: Number,
orderId: Number,
count: Number,
appVersion: String,
lut: Date,
is_cross_day: { type: Boolean, default: false },
Detail: [{
pT: Date,
dPT: Date,
recordId: Number
}]
}, safe);

var instanse = mongoose.model(modelName, modelSchema, dbName);
module.exports = instanse;

...全文
631 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2019-10-14
  • 打赏
  • 举报
回复
w:2 确保有两个副本写入,只要不同时 down,不会出现丢数据的问题
如果要完全保证不丢数据,应该要确认写入磁盘,也就是 j:true
zjcxc 2019-10-14
  • 打赏
  • 举报
回复
而且,也因为默认是写入内存算成功,所以 oplog 也找不到
zjcxc 2019-10-14
  • 打赏
  • 举报
回复
参考:
https://docs.mongodb.com/manual/reference/write-concern/

w: <number>
Any data-bearing member of the replica set can contribute to write acknowledgment of w: <number> write operations.
The following table lists when the member can acknowledge the write based on the j value:

j is unspecified
Acknowledgment requires writing operation in memory (j: false).
--------------------
如果你没有特别设置,那么是 j:false,这意味着你是只写入内存,所以就算写入成功,也不保证不丢失
dttsw 2019-10-12
  • 打赏
  • 举报
回复
丢数据就严重了,mogodb果断放弃
rucypli 2017-05-15
  • 打赏
  • 举报
回复
升级到3的最新版本 之前3.0的小版本确实有提交的数据查不到的bug
如其未来 2017-05-12
  • 打赏
  • 举报
回复
oplog里翻了 并没有那条数据。 准备试试把w:1 改成 w:2, 在观察观察。 看官方文档2.6就解决写丢失的问题了。
rucypli 2017-05-12
  • 打赏
  • 举报
回复
查一下opslog是否有这条更新语句

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧