Я использую MongoDB около года, но не почти до его потенциала.Разработка производственных обновлений с использованием NoSQL
Я разрабатывал новое программное обеспечение, вне всяких прав, кроме моего собственного, и я наслаждался гибкостью базы данных в полной мере, и я внес серьезные изменения в данные на лету.
Теперь я нахожусь в точке, где у меня есть серверы и 3 сервера разработки, у меня возникла настоящая проблема с изменением структуры данных и их синхронизацией.
Теоретически серверы разработки должны всегда иметь самые последние данные из производства. В структурированной базе данных, если я переименую что-то, я могу просто запустить инструмент сравнения и сделать соответствующее изменение в производстве после pull. В MongoDB это может стать невероятно трудным. Могут быть сотни изменений от документа к документу, а тем более от базы данных к базе данных.
Я просмотрел файл ~/.dbshell
, чтобы получить изменения, внесенные мной, но как насчет изменений, внесенных в программу самим? Изменения в базе данных конфигурации?
Есть ли инструменты или процедуры, которые вокруг, чтобы сделать это проще?
Я потратил часы на Google, исследуя, как это делают другие. Я наткнулся на Монгез, но это более ручная и утомительная, чем мне нужно. Раньше я просто делал mongodump
и mongorestore
внутри каталога git для передачи данных, но эти снимки слишком жесткие. Я прочитал несколько сообщений в блогах о переносе новых данных с производства на разработку, но ничего не обновлял документы разработки на производстве. Я мог бы написать сценарий сравнения, но я чувствую, что это изобретает колесо. Там должен быть лучший путь.
TL; DR: Какими способами можно обновлять данные NoSQL, новые записи и измененные данные, между средами?
Правильно ли я это понимаю: вы хотите лениво переносить свои документы MongoDB из одного формата данных в другой? Почему вы хотите это сделать, то есть, почему бы вам не запустить сценарий, который в один конец переносит всю базу данных, как если бы вы делали это с реляционными базами данных? (не то, что это было невозможно, просто пытались понять, почему) – mnemosyn
Я хочу, чтобы _efficiently_ регулярно переносить документы. После добавления функций в разработку я хочу, чтобы новые поля данных были скопированы в соответствующий _id при производстве. Я не могу просто выбросить dev в производство, потому что это приведет к удалению новых сообщений пользователя и записей, которые могли произойти. Я полагаю, что я мог бы написать сценарий, чтобы проверить эти случаи, но я просто проверяю, есть ли что-то еще там в первую очередь. –
Версии документов.Для каждой коллекции поддерживайте код, который может обновить документ до текущей версии с помощью серии преобразований. Вы можете запускать его по требованию и в качестве фонового работника прокладывать каждый документ. Во-вторых, сделайте проект заранее, чтобы в будущем это было сведено к минимуму. – WiredPrairie