دیدید که توی جنگو وقتی از query set چند بار استفاده میکنیم نتیجه نمیده یا مثلا هیچ دیتایی وارد دیتا بیس نمیشه یا اشتباه وارد میشه؟
خب این یک باگه معروفه به اسم queryset caching bug که توی django ORM هستش.
مشکل کجاست؟
توی جنگو queryset ها lazy هستن و فقط وقتی لازم باشه داده رو از دیتابیس میگیره اما وقتی یک queryset کش میشه (مثلا با() list یا iteration ) نتیجه اش میشه که توی حافظه می مونه و یا همون کش قدیمی رو نگه میداره .
واییییییییییی باگ واقعی از اونجایی شروع شد که متد هایی مثل () count یا () exists هم بعثی وقتا به کش وابسته ان ولی نباید اینطور میشد .
و ممکن بود که شمارش رکورد ها اشتباه باشه و در سیستم های حساس فاجعه به بار می آورد.
و توسعه دهنده هایی که ORM رو عمیق میشناختن تونستن بفهمن مشکل از کجاست.
اومدن رفعش کردن چطوری؟
در نسخه های بعدی جنگو تیم رسمی ORM رو بازسازی کرد تا اون دوتا متد ها همیشه کوئری جداگانه بفرسته و به کش متکی نباشه .
#BUG
#Django
#ORM
@ZGProtocol
Post #843
137
Forwarded from ZGP
- ❤ 4