【问题标题】:Network Performance Issue with Mongoose WritesMongoose 写入的网络性能问题
【发布时间】:2021-02-09 01:59:18
【问题描述】:

我有以下代码来修改我的应用程序中的用户帐户:

"use strict";

var mongoose = require("mongoose");

mongoose.set("debug", true);

mongoose.connect(process.env.MONGO_URL, {
    auth: {
        user: process.env.MONGO_USER,
        password: process.env.MONGO_PASSWD,
    },
    useNewUrlParser: true,
    useUnifiedTopology: false,
});

var db = mongoose.connection;

var schema = mongoose.Schema;

var user_schema = new schema(
    {
        id: { type: String, required: true, unique: true },
        username: { type: String, required: true },
        name: String,
        email: String,
        phone: String,
        created: Date,
        modified: Date,
    },
    { strict: false }
);

var query = user.where({ id: user_id }),
    user_id = "93", // temporarily hard-coded as an example
    user_modified = null,
    result = -1; // failure

db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function () {
    async () => {
        await query.findOne(function (err, user) {
            if (err) {
                console.log(err);
            }
            if (user) {
                user.modified = Date();
                user_modified = user;
            }
        });

        if (user_modified) {
            try {
                let save_user = await user_modified.save();
                if (save_user) {
                    result = 1; // success
                }
            } catch (err) {
                console.log(err);
            }
        }

        console.log(result);
    };
});

这假定用户帐户 93 已经在 MongoDB 数据库中创建:

{
  "_id": ObjectId("5e7d3c3d0a6467c8b554abf4"),
  "id": "93",
  "username": "foo",
  "name": "bar",
  "email": 'baz@mail.com',
  "phone": '1234567890',
  "created": "2000-01-01 01:10:01.553",
  "modified": "2000-01-01 01:10:01.553"
}

我在 us-east-2、eu-west-1 和 ap-southeast-1 的 ec2 实例上运行此代码。我也在美国东部。

这是我的 MongoDB 连接字符串:

MONGO_URL: "mongodb://us-east-2.foo.com:27017,eu-west-1.foo.com:27017,ap-southeast-1.foo.com:27017/bar?authSource=admin&replicaSet=bz0&readPreference=secondary"

当我点击 us-east-2 实例时,它总是为我返回 1(成功)。但是,如果我尝试访问 eu-west-1 或 ap-southeast-1 实例,它会不一致地返回 -1(失败)。

注意:我也经历过使用单个 MongoDB 实例而不是 ReplicaSet 的失败。每当我尝试跨区域连接时,它都会失败。

参考文献:

【问题讨论】:

  • 这可能很明显,但是您确定您可以从您的 EU 实例实际连接到您的 MongoDB 吗?
  • 是的。让我更新我的示例代码以反映这一点。

标签: javascript node.js mongodb mongoose


【解决方案1】:

useUnifiedTopology - 默认为 False。设置为 true 以选择使用 MongoDB 驱动程序的新连接管理引擎。您应该将此选项设置为 true,除非它会阻止您保持稳定的连接。

"use strict";

var mongoose = require("mongoose");

mongoose.set("debug", true);

mongoose.connect(process.env.MONGO_URL, {
    auth: {
        user: process.env.MONGO_USER,
        password: process.env.MONGO_PASSWD,
    },
    useNewUrlParser: true,
    useUnifiedTopology: true,
});

var db = mongoose.connection;

var schema = mongoose.Schema;

var user_schema = new schema(
    {
        id: { type: String, required: true, unique: true },
        username: { type: String, required: true },
        name: String,
        email: String,
        phone: String,
        created: Date,
        modified: Date,
    },
    { strict: false }
);

var query = user.where({ id: user_id }),
    user_id = "93", // temporarily hard-coded as an example
    user_modified = null,
    result = -1; // failure

db.on("error", console.error.bind(console, "connection error:"));
db.once("open", async function () {
    try {
        var user = await query.findOne();

        if (user) {
            user.modified = Date();
            user_modified = user;
        }

        if (user_modified) {
            try {
                let save_user = await user_modified.save();
                if (save_user) {
                    result = 1; // success
                }
            } catch (err) {
                console.log(err);
            }
        }
        console.log(result);
    } catch (err) {
        if (err) {
            console.log(err);
        }
    }
});

参考文献:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-22
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 2021-07-06
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多