2013-06-25 2 views
0

Я использую MongoDB около года, но не почти до его потенциала.Разработка производственных обновлений с использованием NoSQL

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

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

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

Я просмотрел файл ~/.dbshell, чтобы получить изменения, внесенные мной, но как насчет изменений, внесенных в программу самим? Изменения в базе данных конфигурации?

Есть ли инструменты или процедуры, которые вокруг, чтобы сделать это проще?

Я потратил часы на Google, исследуя, как это делают другие. Я наткнулся на Монгез, но это более ручная и утомительная, чем мне нужно. Раньше я просто делал mongodump и mongorestore внутри каталога git для передачи данных, но эти снимки слишком жесткие. Я прочитал несколько сообщений в блогах о переносе новых данных с производства на разработку, но ничего не обновлял документы разработки на производстве. Я мог бы написать сценарий сравнения, но я чувствую, что это изобретает колесо. Там должен быть лучший путь.

TL; DR: Какими способами можно обновлять данные NoSQL, новые записи и измененные данные, между средами?

+0

Правильно ли я это понимаю: вы хотите лениво переносить свои документы MongoDB из одного формата данных в другой? Почему вы хотите это сделать, то есть, почему бы вам не запустить сценарий, который в один конец переносит всю базу данных, как если бы вы делали это с реляционными базами данных? (не то, что это было невозможно, просто пытались понять, почему) – mnemosyn

+0

Я хочу, чтобы _efficiently_ регулярно переносить документы. После добавления функций в разработку я хочу, чтобы новые поля данных были скопированы в соответствующий _id при производстве. Я не могу просто выбросить dev в производство, потому что это приведет к удалению новых сообщений пользователя и записей, которые могли произойти. Я полагаю, что я мог бы написать сценарий, чтобы проверить эти случаи, но я просто проверяю, есть ли что-то еще там в первую очередь. –

+1

Версии документов.Для каждой коллекции поддерживайте код, который может обновить документ до текущей версии с помощью серии преобразований. Вы можете запускать его по требованию и в качестве фонового работника прокладывать каждый документ. Во-вторых, сделайте проект заранее, чтобы в будущем это было сведено к минимуму. – WiredPrairie

ответ

1

У меня была аналогичная проблема/опыт при управлении несколькими производственными машинами Mongo в течение года.

Два быстрых советов:

  1. WiredPrairie прав. Верните свои документы, и это позволит вам перемещаться в непринужденной/расслабленной манере. Хотелось бы, чтобы мы это сделали. Одно из моих самых больших сожалений.

  2. Мы использовали Groovy для подключения и осуществления изменений схемы/данных, и мне понравилось. Язык легко учится, и он отлично работает с JSON. Моя практика состояла в том, чтобы создать резервные копии коллекций, над которыми я буду работать, написать сценарии в dev, запустить их, и если я испорчусь, восстановите резервные копии. Итерайте, пока я не получу сценарии, а затем повторюсь в процессе производства.