我的頭正在閱讀有關數據庫的爆炸式增長。我明白你選擇哪一個取決於具體的用例。 所以這裏是我的:我的具體使用案例的哪個數據庫
- 我有一個web應用程序。一個遊戲。
- 它是基於水平的,你只能前進不回來。但是你可以繼續玩每個關卡。例如。你完成Level2然後玩Level3。然後再次啓動Level3並將其保存爲Level3b。您現在可以繼續使用Level3和Level3b。
- 只有一個級別可以隨時播放。
- 服務器上存儲了三個數據陣列:'progress','choices'和'vars'
- 當您播放關卡時會對其進行修改,然後將其放入冷藏庫,以便您可以從其開始。
的currenty MySQL的設置是這樣的:
- 甲表「保存」保存每個遊戲存檔,重要的是saveID和它所屬的用戶ID的元數據。
- 每個數據數組都有一個對應的表。
如果玩家做出的選擇,所述插入件看起來像這樣:
INSERT INTO choices VALUES saveid=:saveid, choice=:choice
因此該陣列可以通過執行一個
SELECT * FROM choices WHERE saveid=:saveid
- 當電平結束,則數據陣列來重構通過序列化並將它們存儲在'saving'表中,該表中有3列專用於冷藏。
- 它們的值從其他三個表中清除。
- 如果玩家從Level3b開始Level4,則序列化數組將從'saved'表中取出,並反序列化並放回到它們各自的表中,儘管使用了Level4的新saveID。
我希望這有點可以理解。 我估計:
- 將會有更多的寫入速度比讀取
- 我不需要一致性,如果我理解的正確,因爲玩家永遠只能操縱自己的數據
- 我不我想我會做任何JOINS,因爲每個表都需要單獨讀取以填充其各自的數據數組
- 所以我不認爲我會需要很多關係數據庫的方式
它應該是真正輕量級的DB大部分w ay,因爲插頁很小
數據存儲必須可靠!我不認爲如果我們經常開始失去存儲遊戲,玩家會堅持我們。儘管我認爲Redis每秒鐘刷新到磁盤就足夠了,因爲我們並沒有在這裏處理關鍵任務。如果遊戲忘記了最後一個或兩個玩家的遊戲,那麼不要忘記整個遊戲。
你可以在我的使用案例的DB上建議我嗎? 我已經開始使用MySQL,現在我已經閱讀了關於CouchDB,MongoDB,Riak,Cassandra的內容。我認爲Redis不在圖片中,因爲一旦數據集越過你的RAM,那個人似乎會嚴重退化。但我對任何事情都很開放。 我也開放給人們說:堅持MySQL或轉到PostgreSQL。
而且我也會接受對我設置存儲方式的批評。如果你說:選擇Cassandra並將其存儲爲這樣,我會聽。
這是一個完整的檢查,因爲現在是我最後一次能夠在遊戲上線之前更改數據庫,我想要做的最後一件事是在3個月內換掉數據庫,因爲它縮小嚴重。
哦,是的,應用程序是用JavaScript編寫的,與服務器的通信是通過PHP。
您提到的這些數組:您是否曾經需要訪問其各個元素,或者始終將它們作爲數據庫級別的不可分割單元進行存儲(並將其讀取)? – 2013-03-24 19:40:59
Read在數據庫級別始終是一個不可分割的單元。寫一次一個。 – Marcos 2013-03-24 22:16:08