Ви, здається, робите багато припущень, можливо, виходячи з вашого досвіду роботи зі 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, але я впевнений, що Лінус Торвальдс розуміє файлові системи .
Чому деякі системи контролю комерційних версій тоді використовують реляційну базу даних?
Швидше за все, комбінація з наступного:
- Деякі розробники не хочуть писати бази даних.
- Розробники комерційних систем контролю версій мають обмеження у часі та ресурсах, тому вони не можуть дозволити собі створити базу даних, коли у них є щось близьке до того, що вони вже хочуть. Крім того, розробники коштують дорого, а розробники баз даних (як, наприклад, люди, які пишуть бази даних), ймовірно, дорожчі, оскільки більшість людей не мають такого досвіду.
- Користувачі комерційних систем управління версіями рідше піклуються про накладні витрати на налаштування та запуск реляційної бази даних, оскільки її вже є.
- Користувачі комерційних систем контролю версій, швидше за все, хочуть, щоб реляційна база даних підтримувала свої ревізійні дані, оскільки це може інтегруватися зі своїми процесами (наприклад, резервні копії).