为越来越多的数据设计数据库(30,000 多个项目,每个项目每天有 48 个新更新)

Database design for increasingly large amounts of data (30,000+ items, each getting 48 new updates per day)

我想显示游戏中商品的历史(和当前)数据。数据很容易获得,我只是想确定存储该数据以提高性能的最佳方式。

基本上我要存储:

...每天48次,每条,上万条

我没有存储这种不断增长的数据的经验。我正在考虑为每个项目(PHP 和 MySQL)创建一个序列化数组,但这似乎是一个糟糕的解决方案。

你会如何构建这个数据库?

您还需要时间戳和物品编号,因为它是一款游戏,使用简单的整数 - 时间戳除以 48 得到日期和时间,价格以美分表示(不要使用浮点数)。

为了减少数据的绝对数量,只记录 changes - 任何特定项目的数据可能一周都不会改变,所以为什么要创建将近 350 条记录? ?

不太确定您的游戏机制是什么(显然),但历史数据是否重要?您能否在 "live" table 上继续说上周的价值并将历史数据移动到历史 table?也许 "current" table 只包含当前数据,每当数据发生变化时,将该项目的旧数据移动到历史记录 table 并创建新的 "current" 记录"timestamp" 个 "now"。


记录每个文件的结构

  • 项目#
  • 时间戳
  • Recnum(Autoinc)
  • 售价
  • 买入价
  • 有效数量
  • 订购数量

粗体中的主键 二级键:recnum,item#(可能)

Recnum 在当前 table 上是 autoinc,在历史上是整数。

当一条新记录添加到当前 table 时,它会获取 (nextnum) 的 recnum 和 (now) 的日期戳,并且 item# 的当前记录移至历史记录 table完全一样。通过这种方式,如果您存储最高的 recnum,您可以控制客户端计算机上保存的历史 table(s) 的加载 - 所有更改 since 具有更高的 recnum。通过将 item#s-of-interest 添加到密钥中,您可以限制需要传输的数据量 - 如果任何特定玩家(或一百或一千)只感兴趣十个项目,那么您不需要将其余部分的数据传输给他们 - 直到他们对新项目感兴趣,此时您可以明智地使用索引单独传输该项目的数据。