2017-06-20 71 views
1

我擁有一個基於小型聊天的遊戲,可讓您擁有物品,與其他人交易,並將其用於各種事情。如何處理多人遊戲中的物品數據?

目前,我有一個JSON文件,用於存儲與每個單獨項目相關的所有數據,如損壞,準確性,名稱,描述,然後在我的應用程序啓動時將這些數據全部解析爲常量字段。

現在爲了存儲播放器的實際庫存,我使用了一個MongoDB數據庫,它有一個項目名稱的字典,作爲一個鍵和一個整數,充當它們擁有的項目的數量。這樣,無論何時需要項目信息,它都可以使用密鑰從常量數據中獲取。

問題是我希望能夠添加更多的用戶特定的東西,這些東西對於每個單獨的物品都是可變的,比如可降解性,傷害增加等等。

我該如何處理這個問題?我也想知道我目前的做事方式是否正確。

+0

哦,這是一個有趣的設計問題。但是對於這個網站來說太恐怖了。 :) –

回答

1

您的基本模型(單獨存放,與播放器一起存儲的參考文獻)與關係世界非常相似。這僅適用於mongo,因爲不同項目的數量足夠小,可以將它們保存在內存中,因此您無需執行多次數據庫往返或表連接即可收集玩家的所有數據。

當您從項目「模板」轉換爲項目「實例」時,由於項目數量變得太大,可能無法再工作。

我想,正常的查詢將沿着「讀一個玩家和他的所有物品」的行。然後,你應該在玩家的所有細節中存儲物品(具有具體對象的json數組)。在mongo中,這是一個單個玩家文檔的讀取調用,因此速度非常快。

這樣:

  • 保持項目集合作爲你擁有了它持有的模板來創建新的項目
  • 放物品的個體複製到播放器上的文件

數組(這建議只有當他的物品的玩家沒有超過16MB的文件大小限制時才被認真對待)。