【问题标题】:Load big amount of data - Allowed memory size exhausted加载大量数据 - 允许的内存大小已用尽
【发布时间】:2020-03-09 02:44:27
【问题描述】:

我有一个连接到 Rabbit 的 JAVA Spring Boot 应用程序(我称之为 A1)。 A1 接收数据并将其保存到数据库(MySql)(我将调用数据库 DB1)。您可以将这些数据想象为具有适当市场和结果的足球比赛。我们正在通过 A1 应用程序接收未来 10 天的数据,并且该数据存储在数据库中。

还有一点值得强调的是,每场足球比赛都有 4 个盘口,每个盘口有 7 个结果。

我将解释 DB1 的外观。除了其他表格之外,还有 3 个表格(比赛、市场、结果)值得一提。这些表格在方式上是相关的:比赛 1 .....* 市场市场 1 ..... * 结果 通过 A1 接收的数据不断更新(从当前时刻加上 2 小时,每秒钟都会收到一些足球赛事的更新)。 还有另一个 PHP Symfony 应用程序(我称之为 S1)。此应用程序用作 REST API。

还有一个前端应用程序(我称之为 F1)通过 HTTP 与 S1 通信,以便从数据库中检索数据。 F1 应用程序正在向 S1 发送 HTTP 请求以检索此数据(与市场和结果匹配),但日期时间范围是从当前时刻加上 7 天(业务要求)。

当向 S1 发送 HTTP 请求时发生错误,因为有超过 10 000 场足球比赛以及投注和结果。

PHP 致命错误:允许的内存大小为 134217728 字节已用尽(尝试分配 20480 字节)。

我正在考虑两种选择来解决这个问题,如果我的选择都不够好,如果您能建议我解决我的问题,我将不胜感激。

  1. 选项 - F1 每天迭代并向 S1 异步发送 7 个 HTTP 请求,以便检索所有 7 天的数据。
  2. 选项 - F1 向 S1 发送 HTTP 请求。 S1 仅返回今天的数据,接下来的 6 天通过套接字每天迭代发送,使用https://pusher.com/ 或类似的东西。

还有一点需要强调的是,我们统计的这个 HTTP 的数量是每秒两个,而且它趋于增长。

【问题讨论】:

    标签: performance caching architecture scaling software-design


    【解决方案1】:

    10K 匹配会变成 134 MB 的数据?您为每条记录使用了超过 13K...尝试使您的对象分层,让匹配有赌注而不是单行对象。

    如果不是,那么您在处理我们无法远程诊断的数据时效率低下。

    如果您在服务器端进行更多处理而不是通过网络发送原始数据,您会做得更好。您在 S1内部回答的问题越多,而不是向客户端发送数据,您需要发送的数据就越少。

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 2014-09-05
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多