In the end I decided to do a heap of tiny transactions so I could break things up.
I don't think web workers help because of the serialization cost but I'd be happy to be proven wrong. I guess the datascript DB could live in the web worker but otherwise it's a large data structure to pass around.