Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 适合大系统的方案设计_Node.js_Database_Mongodb_Mongoose - Fatal编程技术网

Node.js 适合大系统的方案设计

Node.js 适合大系统的方案设计,node.js,database,mongodb,mongoose,Node.js,Database,Mongodb,Mongoose,我正在为我的在线图书阅读设计一个follow功能,大约有10万本书。所以我想知道使用MongoDB哪种方式更好 将所有跟随的书籍放入数组并存储为1个文档。当到达最大文档时,我们将拆分为另一个文档 当用户阅读一本书时,我们创建了一个需求文档 请帮我指出每种方法的优缺点,或者一种比上述两种方法都更好的新方法来达到这种情况 const mongoose=require('mongoose'); const{comicConnection}=require('../db'); const Schema=

我正在为我的在线图书阅读设计一个follow功能,大约有10万本书。所以我想知道使用MongoDB哪种方式更好

  • 将所有跟随的书籍放入数组并存储为1个文档。当到达最大文档时,我们将拆分为另一个文档
  • 当用户阅读一本书时,我们创建了一个需求文档
  • 请帮我指出每种方法的优缺点,或者一种比上述两种方法都更好的新方法来达到这种情况

    const mongoose=require('mongoose');
    const{comicConnection}=require('../db');
    const Schema=mongoose.Schema;
    const userfollowschema=新模式(
    {
    userId:{type:Schema.Types.ObjectId,ref:'Users'},
    follow:[{type:Schema.Types.ObjectId,ref:'Books'}],
    },
    {
    时间戳:对,
    }
    );
    module.exports=comicConnection.model(
    “用户跟随”,
    UserFollowsSchema,
    “用户跟踪”
    );
    
    最好使用第二种方法,您有更好的访问权限,可以更轻松地进行计算。 每当用户关注一本书时,创建一个用户关注该书的文档,依此类推。 然后,您可以使用此信息了解您已阅读了多少本书:

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

    我还可以数一数数组的长度,知道当使用第二种方法时,用户跟随了多少本书,它让我记得就像我在使用mysql设计一样。因此,在这种情况下,没有办法利用nosql?为了查明某人是否遵循了某本书,您必须从数据库中读取具有长数组的文档,这会给服务器带来压力。但是,当你单独保存时,你可以单独检查,服务器上没有双重压力。但是当你找到用户所遵循的书籍列表时,你必须在10万用户的10万文档中找到一个文档,而不是在10万用户的约100万文档中找到一个文档,这需要更多的时间。所以我想知道哪条路更好