Vì vậy, tôi có một ứng dụng mà cần phải lưu trữ thông tin cấu hình nhất định, và vì vậy tôi đang lên kế hoạch về lưu trữ các configs như tài liệu JSON đơn giản trong Mongo:Đối tượng được phiên bản/Ánh xạ JSON đến/từ Mongo?
appConfig: {
fizz: true,
buzz: 34
}
này có thể ánh xạ một Java POJO/tổ chức như:
public class AppConfig {
private boolean fizz;
private int buzz;
}
vv Thông thường, với cơ sở dữ liệu quan hệ, tôi sử dụng Hibernate/JPA cho O/R ánh xạ từ dữ liệu bảng đến/từ thực thể Java. Tôi tin đồng hành JSON/Mongo gần nhất với bảng/Hibernate là một kết hợp Morphia/GSON: sử dụng Morphia để kết nối từ ứng dụng Java của tôi tới Mongo và sau đó sử dụng GSON để O/J ánh xạ JSON tới/từ Java POJOs/thực thể.
Vấn đề ở đây là, theo thời gian, cấu trúc tài liệu appConfig
của tôi sẽ thay đổi. Nó có thể là một cái gì đó đơn giản như:
appConfig: {
fizz: true,
buzz: 34
foo: "Hello!"
}
Mà sau đó sẽ yêu cầu các POJO/tổ chức để trở thành:
public class AppConfig {
private boolean fizz;
private int buzz;
private String foo;
}
Nhưng vấn đề là tôi có thể có hàng chục ngàn tài liệu JSON đã được lưu trữ trong Mongo không có foo
thuộc tính trong đó. Trong trường hợp cụ thể này, giải pháp rõ ràng là để thiết lập một mặc định trên tài sản như:
public class AppConfig {
private boolean fizz;
private int buzz;
private String foo = "Hello!"
}
Tuy nhiên trong thực tế, cuối cùng các AppConfig
tài liệu/schema/cấu trúc có thể thay đổi nhiều đến nỗi nó không có cách nào, hình dạng hoặc hình thức tương tự như thiết kế ban đầu của nó. Nhưng kicker là: Tôi cần phải tương thích ngược và tốt nhất là có khả năng cập nhật/chuyển đổi tài liệu để phù hợp với lược đồ/cấu trúc mới khi thích hợp.
Câu hỏi của tôi: vấn đề "phiên bản tài liệu" này thường được giải quyết như thế nào?
Cảm ơn @Lucky Coder (+1), nhưng điều đó có vẻ là thêm về lĩnh vực thức hơn xử lý thay đổi phiên bản tài liệu giản đồ kết hợp với JPA. – IAmYourFaja