mysql 函数 库存报表_关于mysql:将库存存储在数据库中的最佳方法:每个项目实例都会获得其清单,或者每个玩家都有一个“库存”字段?...

我正在使用PHP和MySQL制作浏览器MMO。我在两种方法中犹豫不决:

当从怪物/发现的物品中制作/掉落时,物品会在物品表中创建新行,并存储其类型(匕首,药水等),位置(在地砖X:Y上?在玩家Z的广告资源中?),也许还有一两个附加字段。一个项目的清单如下所示:

id=728 ; type=14 ; location="i426" ; special="e8"

(其中" i426"表示"在玩家n°426的库存中"," e8"表示该物品的结界为n°8)。

优点:我可以存储有关每个单独物品的数据-结界,耐久度,以前的拥有者……而且,这些物品可以轻松放置在任何位置;该系统免费提供将物品放入拍卖行的功能-更不用说疯狂的可能性,例如物品内部的物品等。

缺点:整天都有成百上千的玩家掠夺怪物并制作工艺品,这很快就造成了一张巨大的桌子,而且看起来很浪费。我担心这可能会减慢整个游戏的速度(我经常使用很多AJAX伏都教游戏)。

或:当玩家将某物品放入其库存时,该玩家在数据库中的库存字段会更新,并在末尾附加新的物品类型(整数),并使用定界符。典型的库存字段如下所示:"|11|8|27|58|58"

优点:浪费少得多。一个项目实例只是几个数字和一个定界符。

缺点:没有额外的项目数据;每个实例都是相同的。同样,将商品放到磁贴上意味着磁贴需要自己的库存字段-以此类推,以了解商品的每个可能位置。此外,此方法涉及在必须添加/删除项目的任何时候都使用字符串来处理,而不是简单地从表中删除一行。另一件事是,玩家的库存可以存储数量可变的物品,因此此字符串没有可预测的长度。

在上一个项目中,我使用了第二种方法。第一种方法看起来很有趣,但是我不确定它是否会与我们的存储空间和服务器的速度保持一致。 MMO中最常使用哪种方法?完全是另一个吗?我错过了一些利弊吗? (对不起,这个问题有点主观!)

我猜测几乎所有系统都使用与类型1类似的东西,因为类型2是名为" Jaywalking"的反模式。 它源于对交叉路口的恐惧。

玩家库存是否有限? 他们有10个可用插槽吗? 还是受重量限制或类似的限制?

@MarcusAdams-该死的! 我以为我发现了一些聪明的东西。

@MichaelFredrickson-有限制,但没有设定。 他们可以从技能,手袋等改变。

在此开发阶段,我不会太担心存储吞吐量。 提防早期优化。 假设您预期在短时间内会有大量交易,那么您很可能会在内存缓存中执行大多数此类交易,该缓存将根据需要刷新到数据库,以不阻止播放器UI请求。

最好的设计是方法1的一种版本:每个项目都有自己的一行,并且您在其中放置了所有必要的信息。 不必担心优化-当您看到用户如何使用您的系统以及瓶颈在哪里时,您将有时间进行优化。

现在,您要进行设计以便于编程和状态的清晰,明确的描述。 您需要每个项目"类型"的主项目表,在其中保留有关该项目是什么以及如何使用的信息。 然后,在创建(或实例化)该项目时,您在项目表中放置一行并描述该项目实例的详细信息。 移动时,您可以更新位置信息。 这并不是浪费,因为您只在一次正确的位置存储了用于管理商品的信息。

通过在表上放置正确的索引,您将能够轻松,快速地管理数百万个索引。

那么它决定了,那就是我将要使用的东西!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值