ค่าใช้จ่ายในขั้นตอนภาษา PostgreSQL (plpython / plsql / pllua …)


12

ฉันพยายามค้นหาข้อมูลเกี่ยวกับฟังก์ชั่นที่ผู้ใช้กำหนด PostgreSQL ในภาษาขั้นตอนการปฏิบัติงานตามเวลาจริง

  1. พวกเขาเปรียบเทียบกับฟังก์ชั่นในตัวอย่างไร
  2. มีความแตกต่างใด ๆ (ในค่าใช้จ่าย) วิธี Postgres เรียก / จัดการ plpython vs plpgsql vs pllua ฟังก์ชั่น (ฉันสนใจในด้านบูรณาการ Postgres / บริบท / การถ่ายโอนข้อมูลไม่ใช่ VM ตัวเอง)?
  3. บริบทเป็นค่าใช้จ่ายใหญ่หรือไม่ ฉันสามารถใช้มันสำหรับการจับคู่ข้อมูลแบบเรียลไทม์ (สมมุติว่า 1,000 ข้อความค้นหา)
  4. มีประโยชน์ในการเขียนฟังก์ชั่นที่ผู้ใช้กำหนดใน plpgsql แล้ว pg / ภาษาอื่น ๆ ? ในเอกสารพวกเขาระบุข้อได้เปรียบ แต่ฉันคิดว่าพวกเขาใช้กับภาษาขั้นตอน postgresql ทั้งหมด

ผลการวิจัยที่เกี่ยวข้อง:

คำตอบ:


13
  1. UDF ในภาษาที่ตีความแล้วจะช้ากว่า UDF ที่เขียนด้วยภาษา C หรือฟังก์ชั่นในตัวค่อนข้างมากสิ่งอื่น ๆ ทั้งหมดก็เหมือนกัน

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

  3. ไม่ชัดเจนว่า "บริบท" คืออะไร คุณสามารถใช้มันสำหรับ "การทำแผนที่ข้อมูลแบบเรียลไทม์" ... ได้ดีขึ้นอยู่กับฟังก์ชั่นการใช้งานและถ้ามันเร็วพอบนเซิร์ฟเวอร์ที่กำลังทำงานอยู่สำหรับลูกค้าที่ใช้งานและตามความต้องการของคุณ สายอักขระยาวเท่าไหร่ เกณฑ์มาตรฐาน

  4. PL / PgSQL นั้นง่ายต่อการเขียนและให้การเข้าถึง SQL ที่รวดเร็วยิ่งขึ้น โดยทั่วไปแล้วจะดีกว่าเมื่อคุณจำเป็นต้องใช้เหตุผลเล็ก ๆ น้อย ๆ ล้อมรอบ SQL จำนวนมาก มันช้ามากสำหรับการดำเนินการทางคณิตศาสตร์และอัลกอริทึมที่ซับซ้อนดังนั้นรหัสการคำนวณอย่างหมดจดใน PL / PgSQL ควรหลีกเลี่ยงเมื่อใดก็ตามที่เป็นไปได้ในความโปรดปรานของ C หรือภาษาขั้นตอนที่เร็วขึ้น

Speedups เมื่อทำการติดตั้งรหัส PL / PgSQL อีกครั้งใน C อาจแตกต่างกันไปจากการละเลยมากกว่า 1,000 ครั้ง ทุกอย่างขึ้นอยู่กับรหัสที่ใช้งานจริง

(หลายคำถามแบบนี้ไม่เหมาะกับการแลกเปลี่ยนแบบกองซ้อนเนื่องจากยากกว่าที่จะมีคำตอบที่ชัดเจน)


ตามบริบทฉันหมายถึงข้อมูลทั้งหมดที่จำเป็นต้องมีการถ่ายโอนไปมาในสภาพแวดล้อมที่
Robert Zaremba

4

มันค่อนข้างยากที่จะบอก มันขึ้นอยู่กับสิ่งที่คุณกำลังทำ ตัวอย่างเช่น: PL / pgSQL นั้นยอดเยี่ยมถ้าคุณมีคำสั่ง SQL ขนาดใหญ่อยู่ในนั้น - มันจะบ้าไปจริง ๆ ถ้าคุณมีการแตกแขนงย่อยการจัดการซับสตริงและสิ่งนั้น

คุณต้องทำการทดสอบจากกรณีหนึ่งไปยังอีกกรณีหนึ่ง


4

บริบทเป็นค่าใช้จ่ายใหญ่หรือไม่ ฉันสามารถใช้มันสำหรับการจับคู่ข้อมูลแบบเรียลไทม์ (สมมุติว่า 1,000 ข้อความค้นหา)

ประสิทธิภาพขึ้นอยู่กับฮาร์ดแวร์และความซับซ้อนของฟังก์ชั่นของคุณ ฉันสร้างอุปกรณ์ที่ทำงานบนเซิร์ฟเวอร์ 12-core ขนาดเล็กและการ์ด FusionIO (รวมค่าใช้จ่าย 10,000 ยูโร) และทำธุรกรรมประมาณ 2500 ต่อวินาทีกับผู้ใช้ 20 คนพร้อมกัน แต่ละธุรกรรมเรียกขั้นตอนการจัดเก็บ 29 ครั้งสำหรับการประมวลผลข้อมูลและส่งคืนข้อมูลที่เป็นประโยชน์บางอย่างให้กับลูกค้า ฟังก์ชั่นบางฟังก์ชั่นดำเนินการเพียงหนึ่งแบบสอบถามอื่น ๆ สองสามแบบสอบถาม โดยรวมจะประมวลผลคำสั่ง INSERT, SELECT และ UPDATE ประมาณ 200,000 คำต่อวินาที

ทั้งหมดนี้เขียนด้วยภาษา PL / SQL, PL / pgSQL และ PL / PerlU และฉันค่อนข้างมั่นใจว่าระบบสามารถทำงานได้เร็วขึ้นเมื่อฟังก์ชั่น (บางส่วน) ถูกเขียนใหม่ใน C

ในเครื่องนี้ประสิทธิภาพส่วนใหญ่มาจากการ์ด SSD บนดิสก์หมุนเดียวเราจะไม่ได้รับประสิทธิภาพนี้เลย ไดรฟ์ SSD ราคาถูกก็ล้มเหลวมันใช้งานได้หนึ่งชั่วโมง FusionIO-card นั้นมีราคาแพง แต่เป็นการลงทุนที่ดีมากเมื่อคุณถูก IO

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