[英]Designing databases: storing user stats in games(i.e. owned money) and 32bit integer overflow
我正在创建一个小型的,基于数据库的基于浏览器的游戏,但我偶然发现了这个问题:我将用户拥有的钱存储为32位整数字段(准确地说是两个字段。一个存储在玩家手中,另一个存储在玩家手中)银行)。 众所周知,可以存储在32位中的最大值是2 ^ 32-1。
我绝对确定,95%的玩家将无法达到上限-但另一方面(在今天进行了一些计算之后),好的玩家将能够积聚这么多。
考虑到这一点,我提出了以下想法:
我知道可以达到的上限对于某些玩家而言是相当有限的,因此对我来说,第三个选择比拟议中的选择更糟。
还有其他方法可以解决此类问题吗? 你会去哪一个?
以现实世界为例,为什么不使用不同类型的硬币,例如一百万单位货币的列。
更改为较大的数据类型可能是最简单的解决方案,除非您的游戏规模很大,否则磁盘空间/内存的考虑并不重要。 有5,000个用户在玩您的游戏吗? 从32位更改为64位将额外消耗大约20k。 这还不足以使您失去睡眠。
最好的答案可能来自熟悉银行如何处理此类情况的人,尽管他们的要求可能比您需要的要复杂得多。
取决于您同时拥有的播放器数量,内存空间应该不是问题,但是以字符串形式存储肯定会占用更多磁盘空间。
但是认真的说是4,294,967,296卢比/西蒙/弗隆吗? 他们是谁? 辛·盖茨?
为什么不以Money数据类型的方式存储货币呢? 当然,这是假定您正在使用SQL Server。 money数据类型将没有此限制,并且不会受到四舍五入问题的影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.