Отслеживание / развертывание кода и данных - PullRequest
10 голосов
/ 11 августа 2010

В течение долгого времени мы хранили наши данные в репозитории проекта. Мы просто хранили все в data / sql, и у каждой таблицы были свои собственные файлы create_tablename.sql и data_tablename.sql.

Мы только что развернули наш второй проект на Scalr, и мы поняли, что он немного грязный.

Способ развертывания:

У нас есть коллекция "packageup" скриптов, которые разбивают проект на 3 архива (данные, код, статические файлы), которые мы затем храним в 3 отдельных блоках на S3.

Каждый раз, когда роль запускается, она загружает один из файлов (в зависимости от роли: data, nfs или web), а затем сценарий «unpackage» устанавливает все для каждой роли, загружает данные в mysql, устанавливает NFS и т. д.

Мы делаем это так, потому что мы не хотим сохранять образы серверов, мы всегда начинаем с ванильных экземпляров, на которые мы устанавливаем все с нуля, используя различные встроенные скрипты. Время запуска не является проблемой (у нас есть готовая ферма за 9 минут).

Проблема в том, что пытаться найти правильную версию базы данных каждый раз, когда мы пытаемся настроить новую сборку разработки, очень сложно (в любой момент времени у нас есть около 4 сборок для проекта). Кроме того, git начинает задыхаться, когда мы начинаем работать, так как файлы sql занимают около 500 МБ.

Вопрос:

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

Ответы [ 5 ]

4 голосов
/ 22 августа 2010

Вы должны серьезно взглянуть на dbdeploy (dbdeploy.com). Он портирован на многие языки, основными из которых являются Java и PHP. Он интегрирован в инструменты сборки, такие как Ant и Phing, и позволяет легко обмениваться так называемыми дельта-файлами.

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

Я использую dbdeploy для моего блога с открытым исходным кодом, чтобы вы могли посмотреть, как организованы дельта-файлы: http://site.svn.dasprids.de/trunk/sql/deltas/

2 голосов
/ 19 августа 2010

Насколько я понимаю, ваш главный вопрос - опыт других людей в переносе данных SQL из dev в рабочую среду.

Я использую Microsoft SQL Server вместо My SQL, поэтому я не уверен, что мой опыт вы можете использовать напрямую. Тем не менее этот способ работает очень хорошо.

Я использую Visual Studio 2010 Ultimate Edition для сравнения данных в двух базах данных. Эта же функция существует и в Vinsual Studio Team Edition 2008 (или в базе данных). Вы можете прочитать http://msdn.microsoft.com/en-us/library/dd193261.aspx, чтобы понять, как это работает. Вы можете сравнить две базы данных (dev и prod) и сгенерировать SQL Script для изменения данных. Вы можете легко исключить некоторые таблицы или столбцы из сравнения. Вы также можете просмотреть результаты и исключить некоторые записи из генерации скрипта. Таким образом, можно легко и гибко создавать сценарии, которые можно использовать для развертывания изменений в базе данных. Вы можете отдельно сравнить данные двух баз данных из структуры (сравнение схем). Таким образом, вы можете обновить данные в dev данными из prod или сгенерировать сценарии, которые изменяют базу данных prod до последней версии базы данных dev. Я рекомендую вам ознакомиться с этими функциями и некоторыми продуктами http://www.red -gate.com / (например, http://www.red -gate.com / products / SQL_Compare / index.htm ) .

0 голосов
/ 23 августа 2010

Одной из частей решения является сбор версии каждого из ваших модулей кода и соответствующих им ресурсов данных в одном месте и сравнение их для обеспечения согласованности.Например, при увеличении номера версии вашего, скажем, customer_comments модуля потребуется соответствующий дельта-файл SQL для обновления соответствующих таблиц БД до равного номера версии данных.

Например, взгляните на core_resource подход Magento , задокументированный @AlanStorm.

Приветствия, JD

0 голосов
/ 22 августа 2010

Лично я бы посмотрел на жабу

http://www.toadworld.com/

Менее 10k;) ... будет анализировать структуры базы данных, создавать сценарии для их изменения, а также переносить данные.

0 голосов
/ 11 августа 2010

Выезд capistrano . Это инструмент, который сообщество ruby ​​использует для развертывания в различных средах, и я считаю его действительно полезным.

Также, если ваше развертывание начинает задыхаться, попробуйте инструмент Twitter, созданный под названием Убийство .

...