Truy vấn trong Apache CouchDB: Lượt xem – Chick Golden

Related Articles

Trong bài viết này, tôi sẽ nói về cách truy vấn tài liệu trong Apache CouchDB trải qua Chế độ xem .Apache CouchDB là gì ?Giới thiệu ngắn gọn về CouchDB trước cho những ai chưa biết. Apache CouchDB là một cơ sở tài liệu NoSQL hướng tài liệu mã nguồn mở, được thực thi trong Erlang. Nó rất dễ sử dụng vì CouchDB sử dụng giao thức HTTP thông dụng và định dạng tài liệu JSON. Hãy kiểm tra Trang web chính thức của họ để biết thêm cụ thể đơn cử. 😉 Được rồi, quay lại chủ đề chính của toàn bộ tất cả chúng ta ngày thời điểm ngày hôm nay. ✌

Trước hết, trước khi chúng ta nói về view là gì, tôi cần giới thiệu 2 điều quan trọng trong CouchDB.

Bạn đang đọc : Truy vấn trong Apache CouchDB : Lượt xem

Máy chủ truy vấnĐiều tiên phong cần ra đời là Máy chủ truy vấn CouchDB. Máy chủ truy vấn là gì ? Dựa trên tài liệu chính thức :

Máy chủ truy vấn là một tiến trình quá trình bên ngoài tiếp xúc với CouchDB bằng giao thức JSON trải qua giao diện stdio và xử lý và giải quyết và xử lý hàng loạt những lệnh gọi hàm phong thái phong cách thiết kế, ví dụ điển hình như những khung nhìn JavaScript .

Theo mặc định, CouchDB có một sever truy vấn Javascript cài sẵn chạy qua Mozilla SpiderMonkey. Điều đó có nghĩa là toàn bộ tất cả chúng ta trọn vẹn hoàn toàn có thể xác lập một hàm javascript để cho CouchDB biết bạn muốn truy vấn những tài liệu nào .

Lưu ý : Nếu bạn không thích Javascript, Bạn trọn vẹn hoàn toàn có thể sử dụng sever truy vấn ngôn từ lập trình khác như Python, Ruby, Clojure, v.v. Bạn trọn vẹn hoàn toàn có thể tìm thấy thông số kỹ thuật kỹ thuật sever truy vấn tại đây

Ooookay, vậy thì định nghĩa hàm javascript ở đâu ? 🤔 đó là điều thứ hai để ra đời .

Thiết kế văn bảnTài liệu Thiết kế là một tài liệu đặc biệt quan trọng trong cơ sở tài liệu CouchDB. Bạn hoàn toàn có thể sử dụng tài liệu phong cách thiết kế để kiến thiết xây dựng chỉ mục, xác nhận update tài liệu, định dạng tác dụng truy vấn và lặp lại bộ lọc. Dưới đây là một ví dụ về cấu trúc tài liệu phong cách thiết kế .

 { "_id": "_design/example", "views": { "view-number-one": { "map": "function (doc) {/* function code here */}" }, "view-number-two": { "map": "function (doc) {/* function code here */}", "reduce": "function (keys, values, rereduce) {/* function code here */}" } }, "updates": { "updatefun1": "function(doc,req) {/* function code here */}", "updatefun2": "function(doc,req) {/* function code here */}" }, "filters": { "filterfunction1": "function(doc, req){ /* function code here */ }" }, "validate_doc_update": "function(newDoc, oldDoc, userCtx, secObj) { /* function code here */ }", "language": "javascript" }

Chúng ta hãy chia nhỏ từng đoạn .

1. ID tài liệu của CouchDB .

Id gạch dưới là một khóa thuộc tính dành riêng để đại diện cho ID của tài liệu JSON mà bạn lưu trong cơ sở dữ liệu. Nếu tài liệu bắt đầu bằng _design / ở phía trước, có nghĩa là nó là một tài liệu thiết kế.

 "_id": "_design/example",

2. Xem những công dụngChúng ta hoàn toàn có thể xác lập logic truy vấn chính sách xem của mình tại đây. Chủ yếu được điều khiển và tinh chỉnh bởi tính năng Javascript vì Javascript là ngôn từ sever truy vấn mặc định. Phần sau tất cả chúng ta sẽ đi chi tiết cụ thể hơn về công dụng xem .

 "views": { "view-number-one": { "map": "function (doc) {/* function code here */}" }, "view-number-two": { "map": "function (doc) {/* function code here */}", "reduce": "function (keys, values, rereduce) {/* function code here */}" } },

3. Cập nhật những công dụngCác hàm update là những hàm logic được lưu trong sever CouchDB và sau đó chúng tôi hoàn toàn có thể nhu yếu gọi để tạo hoặc update tài liệu .

 "updates": { "updatefun1": "function(doc,req) {/* function code here */}", "updatefun2": "function(doc,req) {/* function code here */}" },

4. Chức năng lọcChức năng bộ lọc sử dụng để lọc nguồn cấp tài liệu biến hóa cơ sở tài liệu .

 "filters": { "filterfunction1": "function(doc, req){ /* function code here */ }" },

5. Xác thực công dụng update tài liệuNhư đã đặt tên, bạn hoàn toàn có thể xác lập những quy tắc xác nhận trong công dụng này để xác thực tài liệu khi bạn đăng lên CouchDB .

 "validate_doc_update": "function(newDoc, oldDoc, userCtx, secObj) { /* function code here */ }",

6. Ngôn ngữThuộc tính ngôn từ đang cho CouchDB biết sever truy vấn ngôn từ lập trình nào của tài liệu phong cách thiết kế này thuộc về .

 "language": "javascript"

Tôi sẽ không đi sâu về tác dụng Cập nhật, tính năng Lọc và hiệu quả Xác thực tài liệu vì trọng tâm của chúng tôi ngày ngày hôm nay là tính năng xem. Nếu bạn chăm nom, bạn trọn vẹn hoàn toàn có thể để lại lời nhắn bên dưới cho tôi biết 😉, sau đó tôi trọn vẹn hoàn toàn có thể san sẻ một bài viết về cách sử dụng những tính năng update nữa. ✈ Quay lại Lượt xem 🛬

Chế độ xem là gì ?Chế độ xem trong Apache CouchDB thực sự hơi giống với chủ trương xem cơ sở tài liệu SQL thường thì .

Dạng xem cơ sở tài liệu là một tập hợp con của cơ sở tài liệu và dựa trên một truy vấn chạy trên một hoặc nhiều bảng cơ sở tài liệu .

Sự độc lạ là chính sách xem CouchDB dựa trên Map Reduce .

Như tài liệu thiết kế ví dụ ở trên, chúng ta có thể thấy rằng chức năng thực sự view bao gồm 2 phím thuộc tính (map & Reduce), một là chức năng bản đồ, một là chức năng giảm. (Chức năng giảm là Tùy chọn)

1. Chức năng map 🔍Các hàm ánh xạ đồng ý một tài liệu duy nhất làm đối số và ( tùy chọn ) những cặp khóa / giá trị phát ra ( ) được tàng trữ trong một dạng xem .Xem thêm : Media publications là gìGiả sử chúng tôi có một list những tài liệu bài đăng trên blog được lưu trong cơ sở tài liệu CouchDB của chúng tôi .

 [ { _id: "c2ec3b79-d9ac-45a8-8c68-0f05cb3adfac", title: "Post One Title", content: "Post one content.", author: "John Doe", status: "submitted", date: "2021-10-30T14:57:05.547Z", type: "post" }, { _id: "ea885d7d-7af2-4858-b7bf-6fd01bcd4544", title: "Post Two Title", content: "Post two content.", author: "Jane Doe", status: "draft", date: "2021-09-29T08:37:05.547Z", type: "post" }, { _id: "4a2348ca-f27c-427f-a490-e29f2a64fdf2", title: "Post Three Title", content: "Post three content.", author: "John Doe", status: "submitted", date: "2021-08-02T05:31:05.547Z", type: "post" }, ... ]

Nếu tất cả chúng ta muốn truy vấn những bài viết theo trạng thái, tất cả chúng ta hoàn toàn có thể tạo một hàm map javascript như sau :

 function (document) { emit(document.status, document); }

Hiển thị giá trị chính

Đối với hàng loạt tài liệu phong cách thiết kế sẽ trông như thế này :

 { "_id": "_design/posts", "views": { "byStatus": { "map": "function (document) { emit(document.status, document); }" } }, "language": "javascript" }

Sau khi chúng tôi lưu tài liệu phong thái phong cách thiết kế này vào CouchDB, CouchDB sẽ mở màn thiết kế thiết kế xây dựng khung nhìn. Vậy là xong, tổng thể tất cả chúng ta đã tạo thành công xuất sắc xuất sắc chủ trương xem CouchDB. 🎉 🥳Để sử dụng chính sách xem, chỉ cần gửi nhu yếu http phương pháp GET với url bên dưới :

 http://{YOUR_COUCHDB_HOST}:5984/{YOUR_DATABASE_NAME}/_design/posts/_view/byStatus

Kết quả:

Kết quả một

Nếu tất cả chúng ta muốn nhận toàn bộ những bài đăng có trạng thái “ nháp ”, thì tất cả chúng ta gọi nhu yếu http với tham số key = “ nháp ”, nó sẽ trả về cho tất cả chúng ta toàn bộ những bài viết chỉ có trạng thái “ nháp ” .

 http://{YOUR_COUCHDB_HOST}:5984/{YOUR_DATABASE_NAME}/_design/posts/_view/byStatus?key="draft"

Kết quả :

Kết quả hai

Giả sử một hàm map khác phát ra tài liệu theo ngày :

 function (document) { emit(document.date, document); }

Sau đó, chúng tôi hoàn toàn có thể truy vấn những bài đăng trên blog theo khoanh vùng phạm vi ngày .

 http://{YOUR_COUCHDB_HOST}:5984/{YOUR_DATABASE_NAME}/_design/posts/_view/byDate?startkey=""&endkey="2021-09-29uffff"

Kết quả:

Phạm vi Ngày Kết quả

Như truy vấn trên, tôi đã xác lập ngày mở màn qua startkey và ngày kết thúc qua endkey, sau đó CouchDB sẽ trở lại chúng tôi những bài viết trong startkey và endkey. Tuy nhiên, khóa mở màn của tôi là chuỗi trống, có nghĩa là tôi không chăm nom đến ngày khởi đầu, chỉ cần đáp ứng cho tôi tài liệu bài đăng tiên phong cho đến ngày của khóa kết thúc .

Mẹo : Nếu bạn muốn đảo ngược hiệu suất cao trả về, bạn trọn vẹn hoàn toàn có thể thêm một tham số ” giảm dần = true “

2. Giảm / Giảm thiểu ✂Chức năng Reduce là tùy chọn so với chủ trương xem, nó dựa trên tính năng của hàm map, sau đó bạn trọn vẹn hoàn toàn có thể thực thi SUM, COUNT hoặc logic tùy chỉnh với để lọc hoặc dẫn xuất thành bất kể hiệu suất cao mong ước nào .Giả sử tất cả chúng ta có tác dụng map hiển thị ( tháng, ngân sách ) :

 function (document) { emit(document.month, document.expenses); }

Kết quả Ví dụ:

Tháng kết quả

Nếu chúng ta chỉ muốn nhận chi phí của tháng 2, thì chúng ta sẽ đặt khóa tham số = “feb 2”, sau đó nó sẽ chỉ trả lại cho chúng ta chi phí của tháng 2.

Dựa trên kết quả bản đồ, chúng tôi có thể thêm một hàm giảm để giúp chúng tôi tổng hợp số tiền chi phí trong tháng hai.

 function(keys, values, rereduce) { return sum(values); }

Kết quả cho key = “tháng hai” sau khi giảm:

Kết quả giảm

Đó là nó. Chúng tôi hoàn toàn có thể nhận ngay hiệu quả tổng bất kể bạn có bao nhiêu tài liệu trong cơ sở tài liệu. Đây là sức mạnh của Map Reduce. Bạn thậm chí còn hoàn toàn có thể suy giảm lại, nghĩa là thực thi logic giảm lần thứ hai dựa trên hiệu quả giảm tiên phong. Để biết thêm chi tiết cụ thể, bạn hoàn toàn có thể xem tài liệu chính thức tại đây

Tóm lại làCác khung nhìn CouchDB rất can đảm và mạnh mẽ và can đảm và mạnh mẽ, linh động và siêu nhanh để truy vấn một tính năng như Hadoop. Tuy nhiên, CouchDB chỉ tương hỗ một lớp map giảm dẫn xuất. Nếu bạn không hiểu Map Reduce là gì, bạn trọn vẹn hoàn toàn có thể xem video Youtube này. Cảm ơn bạn đã đọc. 😊Đây là cuộc tranh luận đi kèm chủ đề gốc tại https://dev.to/yenyih/query-in-apache-couchdb-views-4hlh

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Advertismentspot_img

Popular stories