2017-07-04 29 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中最好的方法。我不知道如何使用它,而不會影響應用程序 –

相關問題