ใครใช้ HierarchyId ในการผลิต? มันน่าเชื่อถือเหรอ?


21

มีใครใช้ HierarchyId ในการผลิตจริงกับตารางขนาดที่เหมาะสมมากกว่าสองสามพันแถวใช่ไหม มันน่าเชื่อถือ / นักแสดง? เพื่อให้ห่างไกลฉันไม่ได้พบคนที่ไม่ได้มีส่วนเกี่ยวข้องกับผู้ขายแนะนำและให้คำแนะนำแก่พอลนีลเซ่นกับมันนี่

ประสบการณ์ของคุณในการใช้ HierarchyId ในระบบการผลิตจริงคืออะไร

คุณใช้เกณฑ์ใดเมื่อคุณเลือก HierarchyId ทางเลือกอื่น

คำตอบ:


8

ฉันใช้งาน HierarchyID และพบว่าให้ประสิทธิภาพที่ดีและใช้งานง่าย

ฉันใช้มันในชุดข้อมูลที่ค่อนข้างเล็ก (หมื่นแถว) ที่มีลำดับชั้นสูงถึง 10 สาขา

ทำไมต้องใช้ ประเภท HierarchyID มีวิธีการช่วยเหลือมากมาย (เช่นIsDescendantOf) ที่ทำให้งานของคุณง่ายกว่าการกลิ้งเส้นทางที่เป็นรูปธรรมของคุณเอง

ความคิดเห็นของ Paul Nielsen เกี่ยวกับ StackOverflow ทำให้ฉันสับสน - HierarchyID เป็นเส้นทางที่ปรากฏ ฉันมีแนวโน้มที่จะเห็นด้วยกับความคิดเห็นนี้ด้านล่างคำตอบของเขา

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


+1 คุณมั่นใจได้อย่างไรว่าข้อมูลของคุณสมบูรณ์ คุณสามารถใช้ข้อ จำกัด เพื่อให้แน่ใจว่าไม่มีเด็กกำพร้าได้หรือไม่?
AK

3
จากหน่วยความจำคุณสามารถ คุณจะใช้ฟังก์ชันทั่ว HierarchyID เพื่อกำหนดค่าพาเรนต์สร้างคอลัมน์ที่คำนวณแล้วสำหรับค่านั้นจากนั้นใช้ข้อ จำกัด FK ระหว่างค่านั้นกับพาเรนต์
Kirk Broadhurst

5

นี่คือคำตอบสำหรับคำถามของ Kirk 'ทำไมไม่ใช้ (HierarchyId)' เมื่อเปรียบเทียบกับเส้นทางที่ปรากฏขึ้นในบางกรณีสำคัญ HierarchyId ดูเหมือนจะมีประสิทธิภาพน้อยกว่าและสะดวกกว่าในการทำงานด้วย

เหตุผลง่ายๆคือ: อ้างจากไมโครซอฟท์แสดงความคิดเห็นในการเชื่อมต่อ , "ปัญหาคือว่า CLR สายรวมถึงวิธีการ hierarchyID ของจะทึบแสงเพื่อเพิ่มประสิทธิภาพการค้นหาโดยการออกแบบ แต่ก็หมายความว่าประมาณการ cardinality สำหรับพวกเขาบางครั้งอาจจะค่อนข้าง.. ไม่ถูกต้อง."

ในทางกลับกันการใช้เส้นทางที่เป็นรูปธรรมนั้นง่ายมากในครั้งแรกที่เราต้องทำและในครั้งต่อไปมันเป็นภารกิจคัดลอกและวาง ดังนั้นเราจึงได้โซลูชันที่หลากหลายและมีประสิทธิภาพมากขึ้นโดยใช้ความพยายามเพียงเล็กน้อย

ดังนั้นฉันจึงเห็นด้วยกับ Paul Nielsen ผู้เขียนหนังสือยอดเยี่ยมของเขาในชื่อ "Microsoft® SQL Server® 2008 Bible" ดังนี้: "HierarchyID ใหม่ไม่ได้ไม่มีข้อโต้แย้งใด ๆ มันใหม่และได้รับเวลากดและตัวอย่างมากมาย แต่ฉัน ' ไม่แน่ใจว่าเป็นปัญหาที่ต้องใช้วิธีแก้ไขปัญหาอื่น "


3

บริษัท ของฉันใช้ HeirachyID ในการขายตรงซอฟต์แวร์การตลาดหลายระดับ มันได้ผล. ฉันยังไม่ได้ทำงานใด ๆ กับมันฉันเพิ่งรู้ว่าเรากำลังใช้มัน

ปัญหาที่ใหญ่ที่สุดที่ฉันเคยเห็นคือเรากำลังทำซ้ำในระดับที่เป็นแบบวนรอบแทนที่จะเป็นแบบเซ็ต ในพื้นที่นั้นมันทำงานได้ไม่ดีจริง ๆ สำหรับเรา แต่ฉันไม่แน่ใจว่าเป็นปัญหากับประเภทหรือการนำไปใช้ของเราหรือไม่


แจ็คโต๊ะของคุณใหญ่แค่ไหน? คุณเลือกใช้ HierarchyId แทนทางเลือกอย่างไร
AK

เนื่องจากฉันไม่ได้เปิดใช้งานการแจ้งเตือนทางอีเมลฉันไม่เคยเห็นความคิดเห็นนี้ ตารางของเราอยู่ในหลายแสนคนในปัจจุบันไม่ใช่ล้าน ฉันไม่ได้อยู่กับ บริษัท เมื่อมีการตัดสินใจใช้ HierarchyID ฉันจึงไม่แน่ใจว่าทำไมถึงได้รับเลือกนอกเหนือจากวิธีการใหม่ในเวลานั้น
Jack Corbett

1

ปัญหาหนึ่งที่มีลำดับชั้นคือคุณได้รับล็อคผู้ขาย แต่ฉันพบบทความที่ยอดเยี่ยมโดย Adam Milazzo เกี่ยวกับการทำงานทุกอย่างภายใน:

http://www.adammil.net/blog/view.php?id=100

ด้วยสิ่งนี้ฉันสามารถเขียนสคริปต์ Postgres เพื่อแปลงชุดข้อมูลของฉันจาก MSSQL รวมไว้ในสคริปต์ที่ฉันเขียนเพื่อนำเข้าฐานข้อมูล AdventureWorks ลงใน Postgres:

https://github.com/lorint/AdventureWorks-for-Postgres

เพียงค้นหา "hierarchyid" ในไฟล์ install.sql ที่นั่นและในไม่ช้าคุณจะพบการอ้างอิงเพื่อทำการแปลง


0

ทีมงานของเราได้นำไปใช้ในการผลิตในตอนแรกประสิทธิภาพดีหลังจาก 2 ปีตอนนี้ตารางมี 430,000 แถวและ getroot และ getdecendent ใช้เวลา 3 วินาทีทั้งคู่ต้องคำนวณค่า Id ถัดไปสำหรับการแทรกเรคคอร์ด ตอนนี้การแทรกทรีย่อยครั้งเดียวใช้เวลาประมาณ 16 วินาทีซึ่งไม่เป็นที่ยอมรับเลย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.