Marklogic ลบขนาดใหญ่

อยากทราบว่ามีใครมีประสบการณ์ในการลบเอกสารนับล้านใน Marklogic บ้างไหมครับ? ในขณะนี้ฉันใช้ xqueries แบบง่าย ๆ เพื่อดึงเอกสาร uri ซึ่งจำเป็นต้องลบออก จากนั้นฉันใช้ corb เพื่อแบทช์การดำเนินการทั้งหมด

มีวิธีที่เร็วกว่าในการลบเอกสารนับล้านเมื่อฉันมีรายการ Uris หรือไม่


person Harry    schedule 20.08.2012    source แหล่งที่มา


คำตอบ (3)


มีหลายวิธีในการแก้ไขปัญหานี้ คำถามแรกคือคุณจะดึงเอกสาร uri ได้อย่างไร แนวทางที่ดีที่สุดคือการใช้พจนานุกรม URI และ cts:uris หรือ cts:uri-match ประการที่สองคือวิธีการลบของคุณ คุณสามารถวนซ้ำ uri's ที่พบและเรียก xdmp:document-delete สำหรับแต่ละรายการ แต่คุณอาจพิจารณาข้ามทั้งหมดข้างต้นและเปลี่ยนกลับเป็น xdmp:collection-delete ทั้งหมดพร้อมกัน ดูเหมือนว่าจะทำงานได้อย่างมีประสิทธิภาพมาก คุณจะต้องกำหนดป้ายกำกับคอลเลกชันที่ไม่ซ้ำกัน และสามารถลบออกได้ทั้งหมด

ฮ!

person grtjn    schedule 20.08.2012
comment
ฉันไม่คิดว่า xdmp:collection-delete จะช่วยในกรณีของฉัน เนื่องจากฉันมีคอลเลกชัน /a/b/c ซึ่งมีเอกสาร 2 ล้านเอกสาร และมีเพียง 1 ล้านเท่านั้นที่มีสิทธิ์ ดังนั้น หากฉันใช้ xdmp:collection-delete มันจะลบเอกสารทั้งหมด..สำหรับคำถามของคุณว่าฉันจะได้รับ URI ได้อย่างไร ฉันกำลังใช้ cts:uris - person Harry; 21.08.2012

กำลังโทรหา xdmp:spawn หรือ xdmp:spawn-function อาจจะเร็วกว่า corb เล็กน้อย เพียงเพราะมันหลีกเลี่ยงการไปกลับของเครือข่าย

หากมีการจัดระเบียบเอกสารไว้ xdmp:collection-delete หรือ xdmp:directory-delete ก็อาจเร็วขึ้นเช่นกัน แต่คอลเลกชันหรือไดเร็กทอรีควรมีเอกสารประมาณ 1,000-100,000 รายการต่อเอกสาร

สุดท้ายนี้ถ้าคุณต้องการกำจัดทุกอย่าง การล้างฟอเรสต์หรือฐานข้อมูลจะเร็วกว่ามาก การส่งออกสิ่งที่คุณต้องการเก็บไว้อาจเร็วกว่านี้ (อาจใช้ XQSync) ล้างฐานข้อมูล แล้วนำเข้าใหม่อีกครั้ง

person mblakele    schedule 21.08.2012
comment
นั่นแหละ เอกสารที่ฉันต้องการลบไม่ได้รับการจัดระเบียบ ฉันจะลองใช้ xdmp:spawn ตอนนี้แล้วดูว่ามันจะยุติธรรมกับ corb อย่างไร - person Harry; 21.08.2012

โปรดทราบว่าหากคุณเปิดใช้งานการสร้างไดเร็กทอรีการลบจะช้ากว่ามาก หากคุณไม่ต้องการไดเร็กทอรี (จำเป็นจริงๆ สำหรับ WEBDAV เท่านั้น) ฉันแนะนำว่าอย่าใช้ไดเร็กทอรี การลบจะเร็วขึ้นมาก

person DALDEI    schedule 21.08.2012