2016-11-22 23 views
9

Tôi vừa nhận thấy rằng trong the release notes của Couchdb 2.0, đề cập đến các truy vấn Mango được đề xuất cho các ứng dụng mới. Nó cũng được đề cập rằng các chỉ mục Mango rõ ràng là từ 2x đến x10 nhanh hơn các truy vấn javascript khiến tôi ngạc nhiên, vì vậy tôi có một số câu hỏi:Hiệu suất Mango Couchdb vs Bản đồ Giảm lượt xem

  • Chế độ xem Bản đồ/Giảm có bị loại bỏ không? Tôi hy vọng câu trả lời là không vì có vẻ như Mango không bao gồm tất cả các trường hợp sử dụng Map/Reduce (ví dụ đơn giản nhất là tự giảm), và tính linh hoạt của kiểu truy vấn này cũng bị giới hạn hơn. Nhưng m thích hỏi vì đề xuất:

Chúng tôi khuyên tất cả các ứng dụng mới bắt đầu sử dụng Mango làm mặc định.

  • Chúng ta biết rằng đồ/Giảm quan điểm dựa trên B-cây, nhưng tôi không thể tìm thấy bất kỳ cái nhìn sâu sắc, trong doc hoặc danh sách gửi thư về sự kỳ diệu đằng sau Mango. Mango cơ bản là ma thuật trắng cho tôi vào phút đó. Tuy nhiên, tôi có thể nói rằng có một kiến ​​thức chuyên sâu về cách xem javascript được lập chỉ mục đằng sau hậu trường là rất hữu ích để tránh những cạm bẫy, triển khai ngây thơ cũng như tối ưu hóa hiệu suất. Có ai có bất kỳ cái nhìn sâu sắc về cách Mango hoạt động? Có phải chỉ mục B-cây quá không? Khi nào các chỉ mục được cập nhật vì không còn tài liệu thiết kế nữa? Hiệu suất đạt được từ đâu? (những lợi ích này phản trực giác với tôi, vì trong sự hiểu biết của tôi, hiệu suất của các truy vấn javascript đến từ bản chất tiền đề của các hàm Bản đồ)

Điều tôi chủ yếu là sau đây là một số thông tin chi tiết về Mango và mặt khác, tổng quan về cách Mango và Map/Reduce được cho là sống chung với nhau trong kỷ nguyên 2.x.

Trả lời

3

trả lời từ một nhà phát triển cốt lõi:

Một số câu hỏi tốt. Tôi không nghĩ Mango sẽ thay thế hoàn toàn Map/Reduce . Nó là một công cụ truy vấn thay thế. Điều tuyệt vời về cú pháp truy vấn Mango là là dễ hiểu hơn nhiều và bắt đầu. Và chúng tôi có thể sử dụng nó ở nhiều nơi bên ngoài chỉ truy vấn tài liệu. Nó có thể được sử dụng để lọc sao chép và nguồn cấp dữ liệu thay đổi. Chúng tôi hy vọng sẽ sớm có hỗ trợ xác nhận tài liệu cập nhật tài liệu.

Bên dưới Mango đang sử dụng bản đồ/thu nhỏ của Erlang. Điều này có nghĩa là chỉ cần tạo chỉ mục B-tree giống như bản đồ/giảm. Điều làm cho nó nhanh hơn là rằng nó đang sử dụng các hàm erlang/native để tạo B-Tree thay vì của javascript. Tôi đã viết một bài đăng blog một thời gian dài trước đây về internals của PouchDB-tìm thấy [1] đó là cú pháp xoài cho PouchDB. Nó có thể giúp bạn hiểu thêm một chút về cách thức hoạt động của nội bộ. Điều quan trọng cần hiểu là có một phần truy vấn Bản đồ sử dụng bộ lọc B-Tree và bộ lọc trong bộ nhớ. Lý tưởng là lọc ít bộ nhớ hơn làm truy vấn của bạn sẽ nhanh hơn.

Tôi xin nói rằng Mango là một công việc rất nhiều trong quá trình nhưng công việc cơ bản được thực hiện. Có những thứ chắc chắn chúng ta có thể cải thiện. Tôi đã thấy nó được sử dụng khá nhiều khi các nhà phát triển bắt đầu một dự án mới vì truy vấn cơ bản và nhanh chóng đơn giản, giống như tìm địa chỉ email hoặc tìm tất cả người dùng có tên "John Rambo".

Hy vọng điều đó sẽ hữu ích.

[1] http://www.redcometlabs.com/blog/2015/12/1/a-look-under-the-covers-of-pouchdb-find

+0

Nguồn của câu trả lời này là gì? Tôi biết đó là từ một nhà phát triển cốt lõi - ai? –

7

Gần đây tôi đã cố chuyển ứng dụng sang sử dụng truy vấn Mango, với kết quả là xóa hoàn toàn và chuyển về bản đồ/giảm. Dưới đây là một vài lý do của tôi:

  1. Mango là lỗi khi xử lý các truy vấn không chỉ định chính xác chỉ mục để sử dụng. Điều này đã khiến tôi dốt nát trong một thời gian cuối tuần trước. Nếu bạn không chỉ định chỉ mục, đôi khi chỉ mục thay thế sẽ được chọn và trả lại không có kết quả (hoặc không chính xác).
  2. Hiệu suất xoài không phải là 'ma thuật'. Nhiều loại truy vấn sẽ kết thúc trong tìm kiếm bộ nhớ. Couch sẽ chọn chỉ số phù hợp nhất sau đó diễu qua tất cả các bản ghi trong bộ nhớ để phù hợp với các trường hợp góc. Làn sóng có mây trên một số vấn đề này bằng cách nói để sử dụng các tìm kiếm dựa trên 'văn bản', không có sẵn trong Couchdb.
  3. Như bạn đã chỉ ra, tìm kiếm Mango chỉ đơn giản là không thể xử lý một số loại cấu trúc truy vấn tốt. Tôi sẽ không xem xét ứng dụng của mình quá phức tạp nhưng tôi đã gặp phải một số tình huống mà tôi không thể xây dựng một truy vấn Mango phù hợp cho nhiệm vụ trong tầm tay. Một phần quan trọng ở đây là tìm kiếm các mảng để tìm các thẻ (ví dụ: tìm kiếm để xem người dùng là thành viên của nhóm). Mango không thể chỉ mục các phần tử mảng để các khu nghỉ mát thực hiện quét toàn bộ trong bộ nhớ.
  4. Chế độ xem có một số tính năng rất mạnh mẽ để chuyển đổi kết quả tìm kiếm dưới dạng Danh sách. Điều đó không tồn tại trong Mango.

Số dặm của bạn có thể thay đổi, nhưng chỉ muốn để lại cảnh báo rằng đây vẫn là những tính năng hoàn toàn mới.

+0

Quan điểm, danh sách làm cho một kết hợp đáng kinh ngạc. Rất tiếc khi thấy danh sách không được chấp nhận. –

1

Tôi mới làm quen với Mango và CouchDB nhưng tôi nghĩ tôi có thể cung cấp một số thông tin chi tiết.Khi chỉ mục/chế độ xem của bạn được cập nhật, Mango không nhanh hơn. Việc đạt được hiệu suất lớn với Mango là khi bạn đang tạo chỉ mục lần đầu tiên vì đi văng không cần phải tạo ra một quy trình couchj riêng biệt cho việc này.

Tôi thấy rằng Mango hoạt động tốt ngay cả khi một số tài liệu của bạn lớn. Hiện tại với CouchDB 2.0.0, ít nhất với các cửa sổ, các tài liệu lớn gặp sự cố với máy chủ xem couchjs.exe được sử dụng với Map/Reduce. Đây không phải là trường hợp với CouchDB 1.6.1 và đã được cố định trong phiên bản phát triển https://github.com/apache/couchdb-couch/commit/1659fda5dd1808f55946a637fc26c73913b57e96

+0

Tôi có thể xác nhận vấn đề bộ nhớ này với tài liệu lớn và couchjs cũng là một vấn đề lớn đối với tôi. – reddy

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