【问题标题】:MySQL or JSON for data retrieval用于数据检索的 MySQL 或 JSON
【发布时间】:2020-04-13 07:27:24
【问题描述】:

所以,我有情况,我需要第二意见。我有数据库,它可以很好地处理所有外键、索引和东西,但是当我达到一定数量的访问者时,大约 700-800 个同时访问者,我的服务器遇到瓶颈并显示“服务暂时不可用”。所以,我有想法,如果我从 JSON 而不是数据库中提取数据会怎样。我的意思是,我仍然会更新数据库,但在每次更新时,我都会重新生成 JSON 文件并从中提取数据以显示在我的主页上。这样我就不会把我的 CPU 压得太紧,而且我可以在用户端制作某种缓存。

【问题讨论】:

  • PHP - MySQL 之间的每个连接消耗 2+ MB 的 RAM,您的服务器内存是多少?对我来说,对 JSON 的读写比数据库慢。
  • 我认为是 128GB。这是 Hetzners 托管服务器 MX152 SSD。
  • 打开慢日志,看看它捕获了什么。 mysql.rjweb.org/doc.php/mysql_analysis

标签: php mysql json database performance


【解决方案1】:

您所描述的是缓存。

是的,这是一种常见的优化,可以避免查询负载使您的数据库负担过重。

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

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

然而,让缓存中的数据与数据库中的最新更改保持同步可能会很棘手。换句话说,所有的缓存副本如何知道它们何时应该从数据库中重新获取数据?

关于这个有一个old joke

计算机科学中只有两个难点:缓存失效和命名。

——菲尔·卡尔顿

【讨论】:

  • 我花了几天时间处理我的这个问题。 JSON 的更新将由页面管理员触发。这意味着,每次他们将数据保存到数据库时,如果数据发生更改,它将更新 JSON。将存储在 JSON 中的数据是:id、title、slug、description、image。它将包含前面提到的 60 或 70 个元素的数据。我不能使用 memcached,因为它可以按时工作,有时,就我而言,1 分钟太长了。我担心 JSON 会减慢获取数据的过程吗?
  • 我对您的应用程序或服务器一无所知,所以我无法预测。您可以使用这两种解决方案来测试性能。这就是成为一名软件工程师的意义!如果答案很简单,那么你就只是个打字员。
【解决方案2】:

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

为什么?

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

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

第三,我可以通过这种方式更好地控制内容。

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

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 2013-10-02
    • 2018-09-14
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    相关资源
    最近更新 更多