2012-04-06 18 views
8

Tôi đang đùa giỡn với Map Reduce with CouchDB. Một số ví dụ cho thấy một số logic có thể nặng nề trong bản đồ làm giảm chức năng. Trong một trường hợp cụ thể, họ đã biểu diễn cho các vòng trong bản đồ.Chế độ xem CouchDB: Mức độ xử lý có thể chấp nhận được trong bản đồ giảm?

Bản đồ có giảm chạy trên mọi tài liệu có thể có trước khi nó phát ra các tài liệu bạn đã chọn không?

Nếu có, tôi nghĩ điều đó có nghĩa là chạy bất kỳ loại xử lý lặp nào trong phạm vi chức năng giảm bản đồ sẽ làm tăng gánh nặng xử lý theo thứ tự độ lớn, ít nhất.

Về cơ bản nó tóm tắt câu hỏi sau: có thể thực hiện bao nhiêu logic trong bản đồ trước khi truy vấn không hợp lý tốn kém?

Trả lời

8

Rất nhiều xử lý tốn kém có thể chấp nhận được trong bản đồ CouchDB giảm.

Chế độ xem CouchDB (ánh xạ-bản đồ) giống như CREATE INDEX hơn là SELECT FROM.

Cụ thể, CouchDB đảm bảo rằng chức năng bản đồ chỉ chạy chỉ một lần cho mỗi tài liệu. (Vâng, thực sự một lần cho mỗi tài liệu thay đổi bao giờ.) Đó là những gì "lặp lại bản đồ-giảm" là.

Do đó, giả sử bạn có 10.000 tài liệu và họ mất 1 giây thứ hai mỗi quy trình (cao hơn mức tôi từng thấy). Đó là 10.000 giây hoặc 2,8 giờ để xây dựng hoàn toàn chế độ xem. Tuy nhiên khi xem xong, truy vấn bất kỳ hàng nào (?key=...) hoặc lát hàng (?startkey=...&endkey=...) sẽ mất thời gian tương tự như truy vấn trực tiếp tài liệu. Thời gian tra cứu là O (log n) cho số lượng tài liệu.

Nói cách khác, ngay cả khi mất 1 giây cho mỗi tài liệu để thực thi bản đồ, sẽ mất vài phần nghìn giây để tìm nạp kết quả. (Tất nhiên, khung nhìn phải xây dựng trước tiên, vì nó thực sự là một chỉ mục.)

2

Truy vấn db là một hoạt động không liên quan từ bản đồ/giảm của tài liệu. Do đó chi phí truy vấn không bị ảnh hưởng bởi độ phức tạp của bản đồ/giảm.

Trong couchdb bạn đang truy vấn chỉ mục. Điều này có nghĩa đó là bản sao dữ liệu của bạn ở định dạng được tối ưu hóa cho tốc độ truy vấn. Một truy vấn không giống như một tablescan trong sql. Nó không lặp qua các bản ghi.

Vậy làm cách nào để bạn tạo chỉ mục này? Nó được thực hiện thông qua chức năng bản đồ. Hàm bản đồ phát ra một khóa và một giá trị. Chìa khóa được đưa vào chỉ mục. Một số hàm bản đồ phức tạp mà bạn đề cập có thể lặp lại và phát ra nhiều khóa và giá trị. Couchdb là thông minh và chỉ chạy một tài liệu khi nó cần, thường là trên tạo, cập nhật và xóa. Đây là lý do tại sao nó là bản đồ/giảm gia tăng.

Như bạn có thể thấy, một chức năng bản đồ phức tạp có thể tác động đến việc tạo, cập nhật và xóa tốc độ. Nhưng một lần nữa couchdb là thông minh trong đó bạn có thể chỉ định làm thế nào cũ dữ liệu có thể được khi bạn truy vấn chỉ mục.

+1

+1 Tôi đã thoát khỏi từ "truy vấn" có lợi cho "yêu cầu" vì điều đó có vẻ chính xác hơn (đối với tai của tôi). Bạn * yêu cầu * một số dữ liệu từ CouchDB qua HTTP. Nói chung, giống như bất kỳ máy chủ web (có thể mở rộng) nào, dữ liệu là khá nhiều chỉ ngồi đó chờ đợi để được đọc đĩa và gửi xuống dây. Không có tính toán liên quan. – JasonSmith

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