Apache CouchDB의 질의:보기

9715 단어 nodedatabasebeginners
본문에서, 나는 보기를 통해Apache CouchDB에서 문서를 조회하는 방법을 토론할 것이다.

Apache CouchDB란 무엇입니까?


먼저 모르는 사람에게 쿠키DB를 간단히 소개해 드리겠습니다.Apache CouchDB는 Erlang으로 구현된 문서용 NosQL 데이터베이스입니다.쿠키DB는 어디에나 있는 HTTP 프로토콜과 JSON 데이터 형식을 사용하기 때문에 사용하기 쉽다.자세한 내용은 해당 사용자Official Website를 참조하십시오.😉
자, 오늘의 주제로 돌아가겠습니다.✌
우선, 우리가 보기가 무엇인지 토론하기 전에, 나는 CouchDB의 두 가지 중요한 내용을 소개할 필요가 있다.

조회 서버


먼저 소개할 내용은 CouchDB 조회 서버입니다.쿼리 서버란?공식 문서에 따르면:

The Query server is an external process that communicates with CouchDB by JSON protocol through stdio interface and processes all design functions calls, such as JavaScript views.


기본적으로 CouchDB는 Mozilla SpiderMonkey 를 통해 실행되는 내장된 자바스크립트 조회 서버를 가지고 있습니다.이것은 CouchDB에서 어떤 문서를 조회하고 싶은지 알려 주는javascript 함수를 정의할 수 있음을 의미합니다.

Note: If you are not comfortable with Javascript, You can use other programming languages query server such as Python, Ruby, Clojure and etc. You can find the query server configuration here


그럼 자바스크립트 함수를 어디서 정의합니까?🤔
이것은 두 번째로 소개할 일이다.

디자인 파일


디자인 문서는 CouchDB 데이터베이스의 특수 문서입니다.디자인 문서를 사용하여 색인을 구축하고 문서 업데이트를 검증하며 조회 결과를 포맷하고 복사를 선별할 수 있습니다.다음은 문서 구조를 설계하는 예입니다.
{
    "_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"
}
우리 하나하나 분해합시다.

1. CouchDB의 문서 ID입니다.


밑줄 id는 데이터베이스에 저장된 JSON 문서의 id를 나타내는 보존된 속성 키입니다. design/로 시작하는 문서는 설계 문서임을 나타냅니다.
"_id": "_design/example",

2. 기능 보기


우리는 여기서 보기 조회 논리를 정의할 수 있다.주로 자바스크립트 함수로 구동됩니다. 자바스크립트는 기본 검색 서버 언어이기 때문입니다.이따가 우리는view 함수를 상세하게 소개할 것이다.
"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. 기능 업데이트


업데이트 함수는 CouchDB 서버에 저장된 논리 함수입니다. 문서를 만들거나 업데이트하기 위해 호출을 요청할 수 있습니다.
"updates": {
   "updatefun1": "function(doc,req) {/* function code here */}",
   "updatefun2": "function(doc,req) {/* function code here */}"
},

4. 필터 기능


필터 함수는 데이터베이스 변경 원본을 필터하는 데 사용됩니다.
"filters": {
   "filterfunction1": "function(doc, req){ /* function code here */ }"
},

5. 파일 업데이트 기능 확인


위에서 설명한 대로 이 함수에서 인증 규칙을 정의하여 CouchDB에 게시할 때 문서를 검증할 수 있습니다.
"validate_doc_update": "function(newDoc, oldDoc, userCtx, secObj) { /* function code here */ }",

6. 언어


Language 속성은 CouchDB의 이 디자인 문서의 프로그래밍 언어 조회 서버가 어디에 속하는지 알려줍니다.
"language": "javascript"
나는 업데이트 기능, 필터 기능과 문서 검증 기능에 대해 깊이 토론하지 않을 것이다. 왜냐하면 오늘의 중점은 기능을 보는 것이기 때문이다.만약 네가 흥미가 있다면, 너는 아래에 나에게 메시지를 남겨서 알려줄 수 있다😉, 그리고 업데이트 기능을 어떻게 사용하는지에 대한 댓글을 공유할 수 있습니다.
✈뷰로 돌아가기🛬

무엇이 경관입니까?


Apache CouchDB의 보기는 실제적으로 일반적인 SQL 데이터베이스 보기와 약간 유사하다.

A database view is a subset of a database and is based on a query that runs on one or more database tables.


차이점은 CouchDB 뷰가 Map Reduce를 기반으로 한다는 점입니다.
위의 예시로 문서를 디자인하면 실제 보기 함수는 두 개의 속성 키(map &reduce)로 구성되어 있는데 하나는 맵 함수이고 다른 하나는 Reduce 함수이다.(감소 기능은 옵션)

1. 지도 기능🔍


Map 함수는 단일 문서를 매개 변수로 받아들여 보기에 emit() 키/값 쌍을 저장합니다.
CouchDB 데이터베이스에 저장된 블로그 글 문서 목록을 가정하십시오.
[
  {
    _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"
  },
  ...
]
만약 우리가 상태에 따라 댓글을 조회하고자 한다면, 우리는javascript 매핑 함수를 만들 수 있다. 아래와 같다.
function (document) {
  emit(document.status, document);
}

전체 설계 파일은 다음과 같습니다.
{
    "_id": "_design/posts",
    "views": {
        "byStatus": {
            "map": "function (document) { emit(document.status, document); }"
        }
    },
    "language": "javascript"
}
이 디자인 문서를CouchDB에 저장한 후에CouchDB는 보기를 구축하기 시작합니다.이렇게 해서 우리는 CouchDB 보기를 성공적으로 만들었다.🎉🥳
이 뷰를 사용하려면 다음 URL이 있는 GET method http 요청을 보내면 됩니다.
http://{YOUR_COUCHDB_HOST}:5984/{YOUR_DATABASE_NAME}/_design/posts/_view/byStatus
결과:

만약 우리가 모든 상태가'draft'인 게시물을 얻으려면, 파라미터 키='draft'가 있는 http 요청을 호출하면, 모든 상태가'draft'인 게시물만 되돌려줍니다.
http://{YOUR_COUCHDB_HOST}:5984/{YOUR_DATABASE_NAME}/_design/posts/_view/byStatus?key="draft"
결과:

문서를 날짜별로 보내는 다른 매핑 함수를 가정합니다.
function (document) {
  emit(document.date, document);
}
그리고 우리는 날짜 범위에 따라 블로그 게시물을 조회할 수 있다.
http://{YOUR_COUCHDB_HOST}:5984/{YOUR_DATABASE_NAME}/_design/posts/_view/byDate?startkey=""&endkey="2021-09-29\uffff"
결과:

위의 검색과 같이, 나는 startkey를 통해 시작 날짜를 정의했고, endkey를 통해 종료 날짜를 정의한 다음,CouchDB는 startkey와 endkey의 댓글을 되돌려줍니다.그러나, 내 startkey는 빈 문자열이다. 이것은 내가 시작 날짜에 관심이 없다는 것을 의미한다. endkey의 날짜까지 첫 번째post 문서를 주면 된다.

Tips: If you want to reverse the return result, you can just add a parameter "descending=true"


2. 감소/감소✂


Reduce 함수는 보기의 선택 함수입니다. 맵 함수 결과를 기반으로 하고, 원하는 결과를 필터하거나 내보낼 수 있습니다.
만약 우리가 지도 결과를 나타낸다면(월, 비용):
function (document) {
  emit(document.month, document.expenses);
}
샘플 결과:

만약 우리가 2월의 비용만 얻고 싶다면, 우리는 매개 변수 키='2월'을 입력한 후에 2월의 비용만 되돌려줄 것이다.
맵 결과에 따라, 우리는 2월의 비용 총액을 계산하는 데 도움을 줄 수 있는 Reduce 함수를 추가할 수 있다.
function(keys, values, rereduce) {
  return sum(values);
}
감소 후 키 = "2월"결과:

이렇게데이터베이스에 얼마나 많은 문서가 있든지 간에 우리는 즉시 구화 결과를 얻을 수 있다.이것이 바로 지도를 복원하는 힘이다.Reduce를 다시 실행할 수도 있습니다. 이것은 첫 번째 Reduce 결과를 바탕으로 두 번째 Reduce 논리를 실행한다는 것을 의미합니다.자세한 내용은 공식 문서here를 참조하십시오.

요컨대


CouchDB 보기는 매우 강력하고 유연하여 Hadoop과 같은 결과를 초고속으로 조회할 수 있다.그러나 CouchDB는 레이어 매핑만 지원합니다.Map Reduce가 무엇인지 모르면 이것을 보십시오.
읽어주셔서 감사합니다.😊

좋은 웹페이지 즐겨찾기