【问题标题】:Most efficient way to write 1000+ records to a database table将 1000 多条记录写入数据库表的最有效方法
【发布时间】:2021-11-15 03:51:23
【问题描述】:

我们有一个产品需要在我们公司的员工批准后将 1000 多条记录写入数据库表。一次写入这么多记录的传统方式可能是循环或 MySQL 直接批量插入到表中。

除此之外,我还有几个表正在由 CRON 作业检查并一次更新另一个包含 2000 条记录的表。

我想知道是否应该继续使用 MySQL 批量插入(这会影响性能)还是使用 Kafka 之类的事件处理工具?

【问题讨论】:

  • 一千条记录不应该花那么长时间。您是否衡量对性能的影响?
  • 我没有测试性能比较,因为我们没有足够的资源。现在的问题是,将所有数据写入一张表后,随着时间的推移,读取也会消耗时间。想知道我是否应该坚持使用 MySQL 或使用 nosql,因为该表将用于读取数据。你怎么看?
  • 我认为您正在进行不必要的优化。如果索引正确并在正确的硬件上,MySQL 可以处理数十亿行。我对您没有资源来运行一次或两次批量插入以查看需要多长时间的想法感到有些困惑 - 这肯定比采用 NoSQL 或添加 Kafka 需要更少的资源?!
  • 没错。我的意思是我们没有足够的资源来对不同的数据写入方式进行总体性能比较,包括像 kafka 这样的东西。因为无论我做什么,都要卖几年。无论哪种方式,我都会检查批量插入的时间。

标签: mysql database database-performance complex-event-processing


【解决方案1】:

我感觉有一个技巧可以比LOAD DATA 加快速度,这可能是最快的......

“一旦被...批准”——这是否意味着您将数据放在某个地方,并且您想“按下按钮”将它们添加到特定表中?如果是这样,...

将它们预加载到另一个表中。然后让这个查询准备好运行:

INSERT INTO real_table
    SELECT * FROM pending_table;

但是...列是否正确排列?可以有双键吗?如果是这样,你需要更新一些东西吗?请参阅 IODKU。等等。

我建议您在这一天到来之前测试该过程。如果失败了可能会很尴尬。

【讨论】:

  • 正确。数据将放在一张桌子上。每周我们的一名员工将批准这些数据。然后应该将其推送到这个新表。新表不是初始表的精确副本。它更像是一个审计表,列数较少,但列名不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多