Как обработать PHP, обновляющий одну строку в таблице MySQL от одновременных вызовов службы приложений Android? - PullRequest
0 голосов
/ 17 августа 2011

Вот что сейчас происходит, и я мог бы использовать некоторую мудрость.

У меня есть приложение для Android, которое вызывает код PHP с помощью intentservice примерно каждые 10 минут. Предполагается, что код PHP обновляет один столбец в одной строке в одной таблице MySQL. Очевидно, что по мере того, как число пользователей, использующих приложение, выросло до 3500, и я не думал, что оно достигнет этого числа (поскольку это был всего лишь мой маленький сторонний проект), количество одновременных запросов, которые должны быть обработаны, росло в геометрической прогрессии и возникали ситуации взаимоблокировки. произошло, и обновления MySQL для этого столбца таблицы не удается с перерывами. Ядром базы данных является InnoDB в AWS RDS.

Обновление этого столбца в этой строке таблицы имеет решающее значение и должно произойти, если не в реальном времени, а не в реальном времени.

Каким может быть масштабируемое решение, когда даже если число пользователей, делающих запрос, возрастет до 5000 - 50000, это обновление можно каким-то образом обработать чистым способом.

Пожалуйста, не стесняйтесь спрашивать о любой другой информации, которая может вам понадобиться от меня.

Спасибо за вашу помощь.

Дополнительная информация (пример)

Чтобы лучше описать проблему, приведу пример. Допустим, одна строка, которую мне нужно обновить, - это реклама, представленная рекламодателем с веб-сайта, в бюджете которого есть столбец для этой рекламы. Теперь каждый раз, когда происходит впечатление или щелчок с телефона Android, я записываю показы и клики, которые являются индивидуальными для каждого пользователя, каждое объявление в двух отдельных таблицах, но после этого с каждым показом, каждым кликом, происходящим с высокой степенью совпадения, мне все еще нужно обновить этот бюджет столбец в этой отдельной строке рекламы в таблице объявлений. Вот где возникает проблема.

Ответы [ 3 ]

1 голос
/ 17 августа 2011

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

0 голосов
/ 17 августа 2011

У вас есть две таблицы: Информация о рекламе Я БЫ рекламодатель бюджет isActive (True / false)

Информация о клике AdvertisementID ClickInfo (DateTime и т. Д.?) Пользователь (Optinal?)

я предполагаю, что есть цена за клик, которая предварительно рассчитана? Если это так, просто сделайте триггер ON UPDATE, который вызывает функцию, получает количество раз, когда advertsiementID был найден в таблице информации о кликах, и умножьте его на цену за клик. если он равен или превышает бюджет, просто установите для isACtive значение false. Пусть ваше приложение извлекает только те объявления, которые имеют isActive to true.

В этом предложении делается масса предположений, но это один из вариантов.

0 голосов
/ 17 августа 2011

Добавьте отдельную таблицу для отслеживания кликов, где у вас есть только столбцы для рекламодателя, кампании с отметкой времени.

Вставлять 1 строку каждый раз, когда происходит щелчок (не следует блокировать таблицу)

Каждые Х минут запускают на сервере скрипт, который собирает количество кликов для каждого рекламодателя и удаляет более старые записи в таблице «кликов».

...