Оптимизация Rails для Oracle

ОГЛАВЛЕНИЕ

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

Установка

В качестве предпосылки возможности следования всем указаниям этой статьи является наличие у пользователя продукта Ruby on Rails, установленного и сконфигурированного должным образом для подключения к базе данных Oracle. В материале Казимира Сатерноса (Casimir Saternos) "Ruby on Rails with Oracle FAQ " http://www.oracle.com/technology/pub/articles/saternos-ror-faq.html приводится подробное объяснение этого процесса. (Это довольно просто.)

Все примеры для этой статьи были написаны и протестированы на машине с Windows XP, на которой функционирует Instant Rails 1.5 preview 1 (http://rubyforge.org/frs/download.php/17654/InstantRails-1.5p1-win.zip) , подключенный к базе данных Oracle Database 10g Express Edition (XE) http://www.oracle.com/technology/products/database/xe/index.html , установленной на Debian Linux.

В остальной части этой статьи я предлагаю примеры, основанные на "версии" Rails схемы HR, которая была модифицирована для непосредственного выполнения общепринятых соглашений Rails (в противоположность использованию стандартной схемы HR из приложения Rails, которая была объяснена в написанном Сатерносом документе "HR Schema on Rails" (http://www.oracle.com/technology/pub/articles/saternos-rails.html ). Этот выбор был продиктован желанием показать поведение стандартного приложения Rails, работающего с базой данных Oracle, не отвлекаясь при этом на специфику обработки отдельной схемы для отображения схемы HR в конвенцию Rails. (Что, несомненно, является очень разумным способом обработки унаследованной схемы!)

В файле демонстрационного кода http://www.oracle.com/technology/pub/files/mearelli-optimizing-oracle-rails-sample.zip находятся полный материал для миграции схемы и дамп данных (в формате yml), которые могут быть использованы для загрузки с использованием дополнительного модуля с исправлениями Active Record, который также включен. (Файл db/db_loading.rb выполняет импорт данных и может быть выполнен скриптом или исполняемой программой).

Шесть таблиц заполнены теми же самыми данными, что содержатся в обычной схеме HR, хотя у них имеются модифицированные столбцы. (К примеру, все они теперь используют общепринятую конвенцию Rails о наличии одного столбца-идентификатора (id) в качестве первичного ключа.)

Модели также определяют некоторые отношения между ними; полный код для моделей вы можете увидеть в файле демонстрационного кода:

class Country < ActiveRecord::Base
    belongs_to :region                                                               
    has_many  :locations
end

class Department < ActiveRecord::Base
    belongs_to :manager, :class_name => "Employee", :foreign_key => "manager_id"
    belongs_to :location                                                             
    has_many :employees                                                              
end

class Employee < ActiveRecord::Base
    belongs_to :department                                                           
    belongs_to :manager, :class_name => "Employee", :foreign_key => "manager_id"
    belongs_to :job                                                                  
    belongs_to :department                                                       
    has_many :managed_employees, :class_name => "Employee", :foreign_key => "manager_id"
end
 
class Job < ActiveRecord::Base
  has_many :employees                                                               
end

class Location < ActiveRecord::Base
  belongs_to :country                                                             
  has_many :department 
end

class Region < ActiveRecord::Base
     has_many :country
end

Все наши тесты будут сделаны посредством простого подключения к консоли Rails и выполнения в интерактивном режиме запросов к базе данных через методы моделей, как будто мы делаем их изнутри наших контроллеров:

	   C:\Progetti\ArticoliROR\Oracle\project> ruby script\console Loading development environment. >>