ระหว่างการ review code ของระบบงาน สิ่งที่พบเจอบ่อยมาก ๆ คือ N+1 problem ฟังแล้วอาจจะงง ๆ ว่าคืออะไร มาดูตัวอย่างกัน
การดึงข้อมูลจาก database/service
เมื่อต้องการข้อมูล product ว่ามี product ใหม่วันนี้มีอะไรบ้าง นั่นคือจะทำการดึงข้อมูล product 1 ครั้งมาจำนวน N product แต่สิ่งที่ product แต่ละตัวต้องการอีกคือ promotion และ stock ทำให้ต้องไปดึงข้อมูลของมาเพิ่มในแต่ละ product ถ้าเขียน code ง่าย ๆ จะทำแบบนี้
products = getNewProducts() for product in products { promotion = getPromotionByProduct(product.id) // TODO next } for product in products { stock = getStockByProduct(product.id) // TODO next }
น่าแปลกว่า จะเจอปัญหาแบบนี้เยอะมาก ๆ ที่สำคัญมักจะส่งผลต่อระบบงานในเชิงลบอย่างมาก และชอบแก้ไขด้วยการเพิ่ม CPU/MEMORY ของระบบอีกต่างหาก !! ทำไมนะ ?