Одна БД на разработчика или нет? - PullRequest
30 голосов
/ 24 октября 2008

В корпоративной среде разработки, пишущей в основном административное программное обеспечение, должен ли каждый разработчик использовать свой экземпляр базы данных или экземпляр центральной базы данных во время разработки? Каковы преимущества и недостатки каждого подхода? А как насчет других сред и других продуктов?

Ответы [ 19 ]

35 голосов
/ 24 октября 2008

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

Я настоятельно рекомендую одну БД для разработчика только по той причине, что вы не хотите делать тест «записи», чтобы увидеть, что кто-то другой переопределит вас сразу после. Простой пример? Вы пытаетесь отобразить продукт для веб-сайта. Все работает, пока все продукты не исчезнут. Проблема? Другой разработчик решил поиграть с флагом «Актив» продукта, чтобы протестировать что-то еще. В таких случаях транзакция может даже не работать. В конце истории вы тратите время на отладку чужого действия.

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

Конечно, нам требуются сценарии для внесения изменений в базу данных, и ВСЕ находится в Source Control.

16 голосов
/ 24 октября 2008

Дни, когда среды баз данных должны быть скудными, давно прошли. Я пишу это сообщение на XW9300 с дисками SCSI 5x15k. Эта машина будет выполнять существенную работу ETL в течение довольно разумного периода времени и (в середине 2007 года) обойдется мне в £ 1700 на ebay, включая диски. С точки зрения разработчика, особенно в проектах, ориентированных на базы данных, таких как хранилище данных, грань между разработчиком и администратором базы данных довольно размыта. Когда я пишу это, я создаю инфраструктуру управления разделами для хранилища данных SQL Server 2005.

Разработчики должны иметь одну или несколько собственных баз данных для разработки (IMO) по следующим причинам:

  • Требуется, чтобы люди хранили хранимые процедуры, сценарии исправлений и файлы определения схемы в системе контроля версий. Применение исправлений может быть автоматизировано в довольно большой степени. Есть даже такие инструменты, как Redgate SQL Compare Pro , которые делают большую часть тяжелой работы для этого.

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

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

  • Это поощряет определенную степень ответственности, поскольку разработчики должны изучать основы администрирования баз данных. Это также устраняет множество требований к персоналу оперативной поддержки и некоторым разработчикам. ops friction.

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

  • Для небольших объемов данных обычный компьютер достаточно быстр для этого. Редакции для разработчиков или лицензирование доступны для большинства, если не для всех систем управления базами данных, и будут работать на настольной операционной системе. Если вы работаете с Linux или Unix, это еще меньше проблем. Для больших объемов данных, вплоть до большинства приложений MIS, рабочую станцию, такую ​​как HP XW9400 или Lenovo D10 , можно оснастить 5 дисками по 15 КБ, что обойдется дешевле, чем многие другие. профессиональный разработка оснастка . (Да, я знаю, что это двойная лицензия, но коммерческая лицензия на всю платформу для QT стоит около 4000 фунтов стерлингов за место). Такая машина будет запускать процесс ETL с 10 до 100 миллионов строк быстрее, чем вы думаете.

  • Это облегчает настройку более чем одной среды для тестирования дыма или примирения. Поскольку у вас есть полный контроль над машиной, у вас есть достаточно возможностей для макетирования условий в производственной среде. Например, однажды я сделал простой эмулятор для Control-M , просто загрузив некоторые из его сценариев времени выполнения. Если у вас есть такой уровень контроля и прозрачности в отношении среды, вы можете создать довольно надежно протестированный процесс развертывания, который очень многое делает для устранения возможностей для выявления в производственном развертывании.

Я видел небольшие команды, работающие с 14 средами, и у меня было 7 активных одновременно на рабочей станции. На тяжелой работе с базой данных, такой как ETL, где вы работаете с целыми таблицами, работа в среде с одним разработчиком - это трата времени или потеря времени на яичные скорлупы.

Кроме того, вы можете использовать однопользовательские лицензии на разработку для платформ баз данных, что может сэкономить вам стоимость рабочих станций только при лицензировании баз данных. Большинство лицензий для разработчиков (например, Microsoft и OTN - пара примеров, с которыми я знаком) позволяют использовать систему на одной рабочей станции бесплатно для одного разработчика или по номинальной цене.

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

7 голосов
/ 24 октября 2008

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

5 голосов
/ 25 октября 2008

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

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

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

С другой стороны, во многих ИТ-магазинах система использует сложную инфраструктуру, включающую несколько серверов приложений или несколько физических узлов. Тогда экономика меняется; людям дешевле сотрудничать и избегать совместной работы, чем копировать их для каждого разработчика. Особенно актуально, если вы интегрируете дорогие сторонние системы, которые не дают лицензий для нескольких сред разработки.

Так что ответ да и нет. :-) Дайте каждому разработчику собственную среду, если эту среду можно воспроизвести недорого.

3 голосов
/ 25 октября 2008

Этот вопрос намекает на то, что разработчик должен делать свою работу. Конечно, должен быть предоставлен частный экземпляр БД. Не менее важно, чтобы я удостоверился в том, что БД - это тот же продукт / версия, что и та, которую вы собираетесь развернуть. Не разрабатывайте на MySQL 6.x и не развертывайте на MySQL 5.x. (Это касается и серверов приложений, и веб-серверов!)

Наличие базы данных разработчика не обязательно означает, что она нужна вам на локальном компьютере. У вас может быть центральная машина СУБД, на которой расположены все базы данных разработчиков. Плюсы - это гарантия, которую вы разрабатываете против целевой БД. Меньшая нагрузка на устройства разработки, больше места / мощности для мощных IDE и серверов приложений. Минусы - это единственная точка отказа для всех разработчиков. (Сервер СУБД выходит из строя, никто не может работать.) Отсутствие возможностей разработки и администрирования СУБД. Разработчики не могут так легко экспериментировать с будущими выпусками БД или альтернативными вариантами БД для решения сложных задач.

Некоторые плюсы могут быть минусами и наоборот в зависимости от вашей организации и структуры. Может быть, вы не хотите, чтобы разработчики администрировали СУБД. Может быть, вы планируете поддерживать различные платформы БД. Решение сводится к вашей организации, а также к вашей целевой платформе. Если вы планируете использовать различные комбинации БД / ОС / сервера приложений, то каждый разработчик должен не только иметь свою собственную БД, но и работать в уникальной комбинации. (MySQL / Tomcat / OSX для одного DB2 / Jetty / Linux для другого Postegres / Geronimo / WinXP для третьего и т. Д.) Скорее всего, у вас будет центральный хост со всеми базами данных разработчика, но каждый разработчик должен иметь хотя бы отдельный экземпляр базы данных, чтобы разрешить структурные изменения в схеме.

3 голосов
/ 24 октября 2008

Я рекомендую иметь 2 уровня среды разработки:

Каждый разработчик имеет собственную систему разработки, со своими собственными dp, веб-серверами и т. Д. Это позволяет им кодировать с известной настройкой, писать автоматические (на уровне системы) тесты, которые инициализируют их базу данных и системы в известное состояние, и т.д.

Среда интеграции разработки используется всеми разработчиками и используется для проверки того, что все работает вместе, как и ожидалось, перед передачей в QA. Код извлекается из системы контроля версий и устанавливается там, и есть только один экземпляр любого сервера (дБ или иным образом).

1 голос
/ 25 октября 2008

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

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

  • у вас есть большое количество разработчиков, которым требуются ресурсы (в нашем отделе их может быть 80)
  • каждому разработчику требуется несколько ресурсов (обычно я использую 4-5 разных БД каждый день)
  • важны актуальные данные (вы просто не можете обновить их достаточно быстро)

В этих случаях нужны общие экземпляры и хорошее общение.

1 голос
/ 25 октября 2008

Локально установлен экземпляр SQLServer Development Edition. У нас есть сервер QA DB, а также несколько производственных серверов. Все тестирование разработки и интеграции выполняется с использованием моего локального сервера (или локальных серверов других разработчиков). Новые выпуски размещаются на сервере QA. Каждый выпуск после принятия заказчиком запускается в производство.

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

0 голосов
/ 25 января 2012

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

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

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

0 голосов
/ 07 июля 2009

Одна БД на разработчика. Нет вопросов. Но на самом деле проблема заключается в том, как составить сценарий для целых баз данных, «контролировать данные» и сделать их версию. Мое решение здесь: http://dbsourcetools.codeplex.com/ Повеселись. - Натан.

...