Công ty của tôi sử dụng cơ sở dữ liệu NoSQL (Mongo) cho sản phẩm của họ. Tuy nhiên, sản phẩm của họ cực kỳ chậm - điều này có thể là do hiệu quả của mã hoặc/và thiết kế cơ sở dữ liệu của họ.Mặc dù tôi không được thuê làm nhà phát triển hay quản trị viên hệ thống và cũng không phải là chuyên gia về thiết kế cơ sở dữ liệu, nhưng tôi thấy phần sau cực kỳ thú vị và nghĩ rằng sẽ rất thú vị khi xem ý kiến của tôi về thiết kế cơ sở dữ liệu của họ hợp lệ hay không hợp lệ như thế nào.
Những điều chính thu hút sự chú ý của tôi là như sau:
Cơ sở dữ liệu có khá nhiều bộ sưu tập khác nhau. Về cơ bản, mọi loại "đối tượng" hiện có khác nhau trong hệ thống của chúng tôi đều có một bộ sưu tập (ít nhiều). Đối với tôi, điều này có vẻ rất giống với cơ sở dữ liệu kiểu SQL, nơi bạn chỉ lưu các liên kết giữa các đối tượng và sau đó truy vấn từ nhiều bảng cùng một lúc. Tuy nhiên, tôi nghĩ rằng lợi ích của NoSQL là cách tiếp cận tập hợp tất cả dữ liệu trong một, phi cấu trúc hơn sẽ cho phép thời gian truy vấn nhanh hơn với chi phí là có một loại cấu trúc lộn xộn. Để đưa ra một ví dụ ngẫu nhiên: Giả sử bạn có tài khoản ngân hàng trong một ứng dụng và có thể có giao dịch giữa các tài khoản. Đối với tôi, kiểu SQL sẽ có hai bảng riêng biệt, một bảng dành cho tài khoản và một bảng dành cho giao dịch. Thay vào đó, kiểu NoSQL sẽ đặt các giao dịch có liên quan ngay bên dưới bộ sưu tập tài khoản thích hợp. Các đối tượng và cấu trúc thực tế trong cơ sở mã của chúng tôi phức tạp hơn nhiều nên tôi hiểu nhu cầu có nhiều bộ sưu tập hơn, nhưng tôi chỉ nghĩ rằng có lẽ như vậy là quá nhiều.
Ngoài việc có các bộ sưu tập riêng biệt, dường như chúng tôi đang thực hiện nhiều truy vấn riêng biệt trên các bộ sưu tập đó, ngay cả khi chúng được liên kết với nhau về mặt ngữ nghĩa. Tôi có đúng không khi cho rằng quy trình này sẽ chậm hơn so với yêu cầu tham gia bắt chước?
Thêm một câu hỏi chung chung: Cơ sở mã quá lớn đối với tôi để thực sự hiểu đầy đủ về hệ thống của chúng tôi, đặc biệt là khi tôi thậm chí không ở vai trò nhà phát triển, nhưng tôi có thể làm bất kỳ điều gì để nhanh chóng xem các truy vấn có thể xảy ra ở đâu không được cấu trúc xấu?
Chúng tôi có nhiều máy chủ DB, một trong số đó là máy chủ và các máy chủ khác sao chép máy chủ để dự phòng trong trường hợp hỏng hóc.Chúng tôi cũng có rất nhiều bản sao hệ thống của chúng tôi truy cập cùng các cơ sở dữ liệu đó (Chà, các cơ sở dữ liệu khác nhau về mặt kỹ thuật, nhưng chúng đang chạy trên cùng một máy chủ). Điều này đôi khi tạo ra rất nhiều kết nối đồng thời. Sẽ không tốt hơn nếu phân chia "cơ sở dữ liệu nào là chủ" giữa các hệ thống và sao chép dữ liệu khi tải thấp? Vì vậy, ví dụ: giả sử tôi có 3 máy chủ DB và 3 phiên bản hệ thống. Hiện tại, cả 3 hệ thống đều truy cập vào cùng một DB chính, được sao chép trên hai nút khác. Sẽ không tốt hơn nếu chỉ định một máy chủ DB cho mỗi hệ thống làm máy chủ để các kết nối được phân chia giữa các máy chủ?
Tôi biết rằng các câu hỏi của tôi khá mơ hồ, nhưng như tôi đã nói, các chủ đề khiến tôi quan tâm mặc dù tôi không có cách nào để thêm nhiều chi tiết vào câu hỏi của mình.