chaingraph
chaingraph copied to clipboard
feat(DB): Chunk SQL Inserts
THIS IS A DRAFT. DO NOT MERGE.
Currently, during initial sync, when a block is added to the database, all transactions are also inserted in a single query. This leads to very high memory usage on the Postgres end for larger blocks.
This PR allows chunking of the SQL INSERT queries into smaller queries so that Chaingraph can be synced on memory-constrained devices/servers. This can be done by setting the CHAINGRAPH_POSTGRES_INSERT_CHUNK_SIZE_MB env var (on an 8GB device, I used 1MB successfully). On this PR, it defaults to 32MB - but probably should be made optional in future.
NOTE: This HAS NOT been properly tested. While syncing appears to have worked for me, I have not validated that all data has been inserted correctly. I'm putting this PR here now in case someone else is trying to do similar and is bumping into memory issues (and wants to take the gamble in trying this PR). Though I intend to complete this PR eventually, if someone else wants to take over, please do!