หนึ่งในสิ่งที่ผู้คนไม่เข้าใจคือการทำการประมวลผลทั้งหมดของคุณบนเซิร์ฟเวอร์ SQL นั้นไม่จำเป็นต้องดีโดยไม่คำนึงถึงผลกระทบที่มีต่อคุณภาพของรหัส
ตัวอย่างเช่นถ้าคุณต้องการคว้าข้อมูลบางส่วนแล้วคำนวณบางอย่างจากข้อมูลแล้วเก็บข้อมูลนั้นในฐานข้อมูล มีสองทางเลือก:
- หยิบข้อมูลลงในแอปพลิเคชันของคุณคำนวณภายในแอปพลิเคชันของคุณแล้วส่งข้อมูลกลับไปยังฐานข้อมูล
- สร้างกระบวนงานที่เก็บไว้หรือคล้ายกันเพื่อดึงข้อมูลคำนวณจากนั้นจัดเก็บทั้งหมดจากการโทรครั้งเดียวไปยังเซิร์ฟเวอร์ SQL
คุณอาจคิดว่าทางออกที่สองนั้นเร็วที่สุดเสมอ แต่นี่ไม่เป็นความจริง ฉันไม่สนใจแม้ว่า SQL จะไม่เหมาะสมสำหรับปัญหา (เช่น regex และการจัดการสตริง) สมมติว่าคุณมี SQL CLR หรือบางสิ่งที่คล้ายกันเพื่อให้มีภาษาที่มีประสิทธิภาพในฐานข้อมูล หากใช้เวลา 1 วินาทีในการเดินทางไปกลับและรับข้อมูลและ 1 วินาทีในการจัดเก็บและจากนั้น 10 วินาทีเพื่อทำการคำนวณข้าม คุณทำผิดถ้าคุณทำทุกอย่างในฐานข้อมูล
แน่นอนว่าคุณได้โกนทิ้งไป 2 วินาที อย่างไรก็ตามคุณค่อนข้างเสีย 100% ของ (อย่างน้อย) ซีพียูหนึ่งคอร์บนเซิร์ฟเวอร์ฐานข้อมูลของคุณเป็นเวลา 10 วินาทีหรือคุณเสียเวลาไปกับการที่เว็บเซิร์ฟเวอร์ของคุณหรือไม่
เว็บเซิร์ฟเวอร์ง่ายต่อการขยายฐานข้อมูลในทางกลับกันมีราคาแพงมากโดยเฉพาะฐานข้อมูล SQL เวลาส่วนใหญ่เว็บเซิร์ฟเวอร์นั้นเป็น "ไร้รัฐ" เช่นกันและสามารถเพิ่มและลบออกได้โดยไม่ต้องมีการกำหนดค่าเพิ่มเติมใด ๆ ยกเว้น load balancer
ดังนั้นอย่าคิดเพียงแค่โกนหนวดออกไป 2 วินาที แต่ยังคิดเกี่ยวกับความยืดหยุ่น เหตุใดจึงเสียทรัพยากรที่มีราคาแพงเช่นทรัพยากรเซิร์ฟเวอร์ฐานข้อมูลเมื่อคุณสามารถใช้ทรัพยากรเว็บเซิร์ฟเวอร์ที่ราคาถูกกว่ามากและมีผลกระทบต่อประสิทธิภาพการทำงานค่อนข้างน้อย