☒ I had originally implemented this in an application and ended up disliking it. It was on a table with a potential of several billion records. I ended up ditching this effort as it was cumbersome to work with at times. I haven't looked back since. I ended up going with an unsigned BIGINT which can go up to 18,446,744,073,709,551,615. This was good enough for my purposes. I think that I would revisit this if I had a situation where concurrency was a major concern and duplicate IDs could be possible.
☒ ooo that could be tricky. You could do an in app or email notification whenever it finishes. On this site, I have a slack notification which lets me know when it's finished. You may look into something like this https://superuser.com/a/1460400/86978 and then implement it with a progress bar ui like in this episode https://www.driftingruby.com/episodes/realtime-client-updates-from-background-jobs-with-stimulus