使用MariaDB批量插入和删除Waterline / Sails.js

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

因此,每当一个realm的新的转储到达时,我需要清除所有与这个realm相关的行,然后插入新的领域。

我可以这样做:

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

我目前正在使用async.forEachOfSeries来完成上述的小批量操作,但是当前的负载(每次运行作业时都会插入45k条logging),速度太慢了,这并不考虑是否需要更新item工具提示logging。 如果我试图一次插入它们,Node.js会启动分页并挂起,或者MariaDB比Waterline允许的时间要长。

我怎样才能更加可扩展地解决这个问题? 会async.queueasync.cargo工作?

你正在replace一个表中的所有行? 这样做:

  1. CREATE TABLE new LIKE real;
  2. 加载new的数据
  3. RENAME TABLE real TO old, new TO real;
  4. DROP TABLE old;

它实现了零停机时间的交换。 您不必担心LOAD的效率(第2步)。

(我把这个练习留给读者把这个MySQL / MariaDB代码翻译成sails.js或者其他的东西)