所以,我有情况,需要第二意见。我有数据库,并且可以很好地使用所有外键,索引和内容,但是当我到达一定数量的访问者时,大约有700-800名并发访问者,我的服务器遇到瓶颈,并显示“服务暂时不可用”。所以,我有一个主意,如果我从JSON而不是数据库中提取数据该怎么办。我的意思是,我仍然会更新数据库,但是在每次更新时,我都会重新生成JSON文件并从中提取数据以显示在主页上。这样,我就不会再费劲CPU了,就能在用户端进行某种类型的缓存。
答案 0 :(得分:1)
您所描述的是缓存。
是的,这是一种常见的优化方法,可以避免在数据库中增加查询负载。
这个想法是,您存储从数据库中获取的数据副本,并以某种形式保存它,以便在应用程序端快速访问。您可以将其存储在RAM或JSON文件中。有些人将Memcached或Redis内存数据库作为共享资源进行操作,因此您的应用程序可以运行许多进程或线程来访问RAM中的同一数据副本。
通常,您的应用每次更新数据时都会多次读取某些给定数据。读写比率越大,就减轻数据库负载而言节省的费用就越多。
但是,要使高速缓存中的数据与数据库中的最新更改保持同步可能很棘手。换句话说,所有缓存副本如何知道何时应从数据库中重新获取数据?
有一个old joke:
计算机科学中只有两件事:缓存失效和命名。
—菲尔·卡尔顿
答案 1 :(得分:0)
因此,再经过几天的探索并试图找到正确的答案,这就是我所做的。我决定创建另一个表(而不是JSON),并将所有本应放入JSON文件中的数据放入表中。
为什么?
第一个原因是MySQL具有在更新表时锁定表的能力,而JSON则没有。
第二个是我将从几十个查询降级为一个最简单的查询:SELECT * FROM table。
第三点是我可以更好地控制内容。
第四,当我在寻找答案时,我发现如果许多并发连接正在请求相同的JSON,那么某些人就会遇到JSON可用性问题,而我永远不会遇到可用性问题。