Похоже, вы делаете много предположений, возможно, исходя из вашего опыта работы с SVN и CVS.
Git и Mercurial в основном похожи на SVN и CVS
Сравнение git и CVS похоже на сравнение iPad и Atari. CVS был создан еще тогда, когда динозавры бродили по Земле . Subversion - это улучшенная версия CVS. Предполагать, что современные системы контроля версий, такие как git и Mercurial, работают как они, имеют мало смысла.
Реляционная база данных более эффективна, чем специализированная база данных
Зачем? Реляционные базы данных действительно сложны и могут быть не такими эффективными, как специализированные базы данных. Некоторые отличия от макушки головы:
- Системы контроля версий не нуждаются в сложной блокировке, так как вы все равно не можете выполнять несколько коммитов одновременно.
- Распределенные системы контроля версий должны быть очень чрезвычайно компактными, поскольку локальная база данных является полной копией репозитория.
- Системы контроля версий должны искать данные только несколькими конкретными способами (по автору, по идентификатору ревизии, иногда полнотекстовый поиск). Создание вашей собственной базы данных, которая может обрабатывать поиск по идентификатору автора / ревизии, тривиально, а полнотекстовый поиск не очень быстрый в любой реляционной базе данных, которую я пробовал.
- Системы контроля версий должны работать на нескольких платформах. Это затрудняет использование базы данных, которую необходимо установить и запустить в качестве службы (например, MySQL или PostgreSQL).
- Системы контроля версий на вашем локальном компьютере должны работать только тогда, когда вы что-то делаете (например, коммит). Оставлять сервис, подобный MySQL, постоянно работающим на тот случай, если вы захотите сделать коммит, расточительно.
- По большей части системы контроля версий никогда не хотят удалять историю, а просто добавляют ее. Это может привести к разной оптимизации и разным методам защиты целостности.
Реляционные базы данных безопаснее
Опять же почему? Вы, кажется, предполагаете, что поскольку данные хранятся в файлах, системы контроля версий, такие как git и Mercurial, не имеют атомарных фиксаций , но они имеют. Реляционные базы данных также хранят свои базы данных в виде файлов. Здесь примечательно, что CVS не выполняет атомарные коммиты, но, скорее всего, это из-за незапамятных времен, а не потому, что они не используют реляционные базы данных.
Существует также проблема защиты данных от повреждения, когда они находятся в базе данных, и опять же ответ тот же. Если файловая система повреждена, то не имеет значения, какую базу данных вы используете. Если файловая система не повреждена, то ваша база данных может быть повреждена. Я не понимаю, почему база данных контроля версий была бы более склонна к этому, чем реляционная база данных.
Я бы сказал, что распределенные системы контроля версий (такие как git и Mercurial) лучше защищают вашу базу данных, чем централизованный контроль версий, поскольку вы можете восстановить весь репозиторий из любого клона. Таким образом, если ваш центральный сервер самопроизвольно сгорает вместе со всеми вашими резервными копиями, вы можете восстановить его, запустив его git init
на новом сервере, а затем git push
с компьютера любого разработчика .
Изобретать колесо плохо
То, что вы можете использовать реляционную базу данных для решения любых проблем хранения, не означает, что вы должны это делать . Почему вы используете файлы конфигурации вместо реляционной базы данных? Зачем хранить изображения в файловой системе, если вы можете хранить данные в реляционной базе данных? Зачем хранить свой код в файловой системе, если вы можете хранить все это в реляционной базе данных?
«Если все, что у вас есть, это молоток, все выглядит как гвоздь».
Существует также тот факт, что проекты с открытым исходным кодом могут позволить себе заново изобретать колесо, когда это удобно, поскольку у вас нет тех же ограничений на ресурсы, что и в коммерческих проектах. Если у вас есть волонтер, который является экспертом в написании баз данных, то почему бы не использовать их?
Что касается того, почему мы могли бы доверять авторам систем контроля версий знать, что они делают ... Я не могу говорить о других VCS, но я довольно уверен, что Линус Торвальдс понимает файловые системы .
Почему некоторые коммерческие системы контроля версий используют реляционную базу данных?
Скорее всего какая-то комбинация из следующего:
- Некоторые разработчики не хотят писать базы данных.
- Разработчики коммерческих систем контроля версий имеют ограничения по времени и ресурсам, поэтому они не могут позволить себе написать базу данных, когда у них уже есть что-то близкое к тому, что они хотят. Кроме того, разработчики стоят дорого, а разработчики баз данных (например, люди, которые пишут базы данных), вероятно, дороже, так как большинство людей не имеют такого опыта.
- Пользователи коммерческих систем контроля версий с меньшей вероятностью будут заботиться о накладных расходах на настройку и запуск реляционной базы данных, поскольку они уже есть.
- Пользователи коммерческих систем контроля версий с большей вероятностью захотят, чтобы реляционная база данных поддерживала свои данные ревизий, поскольку это может лучше интегрироваться с их процессами (например, резервными копиями).