2016-11-29 52 views
0

我選擇使用docker與node-js和mongoDB來製作遊戲,並將所有遊戲部分(戰鬥,聊天,資源等)設置到不同的服務器中,以便每個部分都有它的自己的過程,因爲例如我的資源服務器將運行很多,因爲它會每秒鐘完成每個用戶的資源計算,並處理來自其他服務器的請求,例如用戶有足夠的資源來構建建築物或者太多的資源,玩家將失去如果受到攻擊等mongoDB多個實例或多個數據庫

對於我的alpha和beta版本,我打算在運行一臺服務器,將運行我的比賽的所有部分,但方式我現在,每天做節有它自己的mongodb實例,所以我有resourcesDB,mainDB(用戶信息,登錄信息和所有的實例不會有很多集合,例如resourcesDB只有兩個集合,資源集合,每個用戶將有一個文檔與資源相關的東西,以及日誌集合,將存儲所有用戶的使用(構建升級,戰鬥失敗等)

我已閱讀關於同一臺服務器上的多個實例,他們都表示,它不是最好的辦法,因爲它會影響我的表現,在未來我計劃將我的所有部分分開放入不同的服務器中,以便每個部分都有自己的服務器和數據庫服務器(如果需要)

  1. 我應該建立1個實例並將它在數據庫級別上分開嗎?這意味着我將不得不連接到來自多個服務器的相同實例,資源服務器將每秒更新所有用戶的資源數量,並將其與戰鬥服務器結合起來,以更新DB中的部隊狀態以及每次戰爭的更多情況上,我也會有聊天數據庫,將與每個私人消息或聊天消息更新,會導致任何問題?或者只有當我連接到單個數據庫並將其在集合級別上分開時,它纔會導致問題?

  2. 是否有一個原因,我不應該繼續創建多個實例?我讀過如果在同一臺服務器上使用多個實例,配置文件可能存在問題,但我認爲docker會處理該部分。

更新 - 我已經找到一個很好的答案在這裏:https://dba.stackexchange.com/questions/156811/mongodb-in-micro-services-structure/156984#156984

回答

2

使用微服務架構爲您的應用程序是好主意,但我沒有看到一個很好的理由,以數據庫分開。 MongoDB可以爲你處理它(Sharding)。另外,當您寫入集合B時,MongoDB不會阻止寫入集合A.如果您將應用程序分隔到多個數據庫,則很難執行備份和維護應用程序。

您可以在這裏閱讀關於MongoDB的併發選項並查看MongoDB如何處理集合級別鎖定。 https://docs.mongodb.com/manual/faq/concurrency/

相關問題