နားလည်ထားရမယ့် အချက်
Lesson 14 မှာ N+1 problem ရဲ့ root cause (list field တစ်ခုချင်းအတွက် per-item resolver database query သီးခြားခေါ်ခြင်း) ကို လေ့လာခဲ့ပါတယ်။ ဒီ exercise ကတော့ ဒီ pattern ကို code snippet အစစ်တစ်ခုမှာ ကိုယ်တိုင်ရှာပြီး diagnose လုပ်ကာ DataLoader ဖြင့် ပြင်ဆင်ပြီး fix ကို verify လုပ်ကြည့်ဖို့ ဖြစ်ပါတယ်—production debugging မှာ N+1 ကို database query log အရေအတွက် (list size ကြီးလာတာနဲ့အမျှ query count တက်ခြင်း) ကနေလည်း သတိထားမိနိုင်ပါတယ်။
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
Tutorial Platform ရဲ့ `Tutorial.author` resolver ကနေ tutorials list တစ်ခု fetch လုပ်တိုင်း database query log ထဲမှာ `SELECT * FROM authors WHERE id = ?` ဟာ tutorial count နဲ့ တူညီအောင် repeat ဖြစ်နေတာကို တွေ့ရပါတယ်—ဒီ bug ကို ဖော်ထုတ်ပြီး `authorLoader` ဖြင့် batch query တစ်ခုတည်းသို့ ပြောင်းရမယ်။
အတူတူ စမ်းရေးကြည့်မယ်
// Buggy: fires one query per tutorial
const resolvers = {
Tutorial: {
author: async (tutorial) => {
return db.author.findUnique({ where: { id: tutorial.authorId } });
},
},
};
// Your task: rewrite this resolver to use a DataLoader
// so N tutorials cause exactly one authors query.N+1 bug ကို resolver code ထဲကနေ ဖော်ထုတ်ပြီး DataLoader-based fix ကို ကိုယ်တိုင်ရေးနိုင်မည်။၅ မိနစ် စမ်းကြည့်
အပေါ်က buggy resolver ကို `authorLoader` (lesson 14 က ဥပမာအတိုင်း) သုံးပြီး ပြန်ရေးပါ။ ပြင်ပြီးနောက် tutorials 10 ခုအတွက် author queries အရေအတွက် ဘယ်လောက်ဖြစ်သွားမလဲ ရေးပါ။
သတိလေးတစ်ချက်
Fix အနေနဲ့ resolver ထဲမှာ simple in-memory object cache (request boundary မရှိ) ကိုသုံးမိရင် request အသစ်တိုင်း stale data ဆက်ပြနေနိုင်ပါတယ်—DataLoader instance ကို context ထဲက request-scoped ဖြစ်အောင် ထားပါ။
Apollo Server — Batching with DataLoader — GraphQL