Обработка большого количества запросов COUNT для отчета - PullRequest
0 голосов
/ 14 июня 2011

Я составляю отчет, который показывает статистическую информацию о продуктах для компании, которая владеет этими продуктами.Этот отчет в нужной мне форме содержит до 150 «подсчетов», потому что мы заполняем таблицу подсчетами для 12 типов продуктов по 15 различным статистическим категориям.

Вот набор моделей,Боюсь, это немного сложно!

Company is the entity accessing the report.

Company has many Products through Matchings; and  
Product has many Companies through Matchings.

Matching belongs_to Order.

Example report:
___________|_Available/Active/Light   Available/Active/Heavy   (+12 columns)__
Perishable |
Intangible |
(+10 rows) |

Типы продуктов указаны в таблице «Продукт» (они располагаются в левой части отчета).Категории в верхней части отчета представляют собой комбинации трех критериев: два из продукта и один из заказа.

Пример - для одной ячейки в строке скоропортящихся продуктов покажите, сколько существует совпадений, для которых тип заказа «активный», вес продукта «легкий» и статус продукта'available'.

Сам по себе вышеуказанный запрос не так уж и плох, но если я продолжу в том же духе, у меня будет ~ 170 запросов для этого отчета - и неэффективное, и крайне непрактичное решение.Есть ли волшебный способ ActiveRecord справиться с этим сценарием?

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Существует статистика драгоценный камень, который делает подобные вещи. Это позволяет вам кэшировать статистику.

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

1 голос
/ 14 июня 2011

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

Что касается его элегантности и практичности, единственное волшебство, которое вы можете использовать, - это SQL. Ваша объектная модель не была создана для отчетности, не стесняйтесь использовать инструмент, который был.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...