2014-03-26 30 views
-1

我剛剛開始使用Node.js和Socket.io,我打算構建一個小型的多人遊戲。也許每個玩家都有一個簡單的東西,他們可以在競技場裏跑來跑去嘗試並殺死對方。NoSql,Sql或Flatfile

但是我不確定如何最好地存儲數據。我可以想象,諸如角色和武器之類的對象之間會存在一些鬆散的關係,但是我可能會在需要時將這些對象加載到系統中,並在需要時將其保存出來,而不再需要它們。

在這些術語中,將「對象」寫入文件而不是涉及數據庫會更簡單。使用NoSql文檔數據庫還是隻使用老的Sql服務器?

+0

在這種情況下,所有三個選項都可以工作。哪一個更好取決於很多細小的細節,這些細節太具體而不能全部列出。這個問題真的是基於意見的。 – Philipp

+1

太籠統的問題在這裏得到很好的答案。您應該計算出您的數據結構的細節以及您打算如何/在哪裏(客戶機v服務器)使用它們。有些類型的關係可以在NoSQL數據庫中建模和管理,在其他情況下,遍歷關係的各種方式意味着SQL可能更直接。是的,您也可以將一個平面文件(或平面文件,如'.json' doc)作爲排序記錄,儘管我可能傾向於選擇NoSQL文檔數據庫而不是使用它的文件系統。 –

+0

@菲利普我意識到,三種選擇'可以'儘可能地發揮作用,我可以'使用勺子來塗抹黃油,但我正在尋找有關其他人的經驗和技術方面的技術限制的場景I提出了諸如讀寫性能。服務器負載等 – James

回答

-2

如果要存儲播放器信息,請使用sql。但是,如果你有一個基於連接的系統。正如在某些情況下,只需要在播放器連接時以及連接丟失後存儲信息,您就不需要「保存」;然後將其存儲在內存中。

否則,我會說你應該堅持Sql。數據庫進行了優化,快速,嘗試,測試和真實。你不能用Sql數據庫出錯。

+0

另請參見:http://gamedev.stackexchange.com/ –

2

我的建議是從NoSQL開始。

Flatfile很困難,因爲您需要非常頻繁地讀取和寫入這些數據。每個玩家一個檔案並不是一個可怕的開始 - 對於第一個原型來說可能是可以的 - 但是你會寫很大的數量。文件系統不擅長這一點。在原型階段的一個好處是你可以快速調試 - 只是剔除用戶的當前狀態。使用.json文件或類似的.yaml格式,可以非常迅速地啓動您的程序(並且您可以在原型開始走到一起時轉換爲NoSQL方法)。

SQL不是一個可怕的方法。如果您熟悉這一點,您將最終構建一個真正的模式,並創建各種表格並將用戶數據加入其中。這可以幫助你通過遊戲進行思考,但是我認爲你最終會花費大量時間試圖找出如何規範化數據和編寫連接。由於看起來你對這個問題並不熟悉(因此提出了這個問題),你很可能會犯這種錯誤(並妨礙遊戲的可怕性)和/或花太多時間在遊戲中。

NoSQL - 使用文檔存儲模型 - 就像讀一個用戶對象一樣。您最終會每次都重寫您的用戶對象 - 但這種訪問(鍵值,由用戶ID訪問)是超高效的。你很可能真的很快就會進入原型,並且構建出你的播放機制的重要方面。長期來看,鍵值訪問具有高度的可擴展性。