giá trị 2 xu của tôi. Một chút khao khát nhưng ...... Tôi đã có một yêu cầu tương tự trong một trong những dự án ươm tạo của mình. Tương tự như của bạn, các yêu cầu chính của tôi trong đó có cơ sở dữ liệu tài liệu (xml trong trường hợp của tôi), với lập phiên bản tài liệu. Nó dành cho một hệ thống nhiều người dùng với nhiều trường hợp sử dụng cộng tác. Sở thích của tôi là sử dụng các giải pháp mã nguồn mở có sẵn hỗ trợ hầu hết các yêu cầu chính.
Để cắt theo đuổi, tôi không thể tìm thấy bất kỳ sản phẩm nào cung cấp cả hai, theo cách đủ khả năng mở rộng (số lượng người dùng, khối lượng sử dụng, tài nguyên lưu trữ và máy tính). Tôi thiên về git cho tất cả các khả năng đầy hứa hẹn và (có thể xảy ra) giải pháp mà người ta có thể tạo ra từ nó. Khi tôi đùa giỡn với tùy chọn git nhiều hơn, việc chuyển từ góc độ người dùng đơn lẻ sang góc độ người dùng đa (milli) trở thành một thách thức rõ ràng. Thật không may, tôi đã không thực hiện phân tích hiệu suất đáng kể như bạn đã làm. (.. lười biếng / bỏ sớm .... cho phiên bản 2, câu thần chú) Power to you !. Dù sao đi nữa, ý tưởng thành kiến của tôi đã chuyển sang phương án thay thế tiếp theo (vẫn thiên vị): một tập hợp các công cụ tốt nhất trong các lĩnh vực, cơ sở dữ liệu và kiểm soát phiên bản riêng biệt của chúng.
Trong khi vẫn đang trong quá trình làm việc (... và hơi bị bỏ quên), phiên bản biến hình chỉ đơn giản là thế này.
- trên giao diện người dùng: (giao diện người dùng) sử dụng cơ sở dữ liệu để lưu trữ cấp 1 (giao tiếp với các ứng dụng người dùng)
- trên phần phụ trợ, sử dụng hệ thống kiểm soát phiên bản (VCS) (như git) để thực hiện lập phiên bản của các đối tượng dữ liệu trong cơ sở dữ liệu
Về bản chất, việc thêm một plugin kiểm soát phiên bản vào cơ sở dữ liệu, với một số keo tích hợp, bạn có thể phải phát triển, nhưng có thể dễ dàng hơn nhiều.
Cách nó sẽ (được cho là) hoạt động là việc trao đổi dữ liệu giao diện đa người dùng chính thông qua cơ sở dữ liệu. DBMS sẽ xử lý tất cả các vấn đề phức tạp và thú vị như đa người dùng, đồng thời e, hoạt động nguyên tử, v.v. Trên phần phụ trợ, VCS sẽ thực hiện kiểm soát phiên bản trên một tập hợp các đối tượng dữ liệu (không có vấn đề đồng thời hoặc nhiều người dùng). Đối với mỗi giao dịch hiệu quả trên cơ sở dữ liệu, việc kiểm soát phiên bản chỉ được thực hiện trên các bản ghi dữ liệu đã thay đổi hiệu quả.
Đối với keo giao diện, nó sẽ ở dạng một chức năng liên kết đơn giản giữa cơ sở dữ liệu và VCS. Về mặt thiết kế, cách tiếp cận đơn giản sẽ là giao diện hướng sự kiện, với cập nhật dữ liệu từ cơ sở dữ liệu sẽ kích hoạt các thủ tục kiểm soát phiên bản (gợi ý: giả sử Mysql, sử dụng trình kích hoạt và sys_exec () blah blah ...). Về mức độ phức tạp của việc triển khai, nó sẽ bao gồm từ đơn giản và hiệu quả (ví dụ: script) đến phức tạp và tuyệt vời (một số giao diện kết nối được lập trình). Tất cả phụ thuộc vào mức độ điên rồ bạn muốn làm với nó và số vốn mồ hôi bạn sẵn sàng bỏ ra. Tôi nghĩ rằng kịch bản đơn giản sẽ làm nên điều kỳ diệu. Và để truy cập vào kết quả cuối cùng, các phiên bản dữ liệu khác nhau, một giải pháp thay thế đơn giản là điền một bản sao của cơ sở dữ liệu (bản sao của cấu trúc cơ sở dữ liệu) với dữ liệu được tham chiếu bởi thẻ phiên bản / id / hash trong VCS. một lần nữa, bit này sẽ là một công việc truy vấn / dịch / bản đồ đơn giản của một giao diện.
Vẫn còn một số thách thức và ẩn số cần được xử lý, nhưng tôi cho rằng tác động và mức độ liên quan của hầu hết những thách thức này sẽ phụ thuộc phần lớn vào các yêu cầu ứng dụng và trường hợp sử dụng của bạn. Một số có thể không phải là vấn đề. Một số vấn đề bao gồm kết hợp hiệu suất giữa 2 mô-đun chính, cơ sở dữ liệu và VCS, cho một ứng dụng có hoạt động cập nhật dữ liệu tần suất cao, Chia tỷ lệ tài nguyên (khả năng lưu trữ và xử lý) theo thời gian ở phía git dưới dạng dữ liệu và người dùng phát triển: ổn định, theo cấp số nhân hoặc cuối cùng là bình nguyên
Trong số các loại cocktail ở trên, đây là thứ tôi hiện đang pha
- sử dụng Git cho VCS (ban đầu được coi là CVS cũ tốt do chỉ sử dụng các tập thay đổi hoặc delta giữa 2 phiên bản)
- bằng cách sử dụng mysql (do bản chất dữ liệu của tôi có cấu trúc cao, xml với các lược đồ xml nghiêm ngặt)
- đùa giỡn với MongoDB (để thử cơ sở dữ liệu NoSQl, cơ sở dữ liệu này khớp chặt chẽ với cấu trúc cơ sở dữ liệu gốc được sử dụng trong git)
Một số thông tin thú vị - git thực sự thực hiện những việc rõ ràng để tối ưu hóa lưu trữ, chẳng hạn như nén và chỉ lưu trữ các delta giữa các bản sửa đổi của các đối tượng - CÓ, git chỉ lưu trữ các tập thay đổi hoặc delta giữa các bản sửa đổi của các đối tượng dữ liệu, nó có thể áp dụng được ở đâu (nó biết khi nào và như thế nào). Tham khảo: packfiles, sâu trong ruột của Git internals
- Đánh giá về lưu trữ đối tượng của git (hệ thống tệp có thể địa chỉ theo nội dung), cho thấy những điểm tương đồng (từ quan điểm khái niệm) với cơ sở dữ liệu noSQL như mongoDB. Một lần nữa, với chi phí đổ mồ hôi, nó có thể cung cấp nhiều khả năng thú vị hơn để tích hợp 2 và điều chỉnh hiệu suất
Nếu bạn hiểu được điều này, hãy để tôi xem điều trên có thể áp dụng cho trường hợp của bạn không và giả sử như vậy, nó sẽ giải quyết vấn đề như thế nào đối với một số khía cạnh trong phân tích hiệu suất toàn diện cuối cùng của bạn