I read somewhere that too many addresses gum up the wallet. I definitely don't want to see performance issues on the hot wallet down the road.
Is this incorrect?
Not really. It doesn't matter if it's 10 transactions to 1 deposit address or 1 transaction each to 10 deposit addresses - it's still 10 transactions stored in the local wallet. Having a lot of addresses / accounts don't impact performance much.
It's not just live performance I'm worried about. Everything gets increasingly harder the larger the wallet.dat gets. Backups take longer. Backups take more space. Bitcoind restarts take longer. etc.
Also, if (just guessing) a transaction is 0.5 K, and an address key pair is 1K, then:
10 transactions to 1 deposit address: 6 kb
10 transactions to 10 deposit addresses: 15 kb
The site has only been up 3 months and without having an address per deposit the wallet.dat is almost 30M. Sounds like it would be more like 70M going with a separate address per deposit. Gox must have a massive wallet... or maybe they have a custom bitcoind that uses a SQL backend with sharding.
I did a quick test run, just for fun. Here's a wallet.dat with just one or two addresses and a few transactions:
92K 2013-02-28 07:54 wallet.dat
Here's the same wallet.dat after doing getnewaddress 1000 times: (for i in `seq 1 1000`; do ./bitcoind getnewaddress; done)
548K 2013-02-28 08:00 wallet.dat
So every 2000 deposits would be ~1M to the wallet. I know that doesn't seem like much but it quickly multiplies out when you consider that I back up the wallet at fairly short regular intervals. It quickly becomes a storage nightmare.
I'm fairly certain now that I'd need to roll out a custom bitcoind with an alternate "wallet" database backend before I could comfortably support this long-term.
Anyone with insider info at Gox about how they do it?