【问题标题】:How to transfer mysql's 1 million records from one machine to another without affecting performance如何在不影响性能的情况下将mysql的100万条记录从一台机器转移到另一台机器
【发布时间】:2015-12-25 20:03:43
【问题描述】:

我正在为不同的客户生成独特的令牌。对于每个客户请求,我必须生成 100 万个唯一令牌。生成唯一令牌需要很长时间,因此我使用延迟作业 gem 在后台执行此活动。

Flow of my application is as below
1) Client machine sends an api request to remote server to generate 1 million unique tokens.Remote machine sends response back to client machine with status "pending" and start generating 1 million unqiue tokens. 

2)After generating 1 million unique token for a request remote server sends these unique tokens back to the client machine using an API call. 

3)client machine stores these unique tokens in his database using delayed job.

但问题是,每当我同时遇到超过 5 个请求时,mysql 就会关闭连接,并出现错误“mysql 服务器已消失:mysql 关闭连接问题”,因此无法生成唯一令牌。

所以我想知道如何在不影响性能的情况下以有效的方式从远程服务器到客户端机器生成和传输这个唯一令牌(100 万条记录)。

谢谢,

【问题讨论】:

  • 1.当您在远程服务器上生成令牌时,它们如何存储在内存或某些数据库中? 2. 当您向客户发送 100 万条记录时,您是一次性发送所有记录还是分批发送?
  • 1.它们存储在数据库中。 2)我一次发送所有这些..令牌需要存储在远程机器和客户端机器上..

标签: mysql ruby-on-rails


【解决方案1】:

我认为一次发送所有记录不是一个好主意。如果客户端和服务器之间的连接丢失怎么办?需要重新开始数据传输吗?

我认为您应该构建一个 API 调用,以批量提供唯一令牌,即除了限制和偏移。

  1. 在远程服务器上成功生成 100 万个令牌后,只需向客户端发送成功响应。
  2. 客户端可以通过提供限制和偏移量来批量请求数据/令牌。它还将帮助您跟踪客户端加载了多少令牌以及剩余多少。
  3. 重复步骤 2,直到所有内容都加载到客户端。如果失败,您只能再次请求该数据块/批次。

关于mysql问题:

  1. 尝试使用批量插入来加载令牌,这也是批量插入的首选。 INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

  2. 尝试调整我的 sql 配置以提高性能。 This 值得一看。

如果这有帮助,请告诉我。谢谢!

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多