Ưu điểm và nhược điểm của việc sử dụng MongoDB thay vì MS SQL Server
In lạiTác giả: IT Lao GaoThời gian cập nhật: 2023-10-28 11:04:56304
Tôi mới tham gia vào thế giới NoSQL và đang nghĩ đến việc thay thế cơ sở dữ liệu MS Sql Server của mình bằng MongoDB. Ứng dụng của tôi (viết bằng .Net C#) tương tác với camera IP và ghi lại siêu dữ liệu cho từng hình ảnh từ camera vào cơ sở dữ liệu MS SQL. Trung bình tôi chèn khoảng 86400 bản ghi mỗi ngày cho mỗi camera và trong lược đồ cơ sở dữ liệu hiện tại, tôi đã tạo các bảng riêng biệt cho từng hình ảnh camera như Camera_1_Images, Camera_2_Images ... Camera_N_Images. Một bản ghi hình ảnh đơn lẻ bao gồm thông tin siêu dữ liệu đơn giản. Giống như AutoId, FilePath, CreationDate. Để thêm chi tiết, ứng dụng của tôi sẽ khởi động một tiến trình riêng (.exe) cho mỗi camera và mỗi tiến trình sẽ chèn 1 bản ghi mỗi giây vào bảng có liên quan trong cơ sở dữ liệu.
Tôi cần lời khuyên từ chuyên gia (MongoDB) về vấn đề sau:
MongoDB có phải là lựa chọn tốt để lưu trữ dữ liệu sẽ được truy vấn dựa trên khoảng thời gian (ví dụ: truy xuất tất cả hình ảnh từ một camera cụ thể trong một giờ cụ thể) không? Có gợi ý nào về thiết kế lược đồ dựa trên tài liệu cho trường hợp của tôi không?
Thông số kỹ thuật của máy chủ nên như thế nào (CPU, RAM, Ổ đĩa)? Có gợi ý nào không?
Tôi có nên cân nhắc phân mảnh/sao chép trong trường hợp này không (cũng cân nhắc đến hiệu suất ghi vào bộ bản sao được đồng bộ hóa)?
Lợi ích của việc sử dụng nhiều cơ sở dữ liệu trên cùng một máy là gì, trong đó một cơ sở dữ liệu sẽ lưu trữ hình ảnh của ngày hiện tại từ tất cả các camera và một cơ sở dữ liệu thứ hai sẽ được sử dụng để lưu trữ hình ảnh của ngày hôm trước? Tôi đang nghĩ đến việc tách các thao tác đọc và ghi trên các cơ sở dữ liệu riêng biệt. Bởi vì tất cả các yêu cầu đọc có khả năng sẽ được xử lý bởi cơ sở dữ liệu thứ hai và được ghi vào cơ sở dữ liệu thứ nhất. Liệu nó có lợi hay không? Nếu có thì có ý tưởng nào để đảm bảo cả hai cơ sở dữ liệu luôn được đồng bộ không?
Chúng tôi hoan nghênh những đề xuất khác.
1 Câu trả lời
Bản thân tôi là người mới bắt đầu làm quen với cơ sở dữ liệu NoSQL. Vì vậy, tôi trả lời câu hỏi này mặc dù có thể sẽ nhận được nhiều lượt bình chọn tiêu cực, nhưng đây sẽ là một trải nghiệm học hỏi tuyệt vời đối với tôi.
Trước khi cố gắng hết sức để trả lời câu hỏi của bạn, tôi phải nói rằng nếu MS SQL Server hoạt động tốt với bạn thì hãy tiếp tục sử dụng. Bạn chưa đề cập đến bất kỳ lý do hợp lệ nào TẠI SAO bạn muốn sử dụng MongoDB ngoại trừ thực tế là bạn đã tìm hiểu về nó như một cơ sở dữ liệu hướng tài liệu. Hơn nữa, tôi thấy rằng bạn có gần như cùng một tập hợp siêu dữ liệu mà bạn đang chụp cho mỗi camera, tức là lược đồ của bạn là động.
MongoDB có phải là lựa chọn tốt để lưu trữ dữ liệu sẽ được truy vấn dựa trên khoảng thời gian (ví dụ: truy xuất tất cả hình ảnh từ một máy ảnh cụ thể trong khoảng thời gian đã chỉ định) không? Có gợi ý nào về thiết kế lược đồ dựa trên tài liệu cho trường hợp của tôi không?
MongoDB là một cơ sở dữ liệu hướng tài liệu có khả năng truy vấn tuyệt vời ở trong Tổng hợp (bạn gọi chúng là tài liệu). Vì bạn đã lưu trữ dữ liệu của từng camera trong bảng riêng của nó, trong MongoDB, bạn sẽ tạo một bảng riêng bộ sưu tập. Đây là cáchBạn thực hiện truy vấn phạm vi ngày.
Thông số kỹ thuật của máy chủ nên như thế nào (CPU, RAM, Ổ đĩa)? Có gợi ý nào không?
Tất cả cơ sở dữ liệu NoSQL đều được thiết kế để chạy trên phần cứng thông dụng.Tỷ lệ ngangĐược xây dựng. Nhưng cách bạn đặt câu hỏi, bạn có thể đang nghĩ đếnMở rộng quy môđể cải thiện hiệu suất. Bạn có thể bắt đầu với một máy chủ hợp lý và khi tải tăng lên, bạn có thể tiếp tục thêm nhiều máy chủ hơn (mở rộng quy mô). Bạn không cần phải lên kế hoạch và mua một máy chủ cao cấp.
Tôi có nên cân nhắc phân mảnh/sao chép trong trường hợp này không (cũng cân nhắc đến hiệu suất ghi vào bộ bản sao được đồng bộ hóa)?
MongoDB khóa toàn bộ dbNó được thiết kế để ghi đơn lẻ (nhưng sẽ tạo ra các hoạt động khác) và phù hợp với các hệ thống đọc nhiều hơn ghi. Vì vậy, điều này phụ thuộc vào hệ thống của bạn. Có nhiều cách để phân mảnh và chúng phải phù hợp với từng miền cụ thể. Không thể có câu trả lời chung được. Nhưng có thể đưa ra một số ví dụ, chẳng hạn như phân mảnh theo địa lý, theo nhánh, v.v.
Đã cập nhật câu trả lời cho bình luận về phân mảnh
Theo họtài liệu , bạn nên cân nhắc triển khai cụm phân mảnh nếu:
Bộ dữ liệu của bạn gần bằng hoặc vượt quá dung lượng lưu trữ của một nút duy nhất trong hệ thống.
Kích thước bộ nhớ đang hoạt động của hệ thống sẽ sớm vượt quá dung lượng RAM tối đa của hệ thống.
Hệ thống của bạn có lượng hoạt động ghi lớn, một phiên bản MongoDB duy nhất không thể ghi dữ liệu đủ nhanh để đáp ứng nhu cầu và mọi cách tiếp cận khác đều không làm giảm được sự tranh chấp.
Vậy dựa trên điểm cuối cùng thì đúng vậy. Tính năng phân mảnh tự động được thiết kế để mở rộng quy mô ghi. Trong trường hợp này, mỗi Mảnh vỡ Có một khóa ghi, không phải mỗi cơ sở dữ liệu. Nhưng câu trả lời của tôi chỉ là lý thuyết. Tôi khuyên bạn nên tham khảo ý kiến của nhóm 10gen.com.
Về sql - Ưu điểm và nhược điểm của việc sử dụng MongoDB thay vì MS SQL Server, 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/13190468/
Tuần này tôi đang thiết lập một máy SQL Server 2005 chuyên dụng trên Windows Server 2008 và muốn đơn giản hóa nó hết mức có thể nhưng vẫn đảm bảo đầy đủ chức năng. Vì lý do này, tùy chọn Server Core nghe có vẻ hấp dẫn.
Đã đóng. Câu hỏi này không đáp ứng được hướng dẫn của Stack Overflow. Hiện tại không chấp nhận câu trả lời. Câu hỏi này có vẻ không liên quan đến lập trình trong phạm vi được xác định trong trung tâm trợ giúp. . Đã đóng cửa 8 năm trước. Cải thiện
Tôi đã sao lưu cơ sở dữ liệu phiên bản 2014 và thử khôi phục nó trên một máy chủ khác với cơ sở dữ liệu có cùng tên và thông tin đăng nhập. Phiên bản SQL Server này là 2016. Khi khôi phục tệp sao lưu, lỗi này xảy ra: TITLE: Micr
Tôi đã sao lưu cơ sở dữ liệu phiên bản 2014 và thử khôi phục nó trên một máy chủ khác với cơ sở dữ liệu có cùng tên và thông tin đăng nhập. Phiên bản SQL Server này là 2016. Khi khôi phục tệp sao lưu, lỗi này xảy ra: TITLE: Micr
TFS có cung cấp bất kỳ cách nâng cao nào để lưu trữ những thay đổi được thực hiện trên cơ sở dữ liệu SQL Server ngoài việc sử dụng nó để kiểm soát phiên bản tệp văn bản các câu lệnh SQL được thực thi trên cơ sở dữ liệu không? Hoặc chức năng tôi đang tìm kiếm chỉ có sẵn trong các công cụ của bên thứ 3 như
đóng cửa. Câu hỏi này cần được hỏi một cách tập trung hơn. Hiện tại không chấp nhận câu trả lời. Bạn có muốn cải thiện điều này không? Cập nhật câu hỏi để tập trung vào một vấn đề duy nhất bằng cách chỉnh sửa bài đăng này. Đã đóng 9 năm trước. Cải thiện câu hỏi này
Tôi sắp nâng cấp phiên bản SQL Server 2012 của mình lên SQL Server 2014. Tôi đã sao chép một máy chủ Windows VM và đổi tên nó từ foo-2012 thành foo-2014. Khi tôi khởi động lại
Tôi muốn cấp quyền truy cập vào cơ sở dữ liệu cho người dùng đăng nhập SQL Server. Tôi biết về sp_grantdbaccess, nhưng nó đã lỗi thời. Tôi có thể sử dụng gì thay thế và làm sao để kiểm tra xem thông tin đăng nhập có được phép truy cập vào cơ sở dữ liệu hay không? Kịch bản: Người dùng A tạo một cơ sở dữ liệu
Khách hàng không còn lựa chọn nào khác ngoài việc di chuyển từ SQL Server 2000 sang 2008 trong vài ngày tới. Việc thử nghiệm cho thấy hiệu suất suy giảm không thể chấp nhận được đối với các tính năng quan trọng vào năm 2005, nhưng không phải vào năm 2008. Tin tốt là
Tôi có một cơ sở dữ liệu thử nghiệm cần xuất sang môi trường thử nghiệm của khách hàng. Đây sẽ là công việc chỉ làm một lần. Tôi đang sử dụng SQL Server 2005 (cơ sở dữ liệu thử nghiệm của tôi là SQL Server 2005 Express) để thực hiện điều này
Tôi nghĩ R2 là bản vá/gói dịch vụ. Tôi đang tìm bản tải xuống nhưng không thấy. Vậy tôi cho rằng R2 là phiên bản mới và tôi cần phương tiện cài đặt cho SQLServer 2008 R2 để nâng cấp? Ngoài ra, tôi có cần phải trả tiền để cấp giấy phép mới không?
Tôi không thể kết nối với SQL Server bằng SQL Server Management Studio. Tôi có một chuỗi kết nối: Tôi đã thử kết nối bằng cách nhập myIP vào Tên máy chủ, MyID vào Tên đăng nhập,
Chúng tôi muốn mã hóa nhiều cột trong cơ sở dữ liệu của mình bằng mã hóa SQL Server. Chúng ta cũng cần chuyển dữ liệu giữa môi trường sản xuất và môi trường thử nghiệm. Có vẻ như giải pháp tốt nhất là sử dụng cùng một khóa chính, chứng chỉ và khóa đối xứng trên cả máy chủ sản xuất và máy chủ thử nghiệm để tôi có thể
Có công cụ nào có thể phân tích cơ sở dữ liệu SQL Server để tìm ra các vấn đề tiềm ẩn không? Ví dụ: một cột khóa ngoại không được lập chỉ mục sẽ không có FILL FACTOR duy nhất
Tôi đang cố gắng thiết lập sao chép từ phiên bản SQL 2012 BI của mình, nhưng tôi nhận được thông báo lỗi lạ! "Bạn không thể tạo ấn phẩm từ máy chủ 'X' vì
Nếu bạn đang sử dụng SQL Server Authentication (2005), thông tin đăng nhập có được gửi qua mạng dưới dạng văn bản thuần túy không? Câu trả lời tốt nhất là an toàn như bạn muốn... Bạn có thể cấu hình SSL khá dễ dàng nếu bạn không có chứng chỉ đáng tin cậy, nếu bạn buộc
Tôi muốn sao chép dữ liệu từ bảng này sang bảng khác giữa các máy chủ khác nhau. Nếu nó nằm trên cùng một máy chủ và các cơ sở dữ liệu khác nhau, tôi đã sử dụng lệnh sau SELECT * INTO DB1..TBL1 FROM DB2..TBL1 (để sao chép
Tôi hy vọng nhận được sự trợ giúp vì tôi đã gặp vấn đề này trong 2 ngày nay! Tình huống: Tôi có thể kết nối tới SERVER\INSTANCE từ máy phát triển của tôi (và các đồng nghiệp khác), nhưng không thể kết nối từ SQL Server khác. Lỗi tôi nhận được
Tôi đang cố gắng thiết lập sao chép từ phiên bản SQL 2012 BI của mình, nhưng tôi nhận được thông báo lỗi lạ! "Bạn không thể tạo ấn phẩm từ máy chủ 'X' vì
Tôi là một lập trình viên xuất sắc, rất giỏi!