Компания, в которой я работаю, создает приложения для платформы Blackberry.
Мы работаем над собственной "аналитической системой", которая позволяет нам встраивать код в наши приложения и заставлять приложения сообщать некоторую статистику нашим центральным серверам каждый раз, когда они запускаются. В настоящее время система работает нормально; однако это только в бете со 100-200 попаданиями в час. «Хиты» отправляются на серверы без проблем. Мы создали очень надежный API для обработки и хранения попаданий (в базе данных MySQL). Мы проверили нагрузку, и мы должны быть в состоянии принять сотни тысяч ударов в час без проблем. Это на самом деле не проблема.
Проблема показывает статистику. Мы создали панель отображения, похожую на Mint (haveamint.com), на которой отображаются результаты за каждый час, прошедшие дни, месяцы, недели, годы ... и т. Д. Первая версия выполняла прямые запросы, извлекая данные из таблицы совпадений и интерпретируя их на лету. Это не сработало очень долго. Наше текущее решение состоит в том, что попадания «ставятся в очередь» для обработки, и у нас есть крон, который проходит каждые 5 минут, принимая попадания и сортируя их в «кэши» для каждого часа, дня, недели, месяца, года ... и т. Д. Это работает потрясающе и невероятно масштабируемо; однако, это работает только для 1 часового пояса. Поскольку вся компания имеет доступ к этому, мы имеем дело с несколькими сотнями пользователей в разных часовых поясах. То, что я определяю как «Сегодня» в Сан-Хосе, НАМНОГО отличается от того, что мой коллега в Лондоне определяет как «Сегодня». Поскольку текущее решение кэшируется только в 1 часовой пояс, это кошмар для тех, кто проверяет данные вне нашего часового пояса.
Наш текущий план это исправить - создать кэши для каждого часового пояса (всего 40); однако это означало бы, что мы умножаем объем данных на 40 ... это ужасно для меня, и учитывая, что кэши могут быть очень большими, умножение это просто звучит как плохая идея; к тому же, когда мы обрабатываем очередь, потребуется гораздо больше процессорного времени, чтобы поместить их в 40 различных кешей.
Кто-нибудь еще лучше знает, как решить эту проблему?
(Извините за такой длинный вопрос .. это не совсем легко объяснить. Спасибо всем!)