使用MongoDB(Mongoose)高效安全地存储大量用户数据

时间:2017-01-21 05:08:30

标签: node.js mongodb mongoose schema

MongoDB / Mongoose架构以安全方式存储大量用户数据的建议最佳做法是什么?

每个用户模型都需要通常的字段(名称,电子邮件等),每个用户可能拥有大量关联的内容记录。 (这是一个像Evernote一样的应用笔记。)每个内容文档都需要通常的元数据,如创建和更新日期以及文本内容(主题,正文)和二进制附件(为了这个问题,我们可以假设将存储在数据库之外,所以我们只需要存储一个文件定位器)。正文可能非常大。

理想情况下,每个用户的内容都存储在与任何其他用户数据不同的位置。我想避免数据库查询中的简单错误可能将用户的内容暴露给另一个的可能性。此外,当用户想要删除其数据时,我们需要确保删除所有数据并仅删除其数据。此外,有一天,用户需要对数据进行分片。我认为这意味着每个用户的内容都需要在一个单独的文档或集合中。

选项1,通过引用没有实现这些目标,但它是我见过的最常见的例子:

var mongoose = require('mongoose');
var UserSchema = new mongoose.Schema({
  email: { type: String, required: true },
  name: { given: String, family: String },
  content: [{ type: Schema.Types.ObjectId, ref: 'Content' }],
  ...
});

var ContentSchema = new mongoose.Schema({
  _id: Number,
  subject: String,
  encryptedBody: String,
  ...
});

module.exports = mongoose.model('User', UserSchema);
module.exports = mongoose.model('Content', ContentSchema);

选项2,将内容嵌入用户架构

var mongoose = require('mongoose');
var UserSchema = new mongoose.Schema({
  email: { type: String, required: true },
  name: { given: String, family: String },
  ...
  content : [{
    subject: String,
    encryptedBody: String,
    ...
  }]
});
module.exports = mongoose.model('User', UserSchema);

还有其他方法吗?
关于绩效,一个比另一个好吗? (假设读取远远超过写入次数。) 有关索引内容主题字段的任何想法? 提前感谢您的想法。

0 个答案:

没有答案