我工作的公司为黑莓平台创建应用程序。
我们一直在研究一个专有的“分析系统”,它允许我们将代码嵌入到我们的应用程序中,并让应用程序在每次运行时向我们的中央服务器报告一些统计数据。目前,系统运行正常;但是它仅处于测试阶段,每小时点击 100-200 次。“命中”会毫无问题地发送到服务器。我们已经构建了一个非常可靠的 API 来处理命中的接受和存储(在 MySQL 数据库中)。我们已经测试了负载,我们应该能够毫无问题地容纳每小时数十万次点击。这不是一个真正的问题。
问题是显示统计数据。我们构建了一个类似于 Mint (haveamint.com) 的显示面板,它显示每小时、过去几天、几个月、几周、几年等的点击量。第一个版本运行直接查询,从命中表中提取数据并即时解释它。这并没有奏效很长时间。我们当前的解决方案是将命中“排队”以进行处理,并且我们每 5 分钟有一个 cron 来处理命中并将它们分类到每小时、每天、每周、每月、每年等的“缓存”中。这非常有效,并且具有令人难以置信的可扩展性;但是,它仅适用于 1 个时区。由于整个公司都可以访问它,我们正在与不同时区的数百名用户打交道。我定义的“今天” 圣何塞与我在伦敦的同事对今天的定义大不相同。由于当前解决方案仅缓存到 1 个时区,因此对于在我们的时区之外检查数据的任何人来说都是一场噩梦。
我们目前解决这个问题的计划是为每个时区创建缓存(总共 40 个);但是,这意味着我们将数据量乘以 40……这对我来说太可怕了,并且考虑到缓存可能非常大,乘以它听起来是个坏主意;另外,当我们去处理队列时,将它们放入 40 个不同的缓存中需要更多的 CPU 时间。
还有其他人对如何解决这个问题有更好的想法吗?
(对不起这么长的问题......这并不容易解释。谢谢大家!)