参考广告展示,大规模SQL插入的最佳做法是什么?

时间:2010-02-20 18:48:18

标签: asp.net sql-server scalability session-state impressions

我正在一个网站上工作,我需要能够跟踪广告展示次数。我的环境是ASP.Net,IIS使用SQL Server DMBS并且可能是Memcached,因此没有那么多的数据库访问。我还必须考虑可伸缩性,因为我希望这个应用程序成为一个全球性的现象(保持我的手指交叉,努力工作)!情况就是这样:

  • 我的客户将为Y广告展示次数支付X金额
  • 这些广告展示(现在只有文字广告)会显示在特定网页上。
  • 该页面由Memcached提供,减少了到DB的行程
  • 展示广告时,需要在数据库的展示次数中添加“+1”刻度

所以困境是:我需要能够为每个广告展示计数器添加“+1”刻度标记但是每次加载广告时我都无法运行该SQL语句。我需要以某种方式在会话(或其他地方)中存储“+1”展示次数,然后每隔X分钟,几小时或每天运行一次批处理。

请记住,可扩展性是一个重要因素。我们非常感谢你们所有的建议。

2 个答案:

答案 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分钟”同步作业轮换日志,然后计算刚刚旋转出来的文件中的所有行。