Rails с базой данных в памяти - PullRequest
11 голосов
/ 21 октября 2009

Могу ли я установить рельсы для использования mysql с MEMORY в качестве движка БД? Я никогда не перезапускаю mysql и не перестраиваю базу данных так часто, что я бы предпочел, чтобы это было быстро Было бы неплохо иметь базу данных для запуска тестов.

РЕДАКТИРОВАТЬ: я должен был указать, что это только для разработки / тестирования, а не производства.

Ответы [ 3 ]

6 голосов
/ 22 октября 2009

Я не понимаю, почему ты не мог; Ваш выбор механизма хранения - это деталь реализации MySQL. Все, что вам нужно сделать, это установить :options => "ENGINE=MEMORY" в вашем объявлении create_table в ваших миграциях.

Конечно, я также не понимаю, почему вы хотели бы - особенно в производстве. Документация MySQL для движка MEMORY полна предостережений , таких как распределение полей фиксированной длины, и увеличение скорости, которое вы понимаете, должно быть тривиальным по сравнению с риском потери всего. Если ваше приложение таково, что ничего не нужно сохранять, почему бы просто не пропустить ActiveRecord полностью и не наложить свои модели поверх Memcached?

2 голосов
/ 21 октября 2009

Я использую sqlite3 в базе данных памяти для тестирования. Обычно это немного быстрее, чем на основе файлов, но не намного, если у вас нет тонны тестовых данных.

Чтобы настроить это, ваш database.yml будет выглядеть так:

test:
adapter: sqlite3
database: ":memory:"

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

config = YAML::load(IO.read(File.dirname(__FILE__) + "/../config/database.yml"))
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/../log/debug.log")
ActiveRecord::Base.establish_connection(config["test"])
load(File.dirname(__FILE__) + "/../db/schema.rb")
1 голос
/ 19 марта 2011

Для тестирования рассмотрим плагин https://github.com/mvz/memory_test_fix. Его использование так же просто, как обновить database.yml и запустить

rails plugin install git://github.com/mvz/memory_test_fix.git

Вы также можете попробовать установить гем memory_test_fix, но он из другой ветки git и не поддерживает Rails 3.

Драгоценный камень помог мне сократить время выполнения тестовых примеров с 25 секунд до 19. С другой стороны, он вводит 2-секундные накладные расходы на инициализацию схемы базы данных (а у меня их не так много). Так что на небольших тестах это не стоит беспокоить.

Решение из ответа Джейсона Стюарта в основном то же самое. И я использовал его вместо плагина, потому что его было проще объединить с плагином Spork.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...