Стратегии импорта данных из исходной базы данных - PullRequest
2 голосов
/ 22 марта 2010

Итак, я получил проект и продал команду db по управлению исходным кодом для db (странно, правда?). В любом случае, db уже существует, он массивный, и приложение очень зависит от данных. Разработчикам требуется до трех различных типов данных, с которыми они могут работать при написании SPROC и т. Д.

Очевидно, я мог бы написать сценарий вставки данных.

Но мой вопрос в том, какие инструменты или стратегии вы используете для создания БД из системы контроля версий и наполнения ее несколькими большими наборами данных?

Ответы [ 6 ]

2 голосов
/ 22 марта 2010

Обычно мы помещаем в систему контроля версий только файлы .sql для (повторного) построения схемы.

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

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

2 голосов
/ 22 марта 2010

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

У нас есть объекты базы данных в управлении исходным кодом, но нет данных (за исключением некоторых значений поиска).Чтобы сохранить данные в dev, мы обновляем их, восстанавливая последнюю резервную копию prod, а затем повторно запускаем сценарии для любых изменений в базе данных.Если то, что мы делали, потребовало бы специальных данных (скажем, новых значений поиска, которых нет в prod или тестовых логинах), у нас также есть сценарий для этого, который является частью системы контроля версий и который будет запущен одновременно.Вам не захочется записывать все данные в сценарий, поскольку воссоздание 10 миллионов записей с помощью сценария займет очень много времени (и если у вас есть 10 миллионов записей, вы, конечно, не хотите, чтобы разработчики разрабатывали базу данных с десятью тестовыми записями!).Восстановление данных продукта намного быстрее.

Поскольку все наши развертывания выполняются только с помощью сценариев с управлением исходным кодом, у нас нет проблем с тем, чтобы заставить людей писать то, что им нужно.Надеюсь, вы тоже не будете.Когда мы только начинали (и возвращались, когда dev coudl делал свои собственные развертывания для prod), нам приходилось несколько раз проходить и удалять любые объекты, которые не находились в управлении исходным кодом.Мы очень быстро научились помещать все объекты БД в систему контроля версий.

1 голос
/ 22 марта 2010

Это лучше всего рассматривать как два отдельных предмета. С одной стороны, вы хотите иметь надежную и непротиворечивую схему базы данных (таблицы, индексы, метки, процедуры, функции, а также значения поиска и любые неизменяемые «статические» данные, необходимые вашей системе), и вам нужен контроль версий над этим. так что вы можете отслеживать, что меняется со временем (и кем), а также можете контролировать, когда изменения будут применены к каким экземплярам базы данных. Предыдущие сообщения на этот вопрос хорошо освещали эту тему.

С другой стороны, вам понадобится база данных, заполненная данными, по которым вы можете протестировать и разработать новый код. Определение и загрузка таких данных - это не то же самое, что определение и загрузка структур, в которых они будут храниться. Хотя управление определениями базы данных через систему контроля версий может быть легко решаемой проблемой, за последние много лет я никогда не слышал о столь же простом (ну, относительно простом) решении для решения проблемы с данными. Аспекты проблемы включают в себя:

  • Убедитесь, что данных достаточно. Добавление 10-20 строк в таблицу легко, но вы не можете предсказать производительность, если ваши действующие базы данных будут содержать миллионы или более строк.

  • Быстрое и простое решение состоит в том, чтобы получить копию самой последней производственной базы данных, обновить ее с последними изменениями, и все готово. Это может быть сложно, если в среде разработки нет SAN, на которой можно разместить копию данных Multi-TB производства, которые вы поддерживаете

  • Аналогичным образом, аудиторы SOX и / или HIPAA могут не захотеть получать дополнительные копии потенциально конфиденциальных данных, которые хранятся на не слишком защищенных серверах разработки (в отличие от не столь защищенных разработчиков - мы ненадежная группа , в конце концов). Возможно, вам придется скремблировать или рандомизировать конфиденциальные данные перед тем, как сделать их доступными для разработчиков ... что подразумевает временный процесс "скремблирования" для очистки данных. (Возможно, еще один SAN для всех этих туберкулезов?)

  • В некоторых ситуациях было бы идеально, если бы какой-то департамент или другой отдел предоставили вам правильный, согласованный и скоординированный набор данных для разработки, который они составляют, чтобы охватить все вероятные возможные ситуации. и что они могли бы использовать для тестирования на своей стороне (зная, что входит, они знают, что должно выходить, и могут проверить это). Конечно, усилия по созданию такого набора данных существенны, и убедить не-ИТ-группы предоставить такие наборы данных может быть политически невозможно. Но это хороший сон.

  • И, конечно, данные меняются. После того, как вы отработали копию в процессе разработки в течение недели, месяца, квартала, в конце концов, и неизбежно вы обнаружите, что производственные данные больше не «выглядят» так: модели использования будут изменены, в среднем значимые значения будут дрейфовать, все ваши даты будут старыми и неактуальными ... что угодно, вам нужно будет заново получать свежие данные.

Это ужасная проблема без простого решения, о котором я когда-либо слышал. Одна возможность, которая могла бы помочь: я помню, как читал в прошлом статьи о продуктах, которые можно использовать для «наполнения» базы данных составленными, но статистически значимыми данными. Вы указываете такие вещи, как «10000 строк в этой таблице, этот столбец является первичным ключом идентификатора, этот tinyint колеблется от 1 до 10 с одинаковым распределением, этот varchar составляет от 6 до 30 символов с, возможно, 2% дубликатами» и так далее. Нечто подобное может иметь неоценимое значение, но все зависит от обстоятельств, в которых вы оказались.

0 голосов
/ 22 марта 2010

Для таблиц, которые содержат данные типа конфигурации (не транзакционные), мы используем Excel. Мы вставляем VBA-скрипт в электронную таблицу для обработки события сохранения и заставляем его выплевывать SQL-операторы вставки при сохранении. Бизнес-аналитики и клиенты любят Excel, поэтому этот метод отлично подходит для них, предлагая нам заранее определенные сценарии для тестирования. Обычно мы контролируем исходный файл вывода .sql, чтобы использовать его для загрузки данных для автоматических сборок, а файл Excel отправляется на сайт Team SharePoint.

0 голосов
/ 22 марта 2010

Я использовал несколько стратегий в прошлом, но вот одна из них работает:

  • Создание сценариев DDL (создание базы данных) и проверка их в системе контроля версий
  • Создайте отдельный сценарий заполнения данных (или набор сценариев) для каждой из ваших конфигураций
  • Настройка автоматической сборки для создания отдельных пакетов развертывания для каждой конфигурации, которые будут включать соответствующие сценарии

Если вы имеете дело с системой, которая находится в производстве и имеет данные, которые вы не можете стереть:

  • Создание отдельного набора сценариев «обновление / исправление», которое выполняет обновления схемы (изменение таблиц, создание или замена процедур и т. Д. Для объектов, которые уже существуют в целевом объекте развертывания)
  • Создание сценариев "вставки", если необходимо, для любых данных, которые необходимо заполнить для каждой сборки; они должны быть «повторно запускаемыми» (не портить данные, если патч развернут дважды)
0 голосов
/ 22 марта 2010

Взгляните на Visual Studio Team System, выпуск базы данных - либо 2008 года с загрузкой GDR 2, либо 2010. Он может обрабатывать управление версиями схемы с полной интеграцией в систему контроля версий, а также может генерировать тестовые данные (например, случайные имена и т. Д. .).

Лично мне это нравится - я занимаюсь разработкой с использованием Management Studio, затем запускаю Visual Studio и синхронизирую изменения в проекте, откуда они и затем синхронизируются до производства.

Я использую это для своего развития. Я не выписываю производственные данные - моя база данных maiin сейчас занимает около 300 ГБ, и у меня есть таблица, приближающаяся к полмиллиарду строк. У меня есть сервер разработки, копия данных иногда загружается при необходимости. Разработчики работают с небольшими данными или с сервером разработки (здесь не так много людей).

Исходные данные хранятся с помощью хранимых процедур или специальных сценариев загрузки / проверки, которые выполняются как часть процесса и проверяют такие элементы, как таблицы поиска.

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