I am not sure how you are doing the rate limiting, but as I said, that can sometimes just buffer data in memory just the same.
Here is a slow loop that @torchard put together for another reason that I leveraged for the MySQL insert.
This is what the the flow looks like.
You will need to tweak it to suit your flow, but it will âslowlyâ update what ever you point it at.
Here is the flow to import.
[{"id":"2dc27b60.e8473c","type":"function","z":"b42e0f8.222b5f","name":"Slow loop","func":"function sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n// set the number of times you want to send the payload.\n// so 0 to 9999 for 1000 records for example.\n\nasync function demo() {\n for (i = 1; i < 16; i++) {\n msg.payload = i;\n node.send(msg);\n await sleep(500); //set the time between injects (in miliseconds)\n }\n}\ndemo();\n//return { payload : \"end of line\" };\nreturn { payload};","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1260,"y":500,"wires":[["94aa5870.4b4c7","5ffe5ea4.b90598"]]},{"id":"71a07e7f.2d6048","type":"inject","z":"b42e0f8.222b5f","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1070,"y":500,"wires":[["2dc27b60.e8473c"]]},{"id":"94aa5870.4b4c7","type":"debug","z":"b42e0f8.222b5f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1450,"y":500,"wires":[]},{"id":"5ffe5ea4.b90598","type":"function","z":"b42e0f8.222b5f","name":"insert","func":"msg.topic = \"INSERT INTO aircraft (airframe) VALUES('\"+msg.payload+\"')\";\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1410,"y":580,"wires":[[]]}]