簡體   English   中英

設計數據庫:將用戶統計信息存儲在游戲中(即自有資金)和32位整數溢出

[英]Designing databases: storing user stats in games(i.e. owned money) and 32bit integer overflow

我正在創建一個小型的,基於數據庫的基於瀏覽器的游戲,但我偶然發現了這個問題:我將用戶擁有的錢存儲為32位整數字段(准確地說是兩個字段。一個存儲在玩家手中,另一個存儲在玩家手中)銀行)。 眾所周知,可以存儲在32位中的最大值是2 ^ 32-1。

我絕對確定,95%的玩家將無法達到上限-但另一方面(在今天進行了一些計算之后),好的玩家將能夠積聚這么多。

考慮到這一點,我提出了以下想法:

  • 以64位存儲金錢,這會使每條記錄的空間增加一倍。
  • 將錢存儲為字符串,並在運行時很長時間內進行轉換。
  • 改變游戲機制,使玩家無法獲得那么多財富。

我知道可以達到的上限對於某些玩家而言是相當有限的,因此對我來說,第三個選擇比擬議中的選擇更糟。

還有其他方法可以解決此類問題嗎? 你會去哪一個?

以現實世界為例,為什么不使用不同類型的硬幣,例如一百萬單位貨幣的列。

更改為較大的數據類型可能是最簡單的解決方案,除非您的游戲規模很大,否則磁盤空間/內存的考慮並不重要。 有5,000個用戶在玩您的游戲嗎? 從32位更改為64位將額外消耗大約20k。 這還不足以使您失去睡眠。

最好的答案可能來自熟悉銀行如何處理此類情況的人,盡管他們的要求可能比您需要的要復雜得多。

取決於您同時擁有的播放器數量,內存空間應該不是問題,但是以字符串形式存儲肯定會占用更多磁盤空間。

但是認真的說是4,294,967,296盧比/西蒙/弗隆嗎? 他們是誰? 辛·蓋茨?

為什么不以Money數據類型的方式存儲貨幣呢? 當然,這是假定您正在使用SQL Server。 money數據類型將沒有此限制,並且不會受到四舍五入問題的影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM