Какие есть альтернативы find_by_sql для сложных вычислительных запросов? - PullRequest
5 голосов
/ 26 июня 2009

Нашей компании нравятся отчеты, которые рассчитывают непонятные метрики - метрики, которые нельзя вычислить с помощью искателей ActiveRecord (кроме find_by_sql), и где возможности ruport на основе ruby ​​слишком медленны.

Существует ли плагин или адаптер gem или db, которые будут выполнять большие вычисления на уровне базы данных? Каково ваше решение для создания сложных отчетов?

Ответы [ 5 ]

2 голосов
/ 27 июня 2009

Хотя это и не зависит от базы данных, наше решение - это функции plpgsql, в которых использование Ruby и ActiveRecord становится очень медленным.

1 голос
/ 29 июня 2009

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

Я согласен с комментарием Нила Н., что этот вопрос немного расплывчат, но, возможно, это заставляет вас двигаться в правильном направлении?

1 голос
/ 27 июня 2009

Есть ли в ваших отчетах что-то, что мешает использовать представление SQL или хранимую процедуру?

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

 YourModel.connection.select_all(query)

чтобы вернуть данные. Это не оптимальный подход; Я стремлюсь изучить улучшения этого.

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

1 голос
/ 26 июня 2009

Плагин Thoughtbot Squirrel добавляет множество функциональных возможностей Ruby-ish в метод поиска ActiveRecord с многослойными условными выражениями, диапазонами и вложенными модельными ассоциациями:

www.thoughtbot.com / проекты / белка /

0 голосов
/ 28 июня 2009

Возможно, вы захотите использовать DataMapper или Sequel для своей ORM, если обнаружите, что ActiveRecord не хватает выразительности, необходимой для сложных запросов. Отключение от ActiveRecord не было бы вероятным решением, но, возможно, стоит хотя бы расследовать.

...