У меня здесь головная боль с дизайном, я использую PHP и MySQL в сочетании с Java (, мой проект — приложение для Android ). Мне нужно решить, как запустить серию вычислений на стороне сервера через равные промежутки времени. Здесь есть множество материалов по SO, посвященных тому, как создавать задания cron и так далее, и это здорово, я вполне могу закончить на этом, но я не уверен, как заняться этой частью моего проекта в более широком смысле.
Приложение полностью ориентировано на географическое положение пользователей. Они всегда организованы в кластеры от 4 до 40, и эти кластеры образуют одну запись экземпляра в моей базе данных. Эти экземпляры могут стать активными или неактивными в любое время.
Для каждой записи в моей базе данных или, я предпочитаю экземпляр, в каждую эпоху, я хочу пересчитать центроид экземпляра из его пользовательских местоположений (, что достаточно просто, особенно с использованием скалярного подхода, учитывая их близость ), эффективное смещение местоположения самого экземпляра путем обновления значений широты и долготы в базе данных для экземпляра. Впоследствии пользователи будут получать эти новые координаты центра тяжести экземпляра через регулярные промежутки времени, когда они будут звонить домой.
Вот где это становится грязным из-за моей неопытности ранга. Я начал с написания относительно простого вычисления, включающего один запрос выбора SQL и одну последующую операцию обновления SQL для каждого экземпляра в каждую эпоху. Если мы предположим, что интервал обновления составляет около 20 -30 секунд, это меньше одной минуты, по-видимому, это нарушает ограничение в 1 минуту для заданий cron. (Следует отметить, что разница во времени между эпохами может быть жестко запрограммирована.в случае крайней необходимости ).
В краткосрочной перспективе этот процесс может занять незначительное время для выполнения из-за того, что будет очень мало экземпляров/кластеров. Тем не менее, потенциально это может привести к большому количеству SQL-запросов и много времени для обработки всех вычислений в какой-то момент позже, если количество экземпляров исчисляется тысячами... Чтобы уменьшить ненужную нагрузку, я, естественно, хочу включить некоторый механизм для исключения неактивных экземпляров, хотя я думаю, что все еще возможно, что требуемое время расчета может превышать интервал эпохи. Я предполагаю, что это проблема для (много )позже.
В нынешнем виде вопрос стоит в два -раза:
Мой текущий подход выглядит следующим образом:
Верен ли описанный выше подход? На данный момент я планирую сделать это таким образом, если не будет лучшего предложения.У меня действительно нет четкого представления о том, как я собираюсь запланировать выполнение задачи в каждую эпоху (Точка #4 ), однако... Я просмотрел все места, и я не могу решить это сам без какого-либо руководства, я просто еще не очень хорош. :)Как всегда, буду признателен за любые предложения.