使用MariaDB进行水线/ Sails.js大量插入和删除

时间:2015-09-04 01:21:51

标签: node.js asynchronous sails.js mariadb waterline

在我的Sails.js应用程序中,我有一个表auctions,其中包含从Battle.net API开始的最后一次转储时收到的数据。

因此,每次realm的新转储到达时,我都需要清除与此realm关联的所有行,然后插入较新的行。

我可以这样做:

  • 一次性(使用destroy()发送单个查询,另一个使用转储本身);
  • 或小批量(按item分组,然后destroy()使用realm和`项目的所有记录,然后插入新的记录。

我目前正在使用async.forEachOfSeries,如上所述的小批量,但使用当前负载(每次运行作业时插入45k记录),这是无法忍受的缓慢,并且没有考虑到如果我需要更新item工具提示记录。 如果我试图一次性插入它们,Node.js会开始分页并挂起,或者MariaDB比Waterline允许的时间更长。

我怎样才能更可靠地处理这个问题? async.queueasync.cargo会有效吗?

1 个答案:

答案 0 :(得分:1)

您要替换一个表中的所有行吗?这样做:

  1. CREATE TABLE new LIKE real;
  2. 使用新数据加载new
  3. RENAME TABLE real TO old, new TO real;
  4. DROP TABLE old;
  5. 它实现了零停机时间的交换。您无需担心LOAD的效率(步骤2)。

    (我作为练习留给读者将这个MySQL / MariaDB代码翻译成sails.js或其他。)