MongoDB에서 MapReduce 사용
Hadoop을 사용해본 친구는 MapReduce에 익숙할 것입니다. MapReduce는 큰 문제를 여러 개의 작은 문제로 분할하고 각각의 작은 문제를 다른 시스템으로 보내 처리를 완료할 수 있습니다. 결과는 분산 컴퓨팅이라고 불리는 완전한 솔루션으로 결합됩니다. 이번 글에서는 MongoDB에서 MapReduce를 사용하는 방법을 살펴보겠습니다.
mapReduce
MongoDB의 MapReduce는 보다 복잡한 집계 명령을 구현하는 데 사용할 수 있습니다. MapReduce를 사용하면 주로 두 가지 기능을 구현할 수 있습니다. map 함수는 일련의 키-값 쌍을 생성하는 데 사용됩니다. map 함수의 결과 Reduce 함수의 매개변수로 Reduce 함수에서 추가 통계가 수행됩니다. 예를 들어 내 데이터 세트는 다음과 같습니다.
{"_id" : ObjectId("59fa71d71fd59c3b2cd908d7"),"name" : "鲁迅","book" : "呐喊","price" : 38.0,"publisher" : "人民文学出版社"} {"_id" : ObjectId("59fa71d71fd59c3b2cd908d8"),"name" : "曹雪芹","book" : "红楼梦","price" : 22.0,"publisher" : "人民文学出版社"} {"_id" : ObjectId("59fa71d71fd59c3b2cd908d9"),"name" : "钱钟书","book" : "宋诗选注","price" : 99.0,"publisher" : "人民文学出版社"} {"_id" : ObjectId("59fa71d71fd59c3b2cd908da"),"name" : "钱钟书","book" : "谈艺录","price" : 66.0,"publisher" : "三联书店"} {"_id" : ObjectId("59fa71d71fd59c3b2cd908db"),"name" : "鲁迅","book" : "彷徨","price" : 55.0,"publisher" : "花城出版社"}
각 저자가 출판한 책의 총 가격을 쿼리하려는 경우
var map=function(){emit(this.name,this.price)} var reduce=function(key,value){return Array.sum(value)} var options={out:"totalPrice"} db.sang_books.mapReduce(map,reduce,options); db.totalPrice.find()
emit 함수는 주로 그룹화를 구현하기 위해 두 개의 매개변수를 받습니다. 첫 번째 매개변수는 그룹화 필드를 나타내고 두 번째 매개변수는 계산할 데이터를 나타내며 특정 데이터 처리 작업을 수행합니다. 여기에서는 방출 메소드의 두 매개변수에 해당하는 두 개의 매개변수를 받습니다. 여기서는 가격 필드에 대한 자체 처리를 수행하는 데 사용됩니다. 그런 다음 여기에서 데이터를 쿼리합니다. 기본적으로 이 컬렉션은 데이터베이스가 다시 시작된 후에도 처리되며 컬렉션의 데이터를 유지합니다. 쿼리 결과는 다음과 같습니다.
{ "_id" : "曹雪芹", "value" : 22.0 } { "_id" : "钱钟书", "value" : 165.0 } { "_id" : "鲁迅", "value" : 93.0 }
또 다른 예로 각 저자가 몇 권의 책을 출판했는지 쿼리하고 싶습니다.
var map=function(){emit(this.name,1)} var reduce=function(key,value){return Array.sum(value)} var options={out:"bookNum"} db.sang_books.mapReduce(map,reduce,options); db.bookNum.find()
쿼리 결과는 다음과 같습니다.
{ "_id" : "曹雪芹", "value" : 1.0 } { "_id" : "钱钟书", "value" : 2.0 } { "_id" : "鲁迅", "value" : 2.0 }
각 저자의 책을 다음과 같이 나열합니다.
var map=function(){emit(this.name,this.book)} var reduce=function(key,value){return value.join(',')} var options={out:"books"} db.sang_books.mapReduce(map,reduce,options); db.books.find()
결과는 다음과 같습니다.
{ "_id" : "曹雪芹", "value" : "红楼梦" } { "_id" : "钱钟书", "value" : "宋诗选注,谈艺录" } { "_id" : "鲁迅", "value" : "呐喊,彷徨" }
예를 들어, 각 사람이 40엔 이상 판매하는 책을 쿼리하려면:
var map=function(){emit(this.name,this.book)} var reduce=function(key,value){return value.join(',')} var options={query:{price:{$gt:40}},out:"books"} db.sang_books.mapReduce(map,reduce,options); db.books.find()
query는 찾은 컬렉션을 필터링한다는 의미입니다.
결과는 다음과 같습니다.
{ "_id" : "钱钟书", "value" : "宋诗选注,谈艺录" } { "_id" : "鲁迅", "value" : "彷徨" }
runCommand 구현
runCommand 명령을 사용하여 MapReduce를 실행할 수도 있습니다. 형식은 다음과 같습니다.
db.runCommand( { mapReduce: <collection>, map: <function>, reduce: <function>, finalize: <function>, out: <output>, query: <document>, sort: <document>, limit: <number>, scope: <document>, jsMode: <boolean>, verbose: <boolean>, bypassDocumentValidation: <boolean>, collation: <document> } )
의미는 다음과 같습니다.
매개변수 | 의미 |
---|---|
mapReduce | 는 |
map | 에서 작동할 집합을 나타냅니다.지도 기능 |
reduce | reduce 기능 |
finalize | 최종 처리 기능 |
out | 출력 세트 |
query | 결과 필터링 |
sort | 결과 정렬 |
limit | 반환된 결과 수 |
scope | 여기서 설정한 값은 맵, 축소, 마무리 기능에 표시됩니다. |
jsMode | javascript 객체에서 BSON 객체로 실행 매핑, 기본값 false로 설정 |
verbose | 자세한 시간 통계 표시 여부 |
bypassDocumentValidation | 문서 유효성 검사 우회 여부 |
collation | 다른 교정 |
다음 연산은 MapReduce 연산의 실행을 나타내며 통계 수집을 위해 반환 항목 수를 제한한 후 반환 항목 수를 제한한 후 통계 연산을 수행합니다.
var map=function(){emit(this.name,this.book)} var reduce=function(key,value){return value.join(',')} db.runCommand({mapreduce:'sang_books',map,reduce,out:"books",limit:4,verbose:true}) db.books.find()
실행 결과는 다음과 같습니다.
{ "_id" : "曹雪芹", "value" : "红楼梦" } { "_id" : "钱钟书", "value" : "宋诗选注,谈艺录" } { "_id" : "鲁迅", "value" : "呐喊" }
내 친구들은 Lu Xun의 책 중 하나가 누락된 것을 보았습니다. 왜냐하면 제한이 먼저였기 때문입니다. 통계 작업을 수행하기 전에 컬렉션에서 반환되는 항목 수를 제한하십시오.
finalize 작업은 다음과 같이 최종 처리 함수를 나타냅니다.
var f1 = function(key,reduceValue){var obj={};obj.author=key;obj.books=reduceValue; return obj} var map=function(){emit(this.name,this.book)} var reduce=function(key,value){return value.join(',')} db.runCommand({mapreduce:'sang_books',map,reduce,out:"books",finalize:f1}) db.books.find()
f1의 첫 번째 매개변수 키는 내보내기의 첫 번째 매개변수를 나타내고, 두 번째 매개변수는 축소의 실행 결과를 나타냅니다. 이 결과는 f1에서 다시 처리할 수 있습니다.
{ "_id" : "曹雪芹", "value" : { "author" : "曹雪芹", "books" : "红楼梦" } } { "_id" : "钱钟书", "value" : { "author" : "钱钟书", "books" : "宋诗选注,谈艺录" } } { "_id" : "鲁迅", "value" : { "author" : "鲁迅", "books" : "呐喊,彷徨" } }
scope는 다음과 같이 맵에 표시되는 변수를 정의하고, 축소하고, 마무리하는 데 사용할 수 있습니다.
var f1 = function(key,reduceValue){var obj={};obj.author=key;obj.books=reduceValue;obj.sang=sang; return obj} var map=function(){emit(this.name,this.book)} var reduce=function(key,value){return value.join(',--'+sang+'--,')} db.runCommand({mapreduce:'sang_books',map,reduce,out:"books",finalize:f1,scope:{sang:"haha"}}) db.books.find()
실행 결과는 다음과 같습니다.
{ "_id" : "曹雪芹", "value" : { "author" : "曹雪芹", "books" : "红楼梦", "sang" : "haha" } } { "_id" : "钱钟书", "value" : { "author" : "钱钟书", "books" : "宋诗选注,--haha--,谈艺录", "sang" : "haha" } } { "_id" : "鲁迅", "value" : { "author" : "鲁迅", "books" : "呐喊,--haha--,彷徨", "sang" : "haha" } }
이 글을 읽고 뭔가 얻으시길 바랍니다. 기사.
관련 권장 사항:
mongodb mapreduce 사용법 및 PHP 샘플 코드
MongoDB MapReduce 속도를 20배 높이는 방법
위 내용은 MongoDB에서 MapReduce 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











MetaMask(중국어로 Little Fox Wallet이라고도 함)는 무료이며 호평을 받는 암호화 지갑 소프트웨어입니다. 현재 BTCC는 MetaMask 지갑에 대한 바인딩을 지원합니다. 바인딩 후 MetaMask 지갑을 사용하여 빠르게 로그인하고 가치를 저장하고 코인을 구매할 수 있으며 첫 바인딩에는 20 USDT 평가판 보너스도 받을 수 있습니다. BTCCMetaMask 지갑 튜토리얼에서는 MetaMask 등록 및 사용 방법, BTCC에서 Little Fox 지갑을 바인딩하고 사용하는 방법을 자세히 소개합니다. MetaMask 지갑이란 무엇입니까? 3천만 명 이상의 사용자를 보유한 MetaMask Little Fox Wallet은 오늘날 가장 인기 있는 암호화폐 지갑 중 하나입니다. 무료로 사용할 수 있으며 확장으로 네트워크에 설치할 수 있습니다.

Navicat 만료 문제를 해결하는 방법은 다음과 같습니다: 라이센스 갱신, 자동 업데이트 비활성화, Navicat 고객 지원에 문의하세요.

BitgetLaunchpool은 모든 암호화폐 애호가를 위해 설계된 동적 플랫폼입니다. BitgetLaunchpool은 독특한 제품으로 돋보입니다. 여기에서 토큰을 스테이킹하여 에어드랍, 높은 보상, 초기 참가자에게만 제공되는 넉넉한 상금 풀 등 더 많은 보상을 잠금 해제할 수 있습니다. BitgetLaunchpool이란 무엇인가요? BitgetLaunchpool은 사용자 친화적인 이용 약관에 따라 토큰을 스테이킹하고 획득할 수 있는 암호화폐 플랫폼입니다. Launchpool에 BGB 또는 기타 토큰을 투자함으로써 사용자는 무료 에어드랍, 수익을 받고 넉넉한 보너스 풀에 참여할 수 있는 기회를 갖게 됩니다. 담보자산의 수입은 T+1시간 이내에 계산되며, 보상은 다음을 기준으로 합니다.

Navicat을 사용하여 MongoDB에 연결하려면 다음을 수행해야 합니다: Navicat 설치 MongoDB 연결 생성: a. 연결 이름, 호스트 주소 및 포트를 입력합니다. b. 인증 정보를 입력합니다(필요한 경우). SSL 인증서를 추가합니다(필요한 경우). 연결 저장

Node.js 애플리케이션의 경우 데이터베이스 선택은 애플리케이션 요구 사항에 따라 다릅니다. NoSQL 데이터베이스 MongoDB는 유연성을 제공하고, Redis는 높은 동시성을 제공하며, Cassandra는 시계열 데이터를 처리하고, Elasticsearch는 검색 전용입니다. SQL 데이터베이스 MySQL은 뛰어난 성능을 갖고 있고, PostgreSQL은 기능이 풍부하며, SQLite는 가볍고, Oracle 데이터베이스는 포괄적입니다. 선택할 때 데이터 유형, 쿼리, 성능, 트랜잭션성, 가용성, 라이센스 및 비용을 고려하십시오.

Node.js에서 데이터베이스에 연결하려면 데이터베이스 시스템(관계형 또는 비관계형)을 선택한 다음 해당 유형에 특정한 모듈을 사용하여 연결을 설정해야 합니다. 일반적인 모듈에는 mysql(MySQL), pg(PostgreSQL), mongodb(MongoDB) 및 redis(Redis)가 포함됩니다. 연결이 설정된 후 쿼리 문을 사용하여 데이터를 검색하고 문을 업데이트하여 데이터를 수정할 수 있습니다. 마지막으로 리소스를 해제하려면 모든 작업이 완료되면 연결을 닫아야 합니다. 연결 풀링, 매개변수화된 쿼리 사용, 오류 처리 등 모범 사례를 따르면 성능과 보안이 향상됩니다.

Node.js에서 데이터베이스에 연결하는 단계: MySQL, MongoDB 또는 PostgreSQL 패키지를 설치합니다. 데이터베이스 연결 개체를 만듭니다. 데이터베이스 연결을 열고 연결 오류를 처리합니다.

.NET 4.0은 다양한 애플리케이션을 만드는 데 사용되며 객체 지향 프로그래밍, 유연성, 강력한 아키텍처, 클라우드 컴퓨팅 통합, 성능 최적화, 광범위한 라이브러리, 보안, 확장성, 데이터 액세스 및 모바일을 포함한 풍부한 기능을 애플리케이션 개발자에게 제공합니다. 개발 지원.
