Node Express APP 1到N(使用MongoDB)

时间:2017-07-04 12:17:45

标签: node.js mongodb express mongoose database

我们正在使用express和MongoDB开发一个大节点应用程序。我们正在努力获得最佳性能,因为我们将在同一台服务器上运行多个客户端(可能超过100个)。

我们正在思考一对一的APP,一个实例,一个数据库和多个访问其域名的客户。

我想知道这个场景(一个服务器,多个客户端)对性能和开发的最佳设置是什么

  1. 一个实例,一个数据库(客户端数据将由条目上的company ObjectId标识,客户端将访问域或子路由)
  2. 一个实例,多个表(或数据库,什么是最好的?)
  3. 多个实例,多个表
  4. 还有其他想法吗?
  5. 在第一个设置中,开发人员总是会担心当前的公司,这会给应用带来限制

    在第二个设置上,问题将继续,但公司不会干扰数据库条目(更干净的模型)

    在第三个设置(可能是开发的最佳设置)中,只有一家公司会受到处理并带来很多可能性,但可能会带来性能问题(所有实例都将在一台服务器上运行)

    我没有想过的其他设置会更好。

    注意:

    我们正在使用mongoose库

    我对WordPress有一些经验,我喜欢为它创建主题和插件的方式。我们正在尝试使用PHP实现类似于Wordpress的性能水平(有效地在服务器上运行多个Wordpress)

    抱歉英语不好

1 个答案:

答案 0 :(得分:2)

您不需要管理多个实例,因为您可以创建公司集合,并且在该集合中您可以存储每个公司,然后您只需要在用户中创建所有这些值的引用。请确保您已经为公司集合制作了独特的索引。在RDBMS(mysql)中很容易处理这样的场景。

还有一件事你也可以通过更改端口在同一个实例上运行多个mongod客户端,如果你正在寻找那种解决方案,那么你也可以这样做。

在使用mongo之前请注意以下事项: -

请仅在您拥有超过TB的数据时使用mongo,因为对某些mb或gb的数据使用mongodb没有任何意义。

如果想要获得最佳性能,必须在mongo中使用索引。

Mongo将所有索引存储在主内存中,如果索引大小更大,那么它开始交换索引的内存非常昂贵,因此请确保您的应用程序和数据库有不同的服务器。

我仍然说如果你没有TB的数据来处理,最好使用RDBMS。 为什么采用这种方法: -

让我给你一个场景。 您有100家公司,在100家公司中,每家公司都有1000名用户。即你在你的用户集合中有1L记录。现在我想删除单个用户或我想更新用户或我想从一家公司获取用户然后我不需要遍历我的完整数据库,因为我可以使用user-id和company id(复合索引)在我的用户集合上创建索引,甚至我可以对公司ID进行简单的过滤查询。

索引请阅读此内容 https://docs.mongodb.com/manual/core/index-compound/

顺便说一下,我们没有将公司ID保存为对象,而是仅从公司集合中保存 _id 的值。