Подтвердить что ты не робот

Сохраненные процедуры в Ruby on Rails

Я парень .net с 6-летним опытом. Недавно я начал работать над проектом ROR и понял, что хранимые процедуры/sql-функции вообще не используются. Поинтересовавшись в этом, я узнал, что это обычная практика, и вообще никто в команде не пишет sql-запросы вообще, все делается с помощью ActiveRecord.

Я искал все возможные причины для этого, но не нашел много информации. Поэтому я просто любопытно знать

  • Насколько распространена практика использования хранимых процедур/функций sql?
  • Каковы преимущества и недостатки использования хранимых процедур?
4b9b3361

Ответ 1

Насколько распространена практика использования хранимых процедур/функций sql?

Это очень распространено, для большинства приложений Rails никогда не нужно использовать ничего, кроме ActiveRecord.

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

Каковы преимущества и недостатки использования хранимых процедур?

Они медленнее писать и более сложно изменить, и, следовательно, загружать ваши затраты на разработку. Однако их можно выполнить быстрее.

Ответ 2

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

взято из → Использование хранимых процедур в рельсах

Подводя итог, это не "СПРАВКА", чтобы использовать хранимые процедуры.

Ответ 3

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

Поэтому я бы взял "путь рельсов" с солью. Если хранимые процедуры работают для вас, используйте их.

Ответ 4

Насколько распространена практика использования хранимых процедур/функций sql?

True. Создание запросов с помощью Active Record позволяет вам управлять ими в коде приложения.

Каковы преимущества и недостатки использования хранимых процедур?

Плюсы: вы можете скрыть сложную логику запроса из вашего кода приложения.

Минусы: вам нужно создать и выполнить миграцию, если вы хотите переписать процедуру.

См. этот пример при скрытии логики в представлении базы данных, также применимом к процедурам.

Пример:

Вам необходимо выбрать все отели с номерами от start_time и end_time. В каждом отеле есть total_rooms (целочисленный атрибут), hotel_times (организация, определяющая часы работы отеля) и некоторые заказы (организация, определяющая пользователя, который забронировал номер в отеле). Некоторые отели большие и предлагают ежедневные заказы. Другие отели небольшие и предлагают почасовые бронирования. Вы спрашиваете пользователя, когда он хочет забронировать, что может быть либо датой, либо датой со временем.

Это связано с некоторыми объединениями и подзапросами и создаст большую уродливую часть кода Active Record. Вместо этого вы можете написать процедуру и вызвать ее так:

Hotel.find_by_sql ['SELECT * FROM hotels_available_between(?, ?)', start_time, end_time]

Оберните его в область видимости и получите больше ruby-ish:

class Hotel < ActiveRecord::Base
  scope :available_between, -> start_time, end_time do
    find_by_sql ['SELECT * FROM hotels_available_between(?, ?)', start_time, end_time]
  end
end

Hotel.available_between start_time, end_time