To avoid having to repeatedly scan the entire blockchain, you'd probably be better off scanning it once and building a database table with the complete UTXO set. Then you'd want to use blocknotify to update your UTXO table everytime a new block is created. That way you could just query your UTXO table to find address balances.
Ye putting here just I hope more people could see this quesion.
This is a good way. Thank you. But would like to hear some more solutions.
Thanks~
J
If you have some familiarity with NodeJS, check https://github.com/bitpay/insight It will take time the first time (as it builds indexes) but after that you can make such queries easily.
(edit: more clarity)