lý lịch
Tôi đang tạo mẫu chuyển đổi từ cơ sở dữ liệu RDBMS của chúng tôi sang MongoDB. Khi không chuẩn hóa, có vẻ như tôi có hai tùy chọn, một tùy chọn dẫn đến nhiều (hàng triệu) tài liệu nhỏ và một tùy chọn dẫn đến ít hơn (hàng trăm nghìn) tài liệu lớn.
Nếu tôi có thể chắt lọc điều này thành một phép loại suy đơn giản, thì đây sẽ là sự khác biệt giữa các bộ sưu tập có ít tài liệu khách hàng hơn (bằng Java):
lớp Khách hàng { private String name; private Address address; // mỗi CreditCard có hàng trăm trường hợp Thanh toán private Set creditCards;}
Hoặc một bộ sưu tập chứa rất nhiều chứng từ thanh toán như thế này:
lớp Thanh toán { private Khách hàng khách hàng; private Thẻ tín dụng creditCard; private Ngày trả lương; private float số tiền trả lương;}
câu hỏi
Thiết kế của MongoDB thiên về nhiều, nhiều tài liệu nhỏ hay ít tài liệu lớn hơn? Câu trả lời có chủ yếu phụ thuộc vào truy vấn tôi dự định chạy không? (tức là Khách hàng X có bao nhiêu thẻ tín dụng? so với Số tiền trung bình mà tất cả khách hàng thanh toán vào tháng trước là bao nhiêu?)
Tôi đã xem xét xung quanh nhưng không tìm thấy bất kỳ phương pháp hay nhất về kiến trúc MongoDB nào có thể giúp trả lời câu hỏi của tôi.
Bạn chắc chắn cần phải tối ưu hóa cho truy vấn bạn đang thực hiện.
Dựa trên mô tả của bạn, đây là dự đoán tốt nhất của tôi.
Bạn có thể muốn biết tất cả các thẻ tín dụng của từng khách hàng, vì vậy hãy giữ một mảng trong đối tượng khách hàng. Bạn cũng có thể muốn có một tài liệu tham khảo của khách hàng cho mỗi khoản thanh toán. Điều này sẽ giữ cho chứng từ thanh toán tương đối nhỏ.
Đối tượng thanh toán sẽ tự động có ID và chỉ mục riêng. Bạn cũng có thể muốn thêm chỉ mục vào tài liệu tham khảo của khách hàng.
Điều này sẽ cho phép bạn nhanh chóng tìm kiếm các khoản thanh toán của khách hàng mà không cần phải lưu trữ toàn bộ đối tượng khách hàng mỗi lần.
Nếu bạn muốn trả lời những câu hỏi nhưNhững câu hỏi như “Số tiền trung bình mà tất cả khách hàng phải trả trong tháng trước là bao nhiêu?”, bạn sẽ cần cung cấp bản đồ/thu nhỏ cho bất kỳ tập dữ liệu lớn nào. Bạn không nhận được phản hồi này "trong thời gian thực". Bạn sẽ thấy rằng việc lưu trữ một "tài liệu tham khảo" cho Khách hàng có thể đủ cho những lần thu nhỏ bản đồ này.
Vì vậy, để trả lời câu hỏi của bạn trực tiếp:MongoDB được thiết kế để ưu tiên nhiều tài liệu nhỏ hay ít tài liệu lớn hơn?
MongoDB được thiết kế để tìm các mục chỉ mục rất nhanh chóng. MongoDB rất giỏi tìm kim đáy bể. MongoDB KHÔNGRất giỏi mò kim đáy bểhầu hết. Vì vậy, hãy xây dựng dữ liệu của bạn xung quanh các trường hợp sử dụng phổ biến nhất và viết công việc ánh xạ/giảm bớt cho các trường hợp sử dụng hiếm gặp.
Giới thiệu về thiết kế cơ sở dữ liệu - Thiết kế lược đồ MongoDB - nhiều tài liệu nhỏ hoặc ít tài liệu lớn hơn? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/3038703/
Tôi là một lập trình viên xuất sắc, rất giỏi!