Каковы рекомендации для больших вставок SQL в отношении показов рекламы? - PullRequest
2 голосов
/ 20 февраля 2010

Я работаю над сайтом, на котором мне нужно будет отслеживать показы объявлений. Моя среда - ASP.Net, в которой IIS использует DMBS SQL Server и, возможно, Memcached, так что количество обращений к базе данных не так много. Я также должен подумать о масштабируемости, так как надеюсь, что это приложение станет глобальным феноменом (скрестив пальцы и отрывая задницу)! Итак, вот ситуация:

  • Мои клиенты будут платить X сумму за Y показов объявления
  • Эти показы объявлений (сейчас только текстовые объявления) будут показаны на определенной странице.
  • Страница подается из Memcached, уменьшая количество поездок в БД
  • Когда объявление показывается, необходимо добавить отметку "+1" к количеству показов для базы данных

Таким образом, дилемма заключается в следующем: мне нужно иметь возможность добавлять эту отметку «+1» к каждому счетчику показов рекламы, НО я не могу запускать этот оператор SQL при каждой загрузке объявления. Мне нужно каким-то образом сохранить количество показов "+1" в сеансе (или в другом месте), а затем запускать пакет каждые X минут, часов или дней.

Пожалуйста, имейте в виду, что масштабируемость здесь имеет огромное значение. Будем весьма благодарны за любые советы, которые у вас есть.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2010

Я видел, как проекты справляются с этим, развертывая выпуск SQL Server Express на каждом сервере веб-фермы и полагаясь на компонент Service Broker, чтобы доставить аудит отслеживания на центральный сервер. Поскольку каждый сервер в ферме обновляет локальный экземпляр SQL, он может масштабироваться до небес. Service Broker обеспечивает надежную доставку практически в реальном времени. Я видел, как веб-фермы обрабатывают 300-400 запросов в секунду в среднем , 24x7 в течение длительного времени, и благодаря тому, что компонент Service Broker, работающий в очереди, способен часами поглощать пики в 5000-7500 обращений в секунду в завершить и восстановить в разумные сроки, без потери аудита и с сохранением контроля над отставанием.

Если вы действительно рассчитываете масштабировать и стать следующим MySpace, тогда вам следует узнать у , как они это делают , а асинхронная обработка без очереди - это название игры.

1 голос
/ 20 февраля 2010

Что вы можете сделать, это увеличить счетчик в менее постоянное хранилище и периодически (каждые 1 минуту, 5 минут, час ..) синхронизироваться с более надежной базой данных.

Если ваше временное хранилище закрывается, вы теряете количество обращений на некоторое короткое время; общий эффект этого заключается в том, что в редких случаях сбоя люди, платящие за рекламу, получают бесплатные показы.

Вы можете отправить команду «атомарно увеличить это значение на +1» в memcache. Вы также можете сделать что-то наподобие записи строки в плоский файл каждый раз, когда отображается объявление, и заставить ваше задание синхронизации «каждые 5 минут» вращать журнал, а затем выполнять подсчет всех строк в только что свернутом файле.

...