2012-05-21 3 views
1

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

В настоящее время мы используем два отдельных экземпляра MongoDB, оба набора реплик на 3 члена, для нашей среды тестирования и развертывания соответственно. Внутренне понятно, что все данные в тестовой среде в значительной степени выбрасываются и просто создаются разработчиками в ходе модульного тестирования приложения.

Я бы хотел дать команде разработчиков новую возможность тестирования с реальными живыми данными, но в отдельном безопасном экземпляре песочницы. Сначала мне казалось, что я могу просто использовать команду copyDatabase, чтобы каждый день обманывать данные в новой базе данных и подключать отдельные серверы приложений разработчика к этой базе данных. Проблема в том, что в системе имеется тонна данных GridFS, и дублирование, как это, тратит массу дискового ввода-вывода, и мы работаем в небольших облачных экземплярах.

Я опасаюсь идти по этому маршруту, особенно если есть более подходящая альтернатива.

Возможно ли, например, установить четвертый элемент набора реплик развертывания, который работает только как подчиненный, установить все запросы на slaveOkay = True и выполнить тесты против этого отдельного узла? Будет ли это распространяться обратно на других членов? Как обрабатывать вставки?

То, что я предлагаю, может оказаться непрактичным, особенно если передача должна была пересечь сеть, где она также будет тратить сетевую передачу. Кому-нибудь приходилось решать подобную проблему? Благодаря!

ответ

1

Рабы предназначены только для чтения. Все записи должны идти на мастер. Это исключает вариант «четвертого подчиненного».

Что касается целей тестирования, вам действительно нужна точная копия базы данных со всеми данными gridfs? Я бы попытался скопировать только соответствующую часть «тяжелых» данных. Это исключает db.copyDatabase() :) Вместо этого сделайте mongodump/mongorestore.

Кроме того, я хотел бы указать, что для тестирования db и промежуточной базы db должны быть разные базы данных. Test db используется для модульных тестов (с издеваемыми/сгенерированными данными). Staging db заполняется производственными данными и используется для интеграции/приемочного тестирования.

+0

Спасибо за ваш ответ. В настоящее время мы генерируем тестовый db с помощью модуля unittest, поэтому, возможно, неправильно было ссылаться на db, который я пытался настроить как «тестовый». То, что я действительно имел в виду, было промежуточным сервером, на который вы ссылались. – DeaconDesperado

Смежные вопросы