Đồng nghiệp của tôi và tôi đã tạo một vài chương trình kiến trúc máy chủ ứng dụng khách sử dụng đồng bằng để đồng bộ hóa ứng dụng khách với máy chủ. Một vấn đề liên quan đến việc xóa các bản ghi dường như được hiển thị trên nhiều dự án. Làm cách nào một máy chủ có thể xóa bản ghi cục bộ và vẫn có đủ thông tin để tạo thông tin delta delta cho các khách hàng trong tương lai?Làm thế nào để tạo ra các vùng đồng bằng cho dữ liệu bị xóa trong kiến trúc máy chủ khách hàng?
Ví dụ 1:
Một trò chơi thời gian thực sử dụng UDP client-server để đồng bộ hóa lên các đơn vị giữa trò chơi. Chỉ có các vùng đồng bằng có chứa trạng thái trò chơi đã sửa đổi và dữ liệu gói bị bỏ trước đó được truyền đi. Nếu máy chủ xóa một thực thể, nó có thể gửi một delta xóa nói với mọi khách hàng để xóa đối tượng đó. Điều này làm việc trừ khi một gói tin bị loại bỏ. Điều này là ok đối với dữ liệu trạng thái bình thường, vì máy chủ có thể xác định dữ liệu nào bị loại bỏ và truyền lại từ đó, nhưng điều này có nghĩa là máy chủ không thể xóa thực thể máy chủ cục bộ (không thực hiện xác nhận đầy đủ từ mỗi máy khách) dữ liệu sẽ tồn tại để tạo ra delta xóa từ.
Ví dụ 2:
Một khách hàng muốn đồng bộ hóa với cơ sở dữ liệu được lưu trữ trên một máy chủ. Máy chủ lưu trữ ngày sửa đổi cho mỗi bản ghi trên máy chủ. Khi máy khách yêu cầu đồng bộ, nó sẽ truyền ngày cuối cùng mà nó cập nhật. Máy chủ thu thập tất cả các bản ghi đã được sửa đổi kể từ ngày đó và gửi chúng xuống máy khách. Điều này chỉ làm việc với việc xóa nếu máy chủ lưu giữ mọi bản ghi đã từng bị xóa và sử dụng một lá cờ để biểu thị việc xóa. Máy chủ không thể xóa an toàn bản ghi được lưu cục bộ.
Trong cả hai ví dụ, giải pháp duy nhất tôi có thể nghĩ là giữ một số loại bản ghi chứa mọi thứ đã từng bị xóa hoặc buộc toàn bộ đồng bộ sau một ngày/giờ nhất định. Đây không phải là mô hình bền vững hay duyên dáng. Một số phương pháp bền vững để giải quyết loại vấn đề này là gì?
Mức sử dụng đĩa và tăng thời gian tìm kiếm. nếu hàng ngàn khách hàng có khả năng gửi các thay đổi trên máy chủ tất cả thời gian có thể tăng lên trong một năm - và phần tồi tệ nhất là tôi không bao giờ có thể xóa nó đi. Một chiến lược mà tôi nghĩ về mô hình đó là bắt buộc cập nhật đầy đủ sau một khoảng thời gian nhất định, điều đó sẽ cho phép máy chủ xóa các bản ghi nói 3 tháng một lần, nhưng điều này dường như không phải là một mô hình duyên dáng. Trong ví dụ UDP, tôi đoán tôi có thể có một số băm được truyền đi với đối tượng để xác định xem bản ghi đang được tái sử dụng bởi một đối tượng mới hay chưa. –
Chỉ cần đọc và thấy rằng Microsoft sử dụng một mô hình ngày hết hạn với việc ném đá mộ như tôi đã mô tả. –
Vâng tôi đã nghĩ đến việc sử dụng mô hình loại CQRS xử lý tất cả các vùng đồng bằng, và có một chồng thay đổi phiên bản, nhưng có thể kết hợp vấn đề lưu trữ cụ thể này. Tôi sẽ phải lưu trữ toàn bộ lịch sử phiên bản cho mỗi bản ghi hoặc giới thiệu một số loại thời gian chụp nhanh. –