Я работал против аналогичных требований, и у меня есть несколько предложений.Многое зависит от того, что возможно с вашими данными.Трудно сделать все мыслимые дела быстрыми, но вы можете оптимизировать для общих случаев и иметь достаточно аппаратных средств для других.
Суммируйте
Мы создаем резюмена ежедневной, еженедельной и ежемесячной основе.Для нас большинство транзакций происходит в текущий день.Старые транзакции также могут измениться.Мы ведем batch
, и при этом отдельные transaction
записи.Каждая партия имеет статус, указывающий, можно ли использовать сводку транзакций (в таблице batch_summary
).Если старая транзакция в суммированном пакете изменяется, как часть этой транзакции batch
помечается, чтобы указать, что сводке нельзя доверять.Фоновое задание позже пересчитает сводку.
Наше программное обеспечение затем использует сводку, когда это возможно, и возвращается к отдельным транзакциям, где сводка отсутствует.
Мы поигрались с материализованным Oracleпросмотров, но в итоге мы развернули наш собственный сводный процесс.
Ограничение требований
Ваши требования звучат очень широко.Может возникнуть соблазн разместить все поля запроса на веб-странице и позволить пользователям выбирать любую комбинацию полей и выводить результаты.Это делает его очень сложным для оптимизации.Я бы посоветовал углубиться в то, что им на самом деле нужно делать или делалось в прошлом.Возможно, не имеет смысла запрашивать очень неселективные измерения.
В нашем приложении для определенных запросов ограничивается диапазон дат не более 1 месяца.Мы согласовали некоторые особенности с основанными на дате аннотациями.Например, вы можете получить результаты за весь январь 2011 года, но не за 5-20 января 2011 года.
Предоставить обратную связь с пользовательским интерфейсом для медленных операций
В некоторых случаях мы нашлиТрудно оптимизировать некоторые вещи, чтобы они были короче нескольких минут.Мы переносим работу на фоновый сервер, а не на очень медленную загрузку веб-страницы.Пользователь может отклонить запрос и заняться своими делами, пока мы получим ответ.