使用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.queue
或async.cargo
工作?
你正在replace一个表中的所有行? 这样做:
-
CREATE TABLE new LIKE real;
- 加载
new
的数据 -
RENAME TABLE real TO old, new TO real;
-
DROP TABLE old;
它实现了零停机时间的交换。 您不必担心LOAD的效率(第2步)。
(我把这个练习留给读者把这个MySQL / MariaDB代码翻译成sails.js或者其他的东西)