четверг, 26 августа 2010 г.

Оптимизация миграций(перевод)

Миграции, по моему мнению, одна из лучших вещей в рельсе.
Но что пользоваться максимально эффективно следует придерживаться след правил.


1. Индексы базы данных
В первую очередь определите индексы для всех внешних ключей и для всех колонок которые вы будете сортировать, по которым будете искать и группировать.
class CreateInvoices ActiveRecord::Migration
  def self.up
    create_table :invoices do |t|
      t.integer :number
      t.integer :year
      t.decimal :total_amount
      t.date :invoice_date
      t.integer :company_id
      t.integer :client_id
      t.timestamps
    end
  end
  def self.down
    drop_table :invoices
  end
end

Это обычная миграция генерируемая стандартной script/generate коммандой.
Теперь добавим индексы для сортируемых полей и ключей.

class CreateInvoices ActiveRecord::Migration
  def self.up
    create_table :invoices do |t|
      t.integer :number
      t.integer :year
      t.decimal :total_amount
      t.date :invoice_date
      t.integer :company_id
      t.integer :client_id
      t.timestamps
    end
  end
  add_index :invoices,:company_id
  add_index :invoices,:client_id
  add_index :invoices,:number
  add_index :invoices,:year
  def self.down
    drop_table :invoices
  end
end

Индексы важны для производительности.
База начинает летать по сравнению со стандартной миграцией.
Есть несколько плагинов которые будут полезны для вашей базы.
* http://github.com/eladmeidar/rails_indexes
* http://github.com/mlomnicki/automatic_foreign_key
* http://github.com/samdanavia/ambitious_query_indexer


2. Пишите сиды.
Начиная с рельсы 2.3.4 вместо того что б вписывать данные в миграции - пишите их в seed.rb
Обращаю внимание - фикстуры для тестов,сиды для продакшена(содержит данные без которых нельзя стартануть- например список странн или список станций метро)

Комментариев нет: