2011-12-19 37 views
8

Tôi đang đọc trên MongoDB, và cố gắng để có được một cảm giác về nơi nó được sử dụng tốt nhất. Một câu hỏi mà tôi không thấy một câu trả lời rõ ràng là những hoạt động nào rẻ hay đắt tiền, và dưới những điều kiện nào.Những hoạt động nào rẻ/đắt tiền ở Mongodb?

Bạn có thể giúp làm rõ?

Cảm ơn.

Trả lời

4

Người ta thường cho rằng mongodb có ghi nhanh điên cuồng. Trong khi họ không thực sự chậm, điều này khá là quá đáng. Viết thông lượng trong mongodb bị giới hạn bởi khóa ghi toàn cục. Có, bạn đã nghe tôi nói đúng, chỉ có thể có ONE hoạt động ghi xảy ra trên máy chủ tại bất kỳ thời điểm cụ thể nào.

Ngoài ra, tôi khuyên bạn nên tận dụng lợi thế của tính chất schemaless của mongodb và lưu trữ dữ liệu của bạn không chuẩn hóa. Thường thì có thể làm chỉ một đĩa tìm nạp tất cả các dữ liệu cần thiết (vì nó là tất cả trong cùng một tài liệu). Tìm kiếm đĩa ít hơn - truy vấn nhanh hơn.

Nếu dữ liệu nằm trong RAM - không cần tìm đĩa nào cả, dữ liệu được phân phối ngay từ bộ nhớ. Vì vậy, hãy chắc chắn rằng bạn có đủ RAM.

Map/Reduce, group, $where truy vấn chậm.

Không nên ghi nhanh vào một tài liệu lớn (ví dụ: sử dụng $push). Tài liệu sẽ vượt quá ranh giới đĩa của nó và sẽ phải được sao chép sang một nơi khác, trong đó bao gồm nhiều hoạt động đĩa.

Và tôi đồng ý với @AurelienB, một số nguyên tắc cơ bản là phổ quát trên tất cả các cơ sở dữ liệu.

+0

Những gì tôi nghe bạn nói là "mongodb có ghi rất nhanh, nhưng hệ thống khóa giới hạn bạn một lần tại một thời điểm." Liệu điều đó có áp dụng ngay cả với sharding? – Abe

+0

Không, sharding giảm thiểu vấn đề này. Mỗi mảnh vỡ đều có khóa riêng. –

1

Điều này không khác nhiều so với tất cả các hệ thống cơ sở dữ liệu.

Truy vấn trên dữ liệu được lập chỉ mục rất nhanh. Truy vấn trên rất nhiều dữ liệu là ... chậm. Do không chuẩn hóa, nếu không có chỉ mục, việc viết trên cơ sở sẽ nhanh, đó là lý do tại sao ghi nhật ký là trường hợp sử dụng cơ bản.

Ở phía đối diện, đọc dữ liệu trên đĩa (không phải trong RAM) mà không có chỉ mục có thể rất chậm khi bạn có hàng tỷ tài liệu.

3

Từ thực tế của tôi một điều mà nên đề cập là mongodb không phù hợp để báo cáo, vì bình thường trong báo cáo bạn cần dữ liệu từ các bộ sưu tập khác nhau ('tham gia') và mongodb không cung cấp cách tốt để tổng hợp dữ liệu nhiều bộ sưu tập (và không phải cung cấp). Để chắc chắn đối với một số báo cáo bản đồ/giảm hoặc incremental, bản đồ/giảm có thể hoạt động tốt, nhưng các trường hợp hiếm gặp.

Đối với các báo cáo một số người đề xuất di chuyển dữ liệu vào cơ sở dữ liệu quan hệ, có rất nhiều công cụ để báo cáo.

Các vấn đề liên quan