MySQL或JSON用于数据检索

时间:2019-12-20 20:35:22

标签: php mysql json database performance

所以,我有情况,需要第二意见。我有数据库,并且可以很好地使用所有外键,索引和内容,但是当我到达一定数量的访问者时,大约有700-800名并发访问者,我的服务器遇到瓶颈,并显示“服务暂时不可用”。所以,我有一个主意,如果我从JSON而不是数据库中提取数据该怎么办。我的意思是,我仍然会更新数据库,但是在每次更新时,我都会重新生成JSON文件并从中提取数据以显示在主页上。这样,我就不会再费劲CPU了,就能在用户端进行某种类型的缓存。

2 个答案:

答案 0 :(得分:1)

您所描述的是缓存。

是的,这是一种常见的优化方法,可以避免在数据库中增加查询负载。

这个想法是,您存储从数据库中获取的数据副本,并以某种形式保存它,以便在应用程序端快速访问。您可以将其存储在RAM或JSON文件中。有些人将Memcached或Redis内存数据库作为共享资源进行操作,因此您的应用程序可以运行许多进程或线程来访问RAM中的同一数据副本。

通常,您的应用每次更新数据时都会多次读取某些给定数据。读写比率越大,就减轻数据库负载而言节省的费用就越多。

但是,要使高速缓存中的数据与数据库中的最新更改保持同步可能很棘手。换句话说,所有缓存副本如何知道何时应从数据库中重新获取数据?

有一个old joke

  

计算机科学中只有两件事:缓存失效和命名。

     

—菲尔·卡尔顿

答案 1 :(得分:0)

因此,再经过几天的探索并试图找到正确的答案,这就是我所做的。我决定创建另一个表(而不是JSON),并将所有本应放入JSON文件中的数据放入表中。

为什么?

第一个原因是MySQL具有在更新表时锁定表的能力,而JSON则没有。

第二个是我将从几十个查询降级为一个最简单的查询:SELECT * FROM table。

第三点是我可以更好地控制内容。

第四,当我在寻找答案时,我发现如果许多并发连接正在请求相同的JSON,那么某些人就会遇到JSON可用性问题,而我永远不会遇到可用性问题。