Consider using something other than Goals - for example create a custom entity and use a rollup field to do the same sort of job. These will recalculate every hour. Making 800 calculations every hour with Goals does sound like a potential performance issue.
Maybe, as an alternative, use plugins or real-time workflows to do this more cleverly, updating the "parent" rollup values if a child record is added, deleted or updated. This might mean that some parent rollup records are only updated fairly infrequently
(because nothing changes) and others more often. But they will all be up to date at any point in time.
WHat are the Goals measuring? What entity do the values come from? How many underlying records are there for each Goal (apporximately - is it 10, 100, 1000+)?
Hope this helps.
Adam Vero, MVP | Microsoft Certified Trainer
UK CRM Guru Blog