【问题标题】:Schema design suitable for big system适合大系统的架构设计
【发布时间】:2021-08-10 12:23:15
【问题描述】:

我正在为我的在线书籍阅读设计一个关注功能,该功能大约有 10 万本书。所以我想知道哪个是使用 MongoDB 的更好方法。

  1. 将后面的所有书籍推入数组并存储为 1 个文档。当达到最大文档时,我们拆分为另一个文档
  2. 当用户关注一本书时,我们创建一个需求文档

请帮助我指出每种方式的优缺点或比上述两种方式更好的新方式来达到这种情况

const mongoose = require('mongoose');
const {comicConnection} = require('../db');
const Schema = mongoose.Schema;

const UserFollowsSchema = new Schema(
  {
    userId: { type: Schema.Types.ObjectId, ref: 'Users' },
    follow: [{ type: Schema.Types.ObjectId, ref: 'Books' }],
  },
  {
    timestamps: true,
  }
);

module.exports = comicConnection.model(
  'UserFollows',
  UserFollowsSchema,
  'UserFollows'
);

【问题讨论】:

    标签: node.js database mongodb mongoose


    【解决方案1】:

    最好使用第二种方法,您可以更好地访问并且可以更轻松地进行计算。 每当用户关注一本书时,创建一个用户关注这本书的文档,依此类推。 然后你可以用它来找出你关注了多少本书:

    User.countDocuments({user:{USER-ID}});
    

    【讨论】:

    • 我也可以通过数组的长度来知道用户关注了多少本书
    • 当使用第二种方法时,它让我记得我使用的是 mysql 设计。那么在这种情况下没有办法利用 nosql 吗?
    • 为了确定一个人是否关注了一本书,您必须从数据库中读取一个具有长数组的文档,这会给您的服务器带来压力。但是单独保存的时候可以单独查看,对服务器没有双重压力。
    • 但是当你找到用户关注的书籍列表而不是在 100k 用户的 100k 文档中找到一个文档时,你必须在大约数百万个产生更多时间的文档中找到它。所以我想知道哪种方式更好
    猜你喜欢
    • 1970-01-01
    • 2022-08-20
    • 2020-04-28
    • 2010-12-30
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多