7

Tôi có cấu trúc dữ liệu đồ thị được hướng dẫn, nơi tôi đang cố triển khai kiểm soát phiên bản riêng lẻ cho từng đỉnh. Điều này tạo ra một số kịch bản thú vị, và tôi sẽ đánh giá cao bất kỳ ý tưởng nào mà các bạn có. Cụ thể, tôi đang tìm cách giải quyết hành vi mặc định của hệ thống khi gặp phải các kịch bản đã nêu.Đồ thị và kiểm soát phiên bản

Xem hình ảnh sau: Graph versions

Kịch bản 1: "Các Null Pointer Nghịch lý"

Vertex A được cuộn lại lên phiên bản 1.0. Kể từ khi rollback này sẽ cascade xuống subgraph của nó, C sẽ không còn trỏ đến D. Điều này có thể tạo ra một mối nguy hiểm. Nên hành vi được cho:

  • 1,1: Xóa rìa C -> D, tạo ra một biểu đồ bị hỏng
  • 1.2: Xóa D, để lại E mồ côi
  • 1.3: Xóa D và E
  • 1,4 : Từ chối thực hiện khôi phục trước khi tất cả các cạnh trỏ tới D (sẽ là E -> D trong trường hợp này) sẽ bị xóa
  • 1.X: Giải pháp thay thế?

Kịch bản 2: "Tác động gián tiếp"

Vertex D được cập nhật, vì vậy mà sau giữ:

  • D tại là phiên bản 1.2
  • E tại là phiên bản 1.1
  • C hiện là phiên bản 1.3
  • A hiện là phiên bản 1.3

Vertex Một hiện đang cuộn lại lên phiên bản 1.2, do đó sau giữ:

  • Một tại là phiên bản 1.2
  • C tại là phiên bản 1.2
  • D tại là phiên bản 1.1

nên hành vi mặc định là để:

  • 2.1: Cuộn lùi E xuống 1.0
  • 2.2: Từ chối quay lại do lỗi phiên bản, chức năng làm suy giảm hiệu lực
  • 2.X: Giải pháp thay thế?

Trả lời

4

Dường như với tôi rằng có một số nhầm lẫn về mức độ chi tiết ở đây. Nếu bạn chỉ phiên bản các đỉnh riêng lẻ chứ không phải biểu đồ, thì việc quay trở lại một đỉnh riêng lẻ sẽ không ảnh hưởng đến phần còn lại của biểu đồ. Nếu, OTOH, bạn muốn toàn bộ biểu đồ được cuộn lại, sau đó bạn cũng nên phiên bản toàn bộ biểu đồ.

Vấn đề là nếu bạn chỉ phiên bản các đỉnh riêng lẻ, thì bạn chỉ có đảm bảo tính toàn vẹn cho các đỉnh riêng lẻ, nhưng không phải cho toàn bộ đồ thị. Vì vậy, nếu, như bạn mô tả nó, lăn ngược một đỉnh riêng lẻ "gợn sóng qua" toàn bộ biểu đồ (hoặc ít nhất là đồ thị được kết nối), thì bạn không được đảm bảo kết thúc ở trạng thái nhất quán.

Nghiên cứu dường như gần nhất với những gì bạn đang cố gắng, là về kiểm soát phiên bản cho XML, tuy nhiên, chỉ đề cập đến các cây được đánh máy mạnh (IOW degenerate graphs), chứ không phải đồ thị chung.

+0

Xin lỗi vì không rõ ràng hơn. –

+0

Giả sử ở đây các cạnh thuộc về và được phiên bản với đỉnh. Do đó, bằng cách mở rộng, một nút gốc subgraph, chẳng hạn như A, được phiên bản theo những thay đổi trong toàn bộ đồ thị con của nó. Như đã chỉ ra, điều này có hiệu lực tạo ra không chỉ lồng nhau, nhưng máy bay toàn vẹn đa chiều (hoặc lớp), có thể giao nhau. Rõ ràng tại thời điểm này, mọi giải pháp khả thi cho vấn đề này đều nằm ngoài khả năng cá nhân của tôi trong toán học. –

+0

Các giải pháp khả thi duy nhất mà tôi có thể thấy tại thời điểm này là: A) Chỉ các phiên bản đỉnh không quan tâm đến hình ảnh con và siêu đồ thị. Về cơ bản, giá trị nhưng không cấu trúc B) Hạ xuống cấu trúc cây C) Một sự thỏa hiệp, trong đó bối cảnh kiểm soát phiên bản được đặt rõ ràng cho bất kỳ đồ thị con nào, nhưng không cho phép ngữ cảnh lồng nhau; hoặc, trong đó ngữ cảnh lồng nhau bị bỏ qua bởi ngữ cảnh cấp cao hơn, do đó phần nào tách cấu trúc dữ liệu và cấu trúc điều khiển phiên bản Bạn có thể chỉ cho tôi nghiên cứu mà bạn đã đề cập không? –

6

Điều bạn đang xử lý là một vấn đề rất phức tạp và mặc dù tôi không biết các dự án nghiên cứu tập trung cụ thể về vấn đề này, tôi đã nghe một số nỗ lực để quản lý vấn đề. về cơ bản là không thể rút ra một giải pháp nhanh chóng và bẩn.Tôi có thể chỉ cho bạn các câu hỏi trước tôi hỏi về vấn đề này (đồ thị và kiểm soát phiên bản):

Những gì tôi đã kết thúc làm được từ chối thực hiện bất kỳ loại kiểm soát sửa đổi , nhưng thay vào đó, tạo các nút mới với danh tính mới mỗi lần. Tôi mất hồi tố, tôi mất bất kỳ loại theo dõi nào, nhưng tôi giữ được thứ có thể quản lý được.

Thực tế, điều duy nhất bạn có thể làm là kiểm soát toàn bộ đồ thị cho toàn bộ đồ thị. Rất khó để có nó cho các nút riêng lẻ. Tất cả các vấn đề bạn mô tả phát sinh từ thực tế là bạn đang chuyển qua các lớp giao dịch, trong mỗi lớp bạn có một biểu đồ nhất quán như được hình thành trong một thời điểm cụ thể. Nếu bạn vượt qua các lớp này, cho phép kiểm soát sửa đổi đỉnh, bạn đang đối phó với một lon sâu, Dune có kích thước.

+0

Bằng cách thêm các nút mới với thời gian, nó dường như không quá khó đối với tôi để phiên bản toàn bộ đồ thị - tất cả phải mất là một danh sách (một nút khác?) của tất cả các nút (được xác định bằng dấu thời gian + ID) tại thời điểm bạn tạo bản sửa đổi. Thậm chí có thể cho phép một điểm nút sửa đổi tại tất cả các nút của bản sửa đổi? Quay lại về cơ bản có nghĩa là truy vấn tất cả các nút được kết nối của một nút sửa đổi nhất định. – CoDEmanX

Các vấn đề liên quan