【问题标题】:thousands of records to be inserted into a DB将数千条记录插入数据库
【发布时间】:2019-10-18 13:00:26
【问题描述】:

我的服务器接收数据并应该插入或更新现有的数据库表。我的问题是数据量巨大,接收到数千条记录,并且一条一条地写入可能需要数小时。有没有办法优化写作?我还应该说,每次写入之前都有一个查询,以检查记录是否已经在数据库中。

目前,我使用带有 TTL 的缓存来跳过重复记录。我还使用信号量来防止一次过多的数据库写入请求(可能会引发超时错误)。

【问题讨论】:

  • 这完全取决于您使用的数据库。大多数提供了一种批量插入/更新插入条目的方法。请标记您正在使用的数据库。
  • MySQL,添加了标签

标签: mysql node.js database optimization


【解决方案1】:
  • 收集一百行,构建一个多行INSERT 并执行它。 (10 倍加速)
  • 将 100 个 1 行 INSERTs 放入 BEGIN..COMMIT。 (10 倍加速)
  • 检查您没有任何未使用的索引。 (避免长期陷入困境)

提供SHOW CREATE TABLE;我可能有更多的建议。

duplicate 记录是什么意思?所有列都一样吗?只是一些UNIQUE 列是一样的吗?这里可能有一些技巧可以提供帮助。

即使没有上述建议,一对一插入的 1000 行也应该不超过 10 秒。这个过程还涉及其他一些事情。请详细说明。

【讨论】:

  • 重复记录是指所有字段都是相等的。也许不同的数据库更合适还是非 sql?
  • 只有一列(或少量列)确定相等性时,UNIQUE 索引是可行的方法。不要在没有首先考虑如何提取数据的情况下切换到 nosql。
猜你喜欢
  • 2016-05-23
  • 2014-05-25
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
相关资源
最近更新 更多