2017-07-10 81 views
0

要嘗試和簡化,讓我看看這是否使它更容易。我創建了3個我想在MySQL中存儲的狀態的虛構JSON表示。我正在尋找一些關於存儲它們的最佳方式的建議。特別是「狀態」數據是我不太確定如何處理的部分。將數組類型數據存儲在MYSQL表中

如果有幫助,我覺得每輪創建一個特定的數據庫表。

用戶狀態爲第1輪

{ 
    "user": 1, 
    "round": 0, 
    "move": 0, 
    "points": 10, 
    "state": [ 
     100, 200, 300, 10, 50 
    ] 
} 

用戶狀態爲第2輪

{ 
    "user": 1, 
    "round": 1, 
    "move": 3, 
    "points": 150, 
    "state": [ 
     10, 50, 800 
    ] 
} 

用戶狀態爲第3輪

{ 
    "user": 1, 
    "round": 2, 
    "move": 7, 
    "points": 1175, 
    "state": [ 
     [ 100, 200, 300 ], 
     [ 40, 10, 20 ], 
     [ 800, 1000, 50, 90, 20 ] 
    ] 
} 

原帖下面

我目前正在使用MySQL的遊戲。遊戲在回合中運行,其中一輪代表一組動作。可能的移動可以由一維數組或多維數組來表示。例如:

[ 100, 200, 300, 50, 10 ] 

[ 
    [ 100, 200, 300, 50, 10 ], 
    [ 20, 500, 10, 5, 800 ], 
    [ 5, 1, 4 ] 
] 

值將始終爲整數。正如人們所看到的,在多維情況下,每行可能不是相同的長度。在一維情況下,長度可以是任意的。但是,對於給定的一輪,陣列長度是固定的。每輪定義長度的方差以及是否是一維或多維。

人們可以想到由子回合組成的回合的多維情況。一旦一個小回合通過,它將進入下一個子回合,直到所有子回合完成。

玩家回合可以退出,但狀態將被保存。因此玩家可以有多次「保存」回合。

由於玩家可以在不同的設備上玩遊戲,因此我不想在設備上存儲回合狀態。相反,我想按需爲國家服務。目前,客戶端向服務器提交一個移動,服務器將以一個更新的狀態進行迴應。但現在,沒有持久性,所以如果服務器宕機,然後狀態丟失(仍在開發中,所以現在不是問題)

我正在尋找方法來保存與MySQL的狀態。

我想到的一種方法是每輪都有一個數據庫表,但這並不能完全解決一維或多維數組如何存儲。在這裏我可以想象user_id將是主鍵。

另一個可以處理存儲任意數據的數據庫表。在這裏我可以想象主鍵是user_id和round_id的組合。

當然有一些附加狀態下的表將需要存儲等的移動次數,在圓獲得的點等

爲了表示「陣列數據」將JSON數據類型或編碼所述數據在一個字符串或二進制blob是最好的?我更喜歡一些不會在解碼時花費大量額外時間的東西(例如,某些JSON編碼/解碼器不那麼快)。試圖確定一些很好的選擇來嘗試。

服務器代碼是C++。

+0

我還沒有讀過這個問題。太長。你能把它減少到問題的核心嗎? –

+0

我已經更新了這個問題......希望更好? –

+0

我已經看過這個https://stackoverflow.com/questions/9299658/best-way-to-store-an-array-in-mysql-database它有點老,所以看看是否有任何其他方法 –

回答

-1

你可以利用MySQL 5.7的JSON數據類型?

+1

那不是一個答案 –