Разработка на реальном объеме данных

Январь 31, 2008 3:57 пп автор Timur Vafin  |  Рубрики: RubyOnRails  |  Метки:  

Теория

Боян вообще то, но хочется повториться — важно вести разработку и тестирование на реальном объеме данных.

Пишете вы какой-нибудь маленкий модуль, вбивая в качестве тестовых данных любимый Lorem Ipsum. И вроде все хорошо и быстро работает.

Теперь модуль начинают активно использовать заказчики и вы с ужасом понимаете, что уже при 50 записях у вас наступает ахтунг.

Резюме: забить в базу кучу тестовых данных и разрабатывать.

Реальный пример.

Есть пост, у него много комментариев, вываленных в виде дерева.
Все хорошо пока комментариев один-два и постов с десяток.
Все плохо, когда становится их больше.

Мы используем вот такой rake task спертый из Mephisto, чтобы забить в базу побольше тестовых данных.


namespace :db do
    desc "Load initial database fixtures (in db/bootstrap/*.yml) into the current environment's database.  Load specific fixtures using FIXTURES=x,y"
    task :bootstrap => :environment do
        require 'active_record/fixtures'
        require 'faker'

        ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
        (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'db', 'bootstrap', '*.{yml,csv}'))).each do |fixture_file|
            Fixtures.create_fixtures('db/bootstrap', File.basename(fixture_file, '.*'))
        end
    end
end

Засовывает он, например, такую фикстуру.
В ней используется замечательный модуль Faker для генерации тестовых данных вроде текста, имен, email.



        <% post_comments[news_post_id] <

news_post_comments__:
  id:
  news_post_id:
  user_id:
  parent_id:
  name:
  email:
  ip_address: 10.0.0.1
  text: 

PS: Если вы всегда так делаете и постоянно проводите стрессовое тестирование своих проектов, то вы мега гуру — вам респект и уважуха

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 5 out of 5)
Loading ... Loading ...

Добавить комментарий »

Олег Курносов:

Тимур, а как в итоге-то объекты с такими зависимости в БД описывать?

( Comment от Олег Курносов — Февраль 3, 2008 @ 10:45 пп )
Артем Голубев:

Все хитрее. На самом деле после всего этого когда у вас проект вышел в свободное плавание надо брать
живые данные и проводить оптимизацию, де-нормализацию в случае необходимости, перепроектирование на основе тестов с реальными данными. Мы, например, недавно так себе hashCode подобрали для объектиков и внедрили АОР, предварительно проверив, насколько он еще дозагрузит систему. Кстати, напомните мне, и я тут про AOP на русском напишу статейку, вам точно должна идея понравиться.
Кстати, знаете, какая разница, между навороченными банковскими системами и простыми интернет-магазинчиками в и-нете? Никакой. Только в случае с банками приходится с другими программульками интегрироваться. :)

( Comment от Артем Голубев — Март 26, 2008 @ 6:52 дп )
Тимур Вафин:

Оптимизая продакш данных это уже другая песьня, до это надо еще дожить )

( Comment от Тимур Вафин — Март 26, 2008 @ 2:14 пп )

Оставить комментарий