ประโยชน์ของแพ็คเกจเหนือขั้นตอนและฟังก์ชั่นแบบสแตนด์อโลนคืออะไร


13

กำลังมองหาคำตอบที่ยอมรับได้สำหรับคำถามที่ว่าทำไมแพ็กเกจควรเป็นที่ต้องการในฐานข้อมูล Oracle เกี่ยวกับขั้นตอนและฟังก์ชันแบบสแตนด์อะโลน

คำตอบ:


12

ประโยชน์ของแพ็คเกจ

การจัดกลุ่มแบบลอจิคัล - วิธีการที่ทำงานร่วมกันสามารถถูกใส่เข้าไปในหน่วยที่มีความเหนียวแข็งมากกว่าแค่การแยกทางตรรกะ แต่แยกทางร่างกาย

วิธีการรักษาความปลอดภัยส่วนตัว - ฟังก์ชั่นและขั้นตอนสามารถทำให้เป็นส่วนตัวกับแพคเกจและจะใช้ได้เฉพาะภายในมัน สิ่งนี้ทำให้พื้นผิวสาธารณะเรียบง่ายและปลอดภัยยิ่งขึ้น

การจัดการสิทธิ์ - สามารถได้รับอนุญาตหนึ่งครั้งสำหรับกลุ่มของขั้นตอนที่ทำงานร่วมกันแทนที่จะแยกต่างหากสำหรับแต่ละขั้นตอน / ฟังก์ชั่นที่ต้องการ

Secure Wrapping - แพคเกจที่ห่อนั้นยากต่อการแกะมากกว่าฟังก์ชั่น / ขั้นตอนการห่อ

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

ประสิทธิภาพที่ดีขึ้น - แพคเกจสามารถรวบรวมและโหลดลงในหน่วยความจำอย่างครบถ้วนมากกว่าทีละน้อยเป็นวิธีการอื่น ประโยชน์นี้หากมีอยู่ทั้งหมดน้อยที่สุดเมื่อเทียบกับผลประโยชน์อื่น ๆ

Reduced Invalidation - การเปลี่ยนเนื้อความแพ็กเกจไม่ทำให้การอ้างอิงเป็นโมฆะเนื่องจากการเปลี่ยนฟังก์ชันหรือโพรซีเดอร์ทำ

คุณลักษณะเฉพาะ - ตัวแปรแพคเกจ, ค่าคงที่ของแพ็คเกจ, การเริ่มต้น, สถานะเซสชัน, ความคิดเห็นของแพ็กเกจและวิธีการโอเวอร์โหลด

ข้อมูลอ้างอิง:
11.2 คู่มือแนวคิด
ถามคำถาม Tom
StackOverflow.com คำถามเกี่ยวกับประสิทธิภาพของแพ็คเกจ
การนำเสนอ PL / SQL (pdf)


2
ฉันไม่เห็นด้วยกับผลประโยชน์ด้านการแสดง หากการโหลดรหัสลงในหน่วยความจำเป็นเหตุการณ์รอที่ยอมรับได้มีบางสิ่งไม่ดีเกิดขึ้น และมีความเป็นไปได้สูงที่ความจริงที่ว่าแพ็กเกจจะลดประสิทธิภาพเนื่องจากคุณต้องอ่านโค้ดเพิ่มเติมเมื่อคุณโหลดแพ็กเกจทั้งหมดเมื่อคุณต้องการเพียงวิธีเดียวเท่านั้น ไม่ว่าในกรณีใดความแตกต่างของประสิทธิภาพจะสามารถวัดได้
Justin Cave

@ จัสติน - จุดนั้นมาจากแนวทางแนวคิด 11.2 นี่คือสิ่งที่กล่าวไว้: "ประสิทธิภาพที่ดีขึ้น - แพคเกจทั้งหมดจะถูกโหลดลงในหน่วยความจำในชิ้นเล็ก ๆ เมื่อขั้นตอนในแพคเกจถูกเรียกเป็นครั้งแรกการโหลดนี้เสร็จสมบูรณ์ในการดำเนินการครั้งเดียว ขั้นตอนเมื่อมีการโทรไปยังขั้นตอนการบรรจุที่เกี่ยวข้องเกิดขึ้นไม่จำเป็นต้องใช้ดิสก์ I / O ในการเรียกใช้รหัสที่คอมไพล์ในหน่วยความจำ "
Leigh Riffel

4
ฉันยอมรับว่าเอกสารอ้างว่ามีประโยชน์ด้านประสิทธิภาพ เอกสารไม่ถูกต้องหรืออย่างน้อยที่สุดก็ไม่เพียงพอ กรณีที่ดีที่สุดขนาดของ "ผลประโยชน์" คือขนาดเล็ก และสัญญาณของผลประโยชน์ไม่เป็นที่รู้จัก เช่นเดียวกับการสแกนตารางจะมีประสิทธิภาพมากขึ้นถ้าคุณกำลังอ่านแถวส่วนใหญ่และการเข้าถึงดัชนีนั้นมีประสิทธิภาพมากขึ้นถ้าคุณกำลังอ่านแถวเดียวการอ่านทั้งแพคเกจไว้ในหน่วยความจำในครั้งเดียวจะเป็นประโยชน์ถ้าคุณกำลังจะ ใช้ทุกวิธีและเสียเปรียบหากคุณต้องการเพียงวิธีเดียวเท่านั้น
Justin Cave

1
@Justin - การประเมินของคุณฟังดูสมเหตุสมผล ฉันไม่พบสิ่งใดที่ชัดเจนไม่ทางใดก็ทางหนึ่งดังนั้นฉันจึงเพิ่ม caveat ไว้ในคำตอบ ขอบคุณสำหรับข้อมูลของคุณ
Leigh Riffel

ฉันคิดว่าประโยชน์การแสดงนี้คล้ายกับแคช หากคุณใช้เฉพาะขั้นตอนนั้นและคุณใช้งานน้อยกว่านั้นคุณจะไม่ได้รับประโยชน์ด้านประสิทธิภาพใด ๆ แต่ถ้าคุณใช้บ่อยและขั้นตอนอื่นใดที่ใช้ในแพ็คเกจนี้คุณจะได้รับประโยชน์ นักพัฒนาทุกคนกำลังใช้แคชเนื่องจากไม่ใช่ประสิทธิภาพจริง แต่ประสิทธิภาพการรับรู้ดีขึ้น เนื่องจากโพรซีเดอร์ที่เกี่ยวข้องนำไปใช้กับแพ็กเกจเดียวกันมันเป็นตรรกะที่โพรซีเดอร์อื่นจะถูกเรียกด้วย นี่คือทั้งหมดที่เกี่ยวกับความน่าจะเป็นที่จะเรียกสองโพรซีเดอร์ในแพ็คเกจเดียวกัน และโดยปกติแล้วอ่านด้วยความน่าจะเป็นสูงมันเกิดขึ้น
Atilla Ozgur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.