ฉันจะใช้ CouchDB Bulk API แม้ว่าคุณจะระบุว่าต้องส่งไปที่ db ทีละรายการก็ตาม ตัวอย่างเช่น การใช้คิวง่ายๆ ที่ส่งออกทุกๆ 5 - 10 วินาทีผ่านการเรียกเอกสารจำนวนมากจะช่วยเพิ่มประสิทธิภาพให้กับแอปพลิเคชันของคุณได้อย่างมาก
เห็นได้ชัดว่ามีนิสัยแปลกๆ ในนั้น และนั่นคือคุณต้องทราบ ID ของเอกสารที่คุณต้องการได้รับจาก DB แต่สำหรับ PUT มันสมบูรณ์แบบ (ไม่เป็นความจริงทั้งหมด คุณสามารถรับเอกสารได้หลากหลายโดยใช้การดำเนินการเป็นกลุ่ม หาก ID ที่คุณใช้สำหรับเอกสารของคุณสามารถจัดเรียงอย่างดี)
จากประสบการณ์ของฉันในการทำงานกับ CouchDB ฉันมีลางสังหรณ์ว่าคุณกำลังจัดการกับเอกสารธุรกรรมเพื่อรวบรวมเป็นผลลัพธ์รวมและดำเนินการกับข้อมูลนั้นตามนั้น (อาจสร้างเอกสารธุรกรรมถัดไปเป็นชุด) เพื่อให้คุณสามารถไว้วางใจ CouchDB ได้โดยใช้ฟังก์ชัน 'ลด' ในมุมมองที่คุณสร้าง ต้องใช้การฝึกฝนเล็กน้อยเพื่อให้ฟังก์ชันลดทำงานได้อย่างถูกต้องและขึ้นอยู่กับสิ่งที่คุณต้องทำจริง ๆ ว่าจะบรรลุผลสำเร็จและข้อมูลใดที่คุณเตรียมที่จะปล่อยออกมาจากมุมมอง ดังนั้นฉันจึงไม่สามารถให้รายละเอียดเพิ่มเติมแก่คุณได้จริงๆ
ดังนั้นท้ายที่สุดแล้ว ตรรกะของแอปจะเป็นดังนี้:
get _design/someDesign/_view/yourReducedView
calculate new transaction
add transaction to queue
onTimeout
send all in transaction queue
ถ้าฉันเข้าใจส่วนแรกว่าทำไมคุณถึงใช้เอกสารธุรกรรมผิด สิ่งที่จะเปลี่ยนไปจริงๆ ก็คือส่วนที่คุณได้รับเอกสารธุรกรรมเหล่านั้นในตรรกะของแอปของฉัน
นอกจากนี้ ก่อนที่จะเขียนฟังก์ชัน 'reduce' ของคุณเอง โปรดดูที่ ฟังก์ชันในตัว (มันเร็วกว่ามากเมื่อเทียบกับอะไรก็ตามที่อยู่นอกเอ็นจิ้น db ก็สามารถทำได้)
http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API
แก้ไข: เนื่องจากคุณเพิ่งเริ่มต้น ฉันขอแนะนำอย่างยิ่งให้ดูที่CouchDB Definitive Guide
หมายเหตุสำหรับภายหลัง:
นี่คือหินที่ซ่อนอยู่ก้อนหนึ่ง (อาจจะไม่ใช่หินที่ซ่อนอยู่มากนัก แต่ก็ไม่ใช่สิ่งที่ชัดเจนที่ต้องระวังสำหรับผู้มาใหม่ไม่ว่าในกรณีใดก็ตาม) เมื่อคุณเขียนฟังก์ชันลด ตรวจสอบให้แน่ใจว่าไม่ได้สร้างผลลัพธ์มากเกินไปสำหรับการสืบค้นที่ไม่มีขอบเขต สิ่งนี้จะทำให้การดูทั้งหมดช้าลงอย่างมากแม้ว่าคุณจะระบุลด=เท็จเมื่อรับสิ่งต่าง ๆ
person
Dmitry Matveev
schedule
18.09.2014