Разработка на реальном объеме данных
Теория
Боян вообще то, но хочется повториться — важно вести разработку и тестирование на реальном объеме данных.
Пишете вы какой-нибудь маленкий модуль, вбивая в качестве тестовых данных любимый 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: Если вы всегда так делаете и постоянно проводите стрессовое тестирование своих проектов, то вы мега гуру — вам респект и уважуха











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