Bạn dường như đang đưa ra rất nhiều giả định, có thể dựa trên kinh nghiệm của bạn với SVN và CVS.
Git và Mercurial về cơ bản giống như SVN và CVS
So sánh git và CVS giống như so sánh iPad và Atari. CVS được tạo lại khi những con khủng long lang thang trên Trái đất . Subversion về cơ bản là một phiên bản cải tiến của CVS. Giả sử rằng các hệ thống kiểm soát phiên bản hiện đại như git và Mercurial hoạt động như chúng có rất ít ý nghĩa.
Cơ sở dữ liệu quan hệ hiệu quả hơn cơ sở dữ liệu đơn mục đích
Tại sao? Cơ sở dữ liệu quan hệ thực sự phức tạp và có thể không hiệu quả như cơ sở dữ liệu đơn mục đích. Một số khác biệt ngoài đỉnh đầu của tôi:
- Các hệ thống kiểm soát phiên bản không cần khóa phức tạp, vì dù sao bạn cũng không thể thực hiện nhiều lần xác nhận.
- Các hệ thống kiểm soát phiên bản phân tán cần phải cực kỳ hiệu quả về không gian, vì cơ sở dữ liệu cục bộ là bản sao đầy đủ của repo.
- Các hệ thống kiểm soát phiên bản chỉ cần tra cứu dữ liệu theo một vài cách cụ thể (theo tác giả, theo ID sửa đổi, đôi khi là tìm kiếm toàn văn). Tạo cơ sở dữ liệu của riêng bạn có thể xử lý các tìm kiếm ID tác giả / sửa đổi là chuyện nhỏ và tìm kiếm toàn văn bản không nhanh lắm trong bất kỳ cơ sở dữ liệu quan hệ nào tôi đã thử.
- Hệ thống kiểm soát phiên bản cần phải hoạt động trên nhiều nền tảng. Điều này làm cho việc sử dụng một cơ sở dữ liệu cần được cài đặt và chạy như một dịch vụ (như MySQL hoặc PostgreQuery) khó khăn hơn.
- Hệ thống kiểm soát phiên bản trên máy cục bộ của bạn chỉ cần chạy khi bạn đang làm gì đó (như cam kết). Rời khỏi một dịch vụ như MySQL chạy mọi lúc chỉ trong trường hợp bạn muốn thực hiện một cam kết là lãng phí.
- Đối với hầu hết các phần, các hệ thống kiểm soát phiên bản không bao giờ muốn xóa lịch sử, chỉ cần thêm vào nó. Điều đó có thể dẫn đến các tối ưu hóa khác nhau và các phương pháp bảo vệ tính toàn vẹn khác nhau.
Cơ sở dữ liệu quan hệ an toàn hơn
Một lần nữa, tại sao? Bạn dường như cho rằng vì dữ liệu được lưu trữ trong các tệp, các hệ thống kiểm soát phiên bản như git và Mercurial không có các cam kết nguyên tử , nhưng chúng có. Cơ sở dữ liệu quan hệ cũng lưu trữ cơ sở dữ liệu của họ dưới dạng tệp. Điều đáng chú ý ở đây là CVS không thực hiện các cam kết nguyên tử, nhưng đó có thể là vì nó từ thời kỳ đen tối, không phải vì họ không sử dụng cơ sở dữ liệu quan hệ.
Ngoài ra còn có vấn đề bảo vệ dữ liệu khỏi tham nhũng một khi nó có trong cơ sở dữ liệu, và một lần nữa câu trả lời là như vậy. Nếu hệ thống tập tin bị hỏng, thì bạn không sử dụng cơ sở dữ liệu nào. Nếu hệ thống tập tin không bị hỏng, thì công cụ cơ sở dữ liệu của bạn có thể bị hỏng. Tôi không thấy lý do tại sao cơ sở dữ liệu kiểm soát phiên bản sẽ dễ bị điều này hơn cơ sở dữ liệu quan hệ.
Tôi cho rằng các hệ thống kiểm soát phiên bản phân tán (như git và Mercurial) sẽ tốt hơn cho việc bảo vệ cơ sở dữ liệu của bạn so với kiểm soát phiên bản tập trung, vì bạn có thể khôi phục toàn bộ repo từ bất kỳ bản sao nào. Vì vậy, nếu máy chủ trung tâm của bạn tự động đốt cháy, cùng với tất cả các bản sao lưu của bạn, bạn có thể khôi phục nó bằng cách chạy git init
trên máy chủ mới, sau đó git push
từ bất kỳ máy nào của nhà phát triển .
Phát minh lại bánh xe là xấu
Chỉ vì bạn có thể sử dụng cơ sở dữ liệu quan hệ cho bất kỳ vấn đề lưu trữ nào không có nghĩa là bạn nên làm . Tại sao bạn sử dụng tệp cấu hình thay vì cơ sở dữ liệu quan hệ? Tại sao lưu trữ hình ảnh trên hệ thống tập tin khi bạn có thể lưu trữ dữ liệu trong cơ sở dữ liệu quan hệ? Tại sao giữ mã của bạn trên hệ thống tệp khi bạn có thể lưu trữ tất cả trong cơ sở dữ liệu quan hệ?
"Nếu tất cả những gì bạn có là một cái búa, mọi thứ trông giống như một cái đinh."
Ngoài ra còn có một thực tế là các dự án nguồn mở có thể đủ khả năng để phát minh lại bánh xe bất cứ khi nào thuận tiện, vì bạn không có các loại ràng buộc tài nguyên giống như các dự án thương mại. Nếu bạn có một tình nguyện viên là một chuyên gia viết cơ sở dữ liệu, thì tại sao không sử dụng chúng?
Về lý do tại sao chúng tôi sẽ tin tưởng các tác giả của các hệ thống kiểm soát sửa đổi để biết họ đang làm gì .. Tôi không thể nói cho các VCS khác, nhưng tôi khá tin tưởng rằng Linus Torvalds hiểu các hệ thống tệp .
Tại sao một số hệ thống kiểm soát phiên bản thương mại sử dụng cơ sở dữ liệu quan hệ sau đó?
Rất có thể là một số kết hợp sau đây:
- Một số nhà phát triển không muốn viết cơ sở dữ liệu.
- Các nhà phát triển hệ thống kiểm soát phiên bản thương mại có những hạn chế về thời gian và tài nguyên, vì vậy họ không đủ khả năng để viết cơ sở dữ liệu khi họ đã có thứ gì đó gần với những gì họ muốn. Ngoài ra, các nhà phát triển rất tốn kém và các nhà phát triển cơ sở dữ liệu (như, những người viết cơ sở dữ liệu) có thể đắt hơn, vì hầu hết mọi người không có loại kinh nghiệm đó.
- Người dùng hệ thống kiểm soát phiên bản thương mại ít quan tâm đến chi phí thiết lập và chạy cơ sở dữ liệu quan hệ, vì họ đã có sẵn.
- Người dùng hệ thống kiểm soát phiên bản thương mại có nhiều khả năng muốn có cơ sở dữ liệu quan hệ sao lưu dữ liệu sửa đổi của họ, vì điều này có thể tích hợp với các quy trình của họ tốt hơn (ví dụ như sao lưu).