2017-07-04 27 views
4

我们正在开发一个使用express和MongoDB的大型节点应用程序。我们正试图获得最佳性能,因为我们将在同一台服务器上运行多个客户端(可能有100多个)。节点Express APP 1到N(使用MongoDB)

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

我想知道究竟是什么场景表现和发展的最佳设置(一台服务器,多台客户机)

  1. 一个实例,一个数据库(客户端的数据将通过company的ObjectId所识别入境和客户端将访问域或subroute)
  2. 一个实例,多个表(或数据库,什么是最好的?)
  3. 多个实例,多个表
  4. 任何其他的想法?

在第一次设置,开发商总是会担心目前的公司,这可以带来限制应用程序

在第二设置,值得关注的将继续,但该公司将不会在数据库上干扰条目(更干净的型号)

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

其他设置我没有想到可以做得更好。

注:

我们使用的是猫鼬图书馆

我有WordPress的一些经验和我喜欢的主题方式插件是为它创建。我们正在努力实现的类似WordPress的性能与PHP

遗憾的水平(几个WordPress的有效的服务器上运行)的英语不好

+0

大约有多少客户在这里?你有没有尝试负载平衡? –

+0

我更新了客户编号的问题。不,我该怎么办? –

+0

这完全取决于您如何设计应用程序。您可以设计应用程序以最小化对服务器的请求,并在客户端执行可能的逻辑。做负载平衡的研究。我个人建议您运行多个具有多个数据库的应用程序实例以用于故障安全应用程序,并且您可以使用负载平衡器将请求重定向到相应的不同服务器。 –

回答

2

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

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

请注意使用蒙戈之前,下面的事情: -

请使用只有当你有超过TB的数据,蒙戈,因为这没有任何意义,使用MongoDB的一些MB的或GB的数据的。

如果你想获得最大性能,索引的使用必须在mongo中。

Mongo将所有索引存储在主内存中,如果索引大小超过内存大小,它开始交换索引,这确实代价很高,因此请确保您的应用程序和数据库具有不同的服务器。

我还是说如果你没有TB的数据需要处理,最好使用RDBMS。 为什么这种方法: -

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

对于索引请仔细阅读本 https://docs.mongodb.com/manual/core/index-compound/

而且顺便说一句,我们不保存公司的id在梦里,我只保存的_id从公司收藏价值的对象。

+0

你在说什么是使用第一个设置的权利?一个数据库,数据由公司ID标识。但这样,我总是需要担心每个查询中的公司ID,我该如何解决这个问题?我们一直在开发这种方式一年,有时这会带来一些限制。 –

+0

,它只是一个字符串,它可能是最大到最大1000或10000或100000.但是,对于如此小的数据使用NoSQL db没有意义。 –

+0

现在我们将继续使用MongoDB(现在不能更改),但我们会考虑更改为SQL DB。关于公司标识符,它是一个字符串,但仍然是传递给查询并进行测试的字段。但我仍然不知道为什么这是我提到的3中最好的方法。我不知道如何使用它,而不会影响应用程序 –

相关问题