我正在一个网站上工作,我需要能够跟踪广告展示次数。我的环境是ASP.Net,IIS使用SQL Server DMBS并且可能是Memcached,因此没有那么多的数据库访问。我还必须考虑可伸缩性,因为我希望这个应用程序成为一个全球性的现象(保持我的手指交叉,努力工作)!情况就是这样:
所以困境是:我需要能够为每个广告展示计数器添加“+1”刻度标记但是每次加载广告时我都无法运行该SQL语句。我需要以某种方式在会话(或其他地方)中存储“+1”展示次数,然后每隔X分钟,几小时或每天运行一次批处理。
请记住,可扩展性是一个重要因素。我们非常感谢你们所有的建议。
答案 0 :(得分:2)
我已经看到项目通过在每个Web场服务器上部署SQL Server Express版本并依靠Service Broker将跟踪审计提供给中央服务器来处理此问题。由于服务器场中的每个服务器都更新本地SQL实例,因此它们可以扩展为与天空一样高。 Service Broker确保近乎实时的可靠交付。我已经看到网络农场平均平均每秒处理300-400个请求,长时间24x7,并且Service Broker的排队特性能够吸收每秒5000-7500次点击的尖峰数小时最后,在合理的时间内恢复,没有审计损失,积压工作仍在控制之中。
如果您真的希望扩展并成为下一个MySpace,那么您应该从how they do it学习,并且基于队列的异步,解耦处理是游戏的名称。
答案 1 :(得分:1)
你可以做的就是将计数增加到一个不那么永久的商店,并定期(每1分钟,5分钟,每小时......)同步到你更可靠的数据库。
如果您的临时商店出现故障,您将在短时间内失去一次点击数;这种情况的最终结果是,在罕见的故障情况下,为广告付费的人会获得一些免费的展示。
您可以向memcache发送“原子递增此值+1”命令。您还可以执行类似操作,例如每次显示广告时将行写入平面文件,并让“每5分钟”同步作业轮换日志,然后计算刚刚旋转出来的文件中的所有行。