lin*_*ram 5 mongoose mongodb node.js microservices mongoose-schema
我的应用程序被分成多个在heroku dynos上运行的微服务(它们无法访问彼此的文件)。有时,有多个微服务与一个集合一起使用。因此,这两个微服务都需要相应的猫鼬模式。
但是,并非两个微服务都需要完整架构。例如,微服务 A 需要完整架构,而微服务 B 仅需要该架构的几个字段。
微服务 A 内的示例架构:
var AccountSchema = mongoose.Schema({
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
phone: { type: String, required: true, unique: true },
forename: { type: String, required: true },
surname: { type: String, required: true },
middleInitals: { type: String, required: false },
failedLoginAttempts: { type: Number, required: true, default: 0 },
lockUntil: { type: Number },
createdAt: { type: Date, default: Date.now }
})
Run Code Online (Sandbox Code Playgroud)
微服务 B 内的示例架构:
var AccountSchema = mongoose.Schema({
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
failedLoginAttempts: { type: Number, required: true, default: 0 },
lockUntil: { type: Number },
createdAt: { type: Date, default: Date.now }
})
Run Code Online (Sandbox Code Playgroud)
我将继续在每个微服务中创建一个新架构,仅包含所需的字段。但是,我不确定当多个微服务向MongoDB数据库注册新的schema时是否会出现问题?例如,两个微服务都会尝试为该unique
字段创建索引。会不会有性能问题?
有人有我可以使用的不同方法吗?这是否是一种有效的方法?
提前致谢 :)
这是一个有效的方法。您可以有 2 个模式指向同一个集合。我已经测试过它并且有效。
\n\nMongoose 是一个对象数据建模 (ODM) 库,您可以让 2 个对象查看同一个集合/(SQL 中的表或视图) - 没有问题。
\n\n只要您获得正确的索引,就不会出现性能问题。与对象数据建模无关。
\n\n您可能想要添加一些类型键,以便在获取请求时只能找到 type1/type2 帐户。在查找时,您可以通过投影来限制获取正确的字段。
\n\n我认为索引 \xe2\x80\x93 电子邮件 + 密码中应该只有 2 个密钥。如果您有电话索引和微服务 B:不包含电话 \xe2\x80\x93,您将在 电话的唯一索引处发生冲突。
\n\n但如果您确实想要一个唯一的电话索引,您可以进行覆盖。您可以为微服务 B 的电话生成临时唯一值(使用自动生成或复制电子邮件值),您将在微服务 B 上忽略此值,并且仅在微服务 A 中查找/更新/显示电话,其中您拥有有效的电话。当用户从 accountB 类型更改为 accountA 类型 \xe2\x80\x93 时,您必须确保将错误的电话号码替换为有效的电话号码。
\n\n我认为同一集合的 2 个模式没有问题 - 您只需要以正确的方式管理索引 \xe2\x80\x93 以避免冲突,并确保您可以区分集合中的不同帐户类型。
\n