RDBMS에서 전환 간소화
Couchbase Server 4.5.1 릴리즈는 엔터프라이즈 애플리케이션의 요구 사항을 해결하기 위해 N1QL에서 다양한 기능, 사용성 및 성능 개선을 제공합니다. 이러한 개선 사항은 고객이 중요하게 여기는 여러 문제를 해결하고 RDBMS에서 전환.
Couchbase Server 4.5.1을 사용해 보세요. 파트너 및 고객의 현장 테스트를 거쳐 프로덕션에 사용할 준비가 되었습니다. 새로운 기능 및 개선 사항의 전체 목록은 새로운 기능을 참조하세요.
놓치지 마세요 part1 블로그의
새로운 쿼리 설정 예쁜
예쁘다!! 예쁘다!! 예쁜!! 예, 예쁜 는 쿼리 결과의 예쁜 서식을 사용하거나 사용하지 않도록 설정할 수 있는 N1QL의 매우 인상적인 새로운 쿼리 설정입니다. 이게 뭐가 그리 대단하냐고 물어보실 수도 있습니다. 그리고 왜 누구나 JSON 출력의 아름다운 서식을 비활성화하고 싶어할까요?
옛 속담처럼 공짜 점심은 없습니다. 쿼리 결과를 예쁘게 서식 지정하려면 자체 비용이 발생합니다:
- 먼저, 간단한 사실 하나는 형식이 잘 갖춰진 JSON 문서에서 공백(탭, 공백, 줄 바꿈) 문자가 문서 크기의 거의 3분의 1을 차지한다는 것입니다.
- 따라서 단순히 미화를 줄이면 네트워크를 통해 흐르는 모든 원시 바이트를 절약할 수 있습니다.
- 또한 N1QL 서비스의 메모리 및 처리 리소스를 절약할 수 있다는 점도 고려하세요.
- 전체적으로 비용 절감 효과는 상당히 큽니다.
- 예쁜 출력 형식은 사람이 읽을 수 있는 시나리오에 적합합니다. 사람이 관리할 수 있는 결과 크기.
- 그러나 실제 애플리케이션과 컴퓨터 프로그램은 사람보다 훨씬 더 자주 쿼리를 실행하고 훨씬 더 큰 쿼리 결과를 처리합니다.
- 이 경우 중요한 것은 성능 그리고 효율성를 사용해야 합니다. 사실 이러한 서식은 JSON 구문 분석기와 애플리케이션에 오버헤드가 되기 때문에 일반적으로 버려집니다. 일반적으로 애플리케이션에는 각 사용자에게 적합한 데이터 형식을 지정하는 자체 프레젠테이션 계층이 있습니다.
- 예를 들어 항공편을 검색하는 여행 예약 웹사이트를 생각해 보세요. 어떤 여행 사이트도 이용 가능한 항공편을 여러 개의 JSON 문서로 덤프하지는 않을 것입니다.
새로운 쿼리 매개변수 예쁜 를 사용하여 쿼리 결과 서식 지정을 활성화/비활성화할 수 있습니다. 매개변수는 다음과 같습니다:
- 로 설정
true또는false. - 명령줄 매개변수로 CBQ 엔진에 전달됩니다.
- REST 호출과 함께 쿼리 매개변수로 전달됩니다.
기본적으로 다음과 같이 설정되어 있습니다. true. 로 설정하면 false를 사용하면 쿼리 결과에서 공백 문자가 제거됩니다. 쿼리가 큰 결과를 생성할 때 성능 이점을 크게 볼 수 있으며, 물론 문서의 공백 오버헤드 비율에 따라 달라집니다. 예를 들어 여행 샘플에서 모든 문서를 선택하는 다음 쿼리를 실행하면 거의 3배 빠른 속도 언제 pretty = false. 또한 결과 집합의 크기는 예쁜 형식의 결과의 1/3입니다.
함께 pretty = true
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
varakurprasad$ time curl -v https://localhost:8093/query/service -d "pretty=true&statement=SELECT * from `travel-sample`" | tail -15 * Hostname was NOT found in DNS cache % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying ::1... * Connected to localhost (::1) port 8093 (#0) * Server auth using Basic with user 'travel-sample' > POST /query/service HTTP/1.1 > Authorization: Basic dHJhdmVsLXNhbXBsZTpoZWxsbw== > User-Agent: curl/7.37.1 > Host: localhost:8093 > Accept: */* > Content-Length: 51 > Content-Type: application/x-www-form-urlencoded > } [data not shown] * upload completely sent off: 51 out of 51 bytes < HTTP/1.1 200 OK < Content-Type: application/json; version=1.6.0 < Date: Sat, 15 Oct 2016 02:04:09 GMT < Transfer-Encoding: chunked < { [data not shown] 100 103M 0 103M 100 51 16.6M 8 0:00:06 0:00:06 --:--:-- 17.2M * Connection #0 to host localhost left intact ], "sourceairport": "TLV", "stops": 0, "type": "route" } } ], "status": "success", "metrics": { "elapsedTime": "6.165034483s", "executionTime": "6.164993497s", "resultCount": 31591, "resultSize": 107830610 } } real 0m6.208s user 0m5.704s sys 0m0.373s |
함께 pretty = false
총 결과 크기는 이제 36754457바이트에 불과하며 쿼리는 2.2초 만에 실행됩니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
varakurprasad$ time curl -v https://localhost:8093/query/service -d "pretty=false&statement=SELECT * from `travel-sample`" | tail -5 * Hostname was NOT found in DNS cache % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying ::1... * Connected to localhost (::1) port 8093 (#0) * Server auth using Basic with user 'travel-sample' > POST /query/service HTTP/1.1 > Authorization: Basic dHJhdmVsLXNhbXBsZTpoZWxsbw== > User-Agent: curl/7.37.1 > Host: localhost:8093 > Accept: */* > Content-Length: 52 > Content-Type: application/x-www-form-urlencoded > } [data not shown] * upload completely sent off: 52 out of 52 bytes < HTTP/1.1 200 OK < Content-Type: application/json; version=1.6.0 < Date: Sat, 15 Oct 2016 02:03:29 GMT < Transfer-Encoding: chunked < { [data not shown] 100 35.1M 0 35.1M 100 52 15.9M 23 0:00:02 0:00:02 --:--:-- 15.9M "status": "success", "metrics": {"elapsedTime": "2.148354775s","executionTime": "2.148323137s","resultCount": 31591,"resultSize": 36754457} } real 0m2.223s user 0m1.977s sys 0m0.141s |
N1QL 쿼리의 동적 개체 구성에 대한 개선 사항
N1QL은 이미 쿼리에서 동적으로 JSON 객체를 생성하는 기능을 지원합니다. 이는 쿼리 투영 목록에서 특별히 구성된 결과 개체를 생성하는 데 큰 도움이 됩니다. Couchbase Server 4.5.1은 표현식의 기능을 확장하고 N1QL 쿼리에서 동적 객체 생성 및 객체 처리를 강화합니다.
- Couchbase Server 4.5.1에서 N1QL은 개체 필드의 이름과 값을 모두 임의의 표현식으로 사용할 수 있도록 허용합니다. 이전 버전에서는 필드 이름이 정적 문자열이어야 했습니다. 이름이 문자열로 평가되지 않으면 개체 구성의 결과는 NULL입니다. 예를 들어
12345678910SELECT { UPPER(callsign) || "_key" : callsign || ":" || country || ":" || name } AS myobjFROM `travel-sample`WHERE type = 'airline' limit 1;[{"myobj": {"MILE-AIR_key": "MILE-AIR:United States:40-Mile Air"}}] - 4.5.1에서는 N1QL 쿼리에서 개체를 구성할 때 이름-값 쌍의 필드 이름은 선택 사항으로 지정할 수 있습니다. 예를 들어, 다음 쿼리는 각 값에 "type" 및 "name"이라는 이름을 암시적으로 할당합니다:
123456789SELECT {type, name} AS myobj FROM `travel-sample` LIMIT 1;[{"myobj": {"type": "airport""name": "airport_123"}}]
새로운 배열 함수 ARRAY_INTERSECT()
ARRAY_INTERSECT() 함수는 두 개 이상의 배열을 매개변수로 받아 입력 배열의 교집합, 즉 모든 입력 배열에 존재하는 값을 포함하는 배열을 결과로 반환합니다. 공통 배열 요소가 없는 경우 빈 배열을 반환합니다. 자세한 내용은 문서를 참조하세요. 예를 들어 다음 쿼리는 다음과 함께 제공된 여행 샘플 버킷에서 Brian 또는 Lilian이 좋아하는 호텔을 찾습니다. 카우치베이스 서버 4.5.1.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
SELECT meta().id, ARRAY_INTERSECT(public_likes, ["Brian Kilback", "Lilian McLaughlin"]) AS likes FROM `travel-sample` WHERE type = 'hotel' ORDER BY likes DESC LIMIT 4; [ { "id": "hotel_10025", "likes": [ "Lilian McLaughlin", "Brian Kilback" ] }, { "id": "hotel_10026", "likes": [] }, { "id": "hotel_10064", "likes": [] }, { "id": "hotel_10063", "likes": [] } ] |
다운로드 카우치베이스 서버 4.5.1 를 클릭하고 사용해 보세요. 질문/의견이 있거나 얼마나 멋진지 알려주세요 ;-)
건배!!