Php 缓存对MySQL的API响应——这是一个好的实践吗?

Php 缓存对MySQL的API响应——这是一个好的实践吗?,php,mysql,caching,Php,Mysql,Caching,我使用的API对请求有限制。API响应是XML格式的,通常大小约为8KB 可能会有超过200万个请求及其相应的答案。因此,当我在MySQL中获得大量复制到记录的XML响应时,如果我查询它,它的响应速度是否足够快? 表结构: id int PK自动递增 请求参数文本唯一 答复文本 我找到了MySQL查询缓存,但我认为它只适用于大量请求。另一个可能会慢下来? 我也发现了Varnish,但在我看来它更像是一个HTML/代码缓存。我假设: 您只需要从给定的请求\参数(…其中请求\参数='some

我使用的API对请求有限制。API响应是XML格式的,通常大小约为8KB

可能会有超过200万个请求及其相应的答案。因此,当我在MySQL中获得大量复制到记录的XML响应时,如果我查询它,它的响应速度是否足够快?

表结构:

  • id int PK自动递增
  • 请求参数文本唯一
  • 答复文本
我找到了MySQL查询缓存,但我认为它只适用于大量请求。另一个可能会慢下来? 我也发现了Varnish,但在我看来它更像是一个HTML/代码缓存。

我假设:

  • 您只需要从给定的
    请求\参数
    …其中请求\参数='some string'
    )中获取
    响应
  • 请求\u参数不太长(少于1000个字符)
我建议:

  • 删除您的ID列。尽管有些人建议始终使用整数作为主键,但我知道您并不是在尝试构建关系数据库。你只需要一张桌子来储存

  • request\u参数
    列类型更改为
    VARCHAR(x)
    ,“x”是参数字符串的最大预期大小

  • request_参数
    设为主键

  • 按照PLB的建议,存储XML响应的序列化版本


  • 200万行这样的数据需要几Gb的空间,再加上一些索引空间。如果您的系统上有大量可用内存,并且如果您可以在重新启动MySQL时丢失所有数据,那么您可能希望尝试使用内存表。

    “如果我查询它,它的响应速度是否足够快”如果我查看它,它会崩溃吗?用一些随机的8KB文本和一些参数填充数据库是很容易实现的,答案将比我们任何人都能猜到的更准确。为什么不简单地从xml获取数组(我认为您已经做到了),序列化该数组并保存在服务器文件系统上的文件中呢。这是一种肮脏的方式,但速度非常快。您也可以使用第三方缓存。使用memcached,或者如果使用MySQL,则使用内存table@DelphiLynx除了使缓存的数据无效之外,我看不到任何问题:记住实现一个方法来删除记录,因为缓存的API响应可能会过时。@DelphiLynx不,您理解错了。我不知道脚本中的xml会发生什么变化。如果在脚本中使用一个来使用其内容,则必须将一个转换为数组。因此,如果您序列化此数组并将其另存为
    .txt
    文件,并将其读回而不是再次尝试获取xml,则会更快。谢谢,这是对我问题的完整回答!