MongoDB แผนที่ลด
แผนที่ลดเป็นแบบจำลองคอมพิวเตอร์เพียงแค่หมายความว่าเป็นกลุ่มของการทำงาน (ข้อมูล) การสลายตัว (MAP) เพื่อดำเนินการแล้วรวมผลเป็นผลสุดท้าย (ลด)
MongoDB มีแผนที่ลดมีความยืดหยุ่นมากสำหรับการวิเคราะห์ข้อมูลขนาดใหญ่นอกจากนี้ยังมีการปฏิบัติค่อนข้าง
คำสั่ง MapReduce
ต่อไปนี้เป็นรูปแบบพื้นฐานของ MapReduce:
>db.collection.mapReduce( function() {emit(key,value);}, //map 函数 function(key,values) {return reduceFunction}, //reduce 函数 { out: collection, query: document, sort: document, limit: number } )
ฟังก์ชั่นการใช้ MapReduce เพื่อให้บรรลุทั้งสองฟังก์ชั่นแผนที่และลดฟังก์ชั่น, แผนที่เรียกฟังก์ชันปล่อย (คีย์ค่า) สำรวจเก็บรวบรวมในบันทึกทั้งหมดและค่าคีย์ถูกส่งไปยังฟังก์ชั่นลดสำหรับการประมวลผล
ฟังก์ชั่นแผนที่จะต้องเรียกปล่อย (คีย์ค่า) คืนคู่
พารามิเตอร์คำอธิบาย:
- แผนที่: ฟังก์ชั่นการทำแผนที่ (สร้างคีย์ลำดับลดค่าฟังก์ชัน)
- ลดฟังก์ชันทางสถิติงานคือการลดการทำงานที่สำคัญค่าเป็นค่าคีย์ที่เป็นค่าอาร์เรย์เป็นค่าค่าเดียว.
- ออกผลทางสถิติที่เก็บไว้ชุด (ไม่ได้ระบุการใช้งานของคอลเลกชันชั่วคราวลบโดยอัตโนมัติหลังจากที่ลูกค้าจะถอด)
- สภาพกรองแบบสอบถามเท่านั้นที่จะเป็นไปตามเงื่อนไขของเอกสารที่จะถูกเรียกว่าฟังก์ชั่นแผนที่(Query.limit เรียงลำดับสามารถผสม)
- จัดเรียงและวงเงินผูกพันเรียงลำดับพารามิเตอร์ (ยังเป็นอดีตเอกสารส่งไปยังฟังก์ชั่นแผนที่เพื่อเรียงลำดับ) คุณสามารถเพิ่มประสิทธิภาพกลไกการจัดกลุ่ม
- จำกัด จำนวนของเอกสารที่ส่งไปยังขีด จำกัด บนของฟังก์ชั่นแผนที่ (ถ้ามีไม่มีขีด จำกัด ของการจัดเรียงเพียงอย่างเดียวในการใช้งานเล็ก ๆ น้อย ๆ )
ใช้ MapReduce
พิจารณาโครงสร้างของเอกสารดังต่อไปนี้ในการจัดเก็บบทความเอกสารของผู้ใช้และร้านค้าผู้ใช้ user_name ช่องสถานะบทความ:
>db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"disabled" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "w3big", "status":"disabled" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "w3big", "status":"disabled" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "w3big", "status":"active" }) WriteResult({ "nInserted" : 1 })
ตอนนี้เราจะใช้โพสต์ตั้งค่าฟังก์ชั่น MapReduce เพื่อเลือกบทความที่ตีพิมพ์ (สถานะ: "ใช้งาน") และแพ็คเก็ต user_name คำนวณได้สำหรับผู้ใช้แต่ละกระทู้:
>db.posts.mapReduce( function() { emit(this.user_name,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } )
ดังกล่าวข้างต้น MapReduce เอาท์พุท:
{ "result" : "post_total", "timeMillis" : 23, "counts" : { "input" : 5, "emit" : 5, "reduce" : 1, "output" : 2 }, "ok" : 1 }
ผลการศึกษาพบว่าทั้งหมดสี่ตรงกับเกณฑ์การค้นหา (สถานะ: "ใช้งาน") สร้างเอกสารสี่ที่สำคัญในฟังก์ชั่นแผนที่ในเอกสารแล้วใช้ฟังก์ชันเดียวกันเพื่อลดที่สำคัญแบ่งออกเป็นสองกลุ่ม
พารามิเตอร์ที่เฉพาะเจาะจง:
- ผล: ผลการจัดเก็บชื่อคอลเลกชันนี้เป็นชุดชั่วคราวกลับปิดการเชื่อมต่ออัตโนมัติของ MapReduce ได้ถูกลบออก
- timeMillis: การดำเนินการต้องใช้เวลาในมิลลิวินาที
- การป้อนข้อมูล: จำนวนสภาพของเอกสารที่ถูกส่งไปยังฟังก์ชั่นแผนที่
- ปล่อย: ครั้งในฟังก์ชั่นแผนที่ปล่อยถูกเรียกว่าเป็นจำนวนเงินรวมของการเก็บรวบรวมข้อมูลทั้งหมด
- ouput: ผลการค้นหาจำนวนของเอกสารในการเก็บรวบรวม (นับเป็นประโยชน์มากสำหรับการแก้จุดบกพร่อง)
- ตกลง: ความสำเร็จความสำเร็จ 1
- ผิดพลาด: ถ้ามันล้มเหลวอาจจะมีเหตุผลที่จะล้มเหลว แต่จากประสบการณ์เหตุผลคือคลุมเครือไม่ได้มีประโยชน์มาก
ใช้ประกอบการค้นหาเพื่อดู MapReduce ผลการค้นหาของ:
>db.posts.mapReduce( function() { emit(this.user_name,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } ).find()
ผลที่ได้จากแบบสอบถามดังกล่าวจะแสดงด้านล่างมีทอมสองผู้ใช้และทำเครื่องหมายสองบทความที่ตีพิมพ์:
{ "_id" : "mark", "value" : 4 } { "_id" : "w3big", "value" : 1 }
ในลักษณะที่คล้ายกัน MapReduce สามารถนำมาใช้ในการสร้างขนาดใหญ่แบบสอบถามรวมที่ซับซ้อน
ฟังก์ชั่นแผนที่และลดฟังก์ชั่นสามารถดำเนินการได้โดยใช้ JavaScript, MapReduce ทำให้การใช้งานมีความยืดหยุ่นมากและมีประสิทธิภาพ