آپدیت کردن چند آبجکت به صورت همزمان در #جنگو
فریمورک #django قابلیت آپدیت کردن دیتاها رو به روش ها مختلف داره که خیلی ها یا ازش بی خبر ان یا استفاده نمیکنن. بیایید ببینیم هر کدوم رو کجا استفاده کنی بهتره :)
مدل فرضی:
خب فرض کنید ما یک هدیه به مناسب عید نو روز میخواییم به کاربرا بدیم، مثلا میخاییم نفری ۲ هزار تومن هدیه بدیم D:
حالا چند روش وجود داره.
روش اول ( نوب):
خیلی ساده و البته درب و داغون در خیلی جهات. مشکل اول اینه که ما رو همه کاربرا حلقه میزنیم و هر بار آپدیت رو روی کاربرا صدا میزنیم یعنی برای هر یوزر یک درخواست اپدیت به دیتابیس میره که اگه ۱ میلیون یوزر داشته باشیم ۱ میلیون درخواست میره :).
( تو اینه پست به اینکه باید از F استفاده کنید یا کانکارنسی و اینا هندل کنید اشاره نمیکنم، پستها قبلی بخونید)
حالا روش بهتر چیه؟
روش بهتر:
همینقدر ساده :)
سناریو دوم: با بکاند یک بازی خفن رو داریم توسعه میدیم، داخل این بازی هر هفته یک ایونت اتفاق میوفته که افرادی که اون رو تموم کنن در آخر هفته یک تایتل به کنار اسمشون اضافه میشه و همچنین اگه امتیاز بالاتر از ۱۰ کسب کرده باشن به بالانس پول داخل گیمشون هم ۱۰۰ تا گلد اضافه میشه.
حالا بیایید فقط کوئری آپدیت این بهش ببینیم، فرض کنید این کوئری آخر هفته اجرا میشه. ( این فیلدا تو مدل فرض نداریم دیگه خودتون فرض کنید هست 😂❤️)
خب همینطور که خیلی معلومه مشکلات فراوان داخلش هست. بزرگترین مشکلش اینه که هر بار برای هر کاربر یک درخواست آپدیت میدیم که میشهه همون مشکل بالا، آما آیا این بار میشه از روش بالا استفاده کرد و اینو فیکسش کرد؟ نه
روش بالا زمانی کاربرد داره که فیلدها قراره یک مقداری ثابتی به همشون داده بشه، اینجا بعضی ها ۱۰۰ تا گلد میگیرن بعضی ها نه پس کار نمیکنه، اینجا ما میتونیم از فانکشن bulk_update جنگو استفاده کنیم.
همون حلقه بالا رو میزنید با این تفاوت که داخلش .save رو صدا نمیزنید و تمام آبجکتها رو داخل مموری آپدیت میکنید و بعد همچین حرکتی میزنید:
و تموم همرو با هم آپدیت میکنید با یک درخواست اینجا حتی میتونید یک قدم جلوتر برید و با اضافه کردن updated_fields به ورودی فانشکن و مشخص کردن اینکه دقیقا دوتا فیلد بالانس و نام فقط قرار آپدیت بشه بهترش کنید!
از این به بعد بهتر آپدیت کنید :)
@TorhamDevCH
فریمورک #django قابلیت آپدیت کردن دیتاها رو به روش ها مختلف داره که خیلی ها یا ازش بی خبر ان یا استفاده نمیکنن. بیایید ببینیم هر کدوم رو کجا استفاده کنی بهتره :)
مدل فرضی:
class Records(models.Model):
name = models.Charfield()
balance = models.InetegerField()
country =models.CharField()
خب فرض کنید ما یک هدیه به مناسب عید نو روز میخواییم به کاربرا بدیم، مثلا میخاییم نفری ۲ هزار تومن هدیه بدیم D:
حالا چند روش وجود داره.
روش اول ( نوب):
users = Records.objects.all()
for user in users:
user.balanc = user.balance + 2
user.save()
خیلی ساده و البته درب و داغون در خیلی جهات. مشکل اول اینه که ما رو همه کاربرا حلقه میزنیم و هر بار آپدیت رو روی کاربرا صدا میزنیم یعنی برای هر یوزر یک درخواست اپدیت به دیتابیس میره که اگه ۱ میلیون یوزر داشته باشیم ۱ میلیون درخواست میره :).
( تو اینه پست به اینکه باید از F استفاده کنید یا کانکارنسی و اینا هندل کنید اشاره نمیکنم، پستها قبلی بخونید)
حالا روش بهتر چیه؟
روش بهتر:
user = Records.objects.update(balance=F("balance") + 2 )همینقدر ساده :)
سناریو دوم: با بکاند یک بازی خفن رو داریم توسعه میدیم، داخل این بازی هر هفته یک ایونت اتفاق میوفته که افرادی که اون رو تموم کنن در آخر هفته یک تایتل به کنار اسمشون اضافه میشه و همچنین اگه امتیاز بالاتر از ۱۰ کسب کرده باشن به بالانس پول داخل گیمشون هم ۱۰۰ تا گلد اضافه میشه.
حالا بیایید فقط کوئری آپدیت این بهش ببینیم، فرض کنید این کوئری آخر هفته اجرا میشه. ( این فیلدا تو مدل فرض نداریم دیگه خودتون فرض کنید هست 😂❤️)
users = Records objects.fileter(done_weekly=True)
for user in users:
user.name = "Grunt " + user.name
if user.weekly_score >= 10:
user.balance = user.balance + 100
user.save()
خب همینطور که خیلی معلومه مشکلات فراوان داخلش هست. بزرگترین مشکلش اینه که هر بار برای هر کاربر یک درخواست آپدیت میدیم که میشهه همون مشکل بالا، آما آیا این بار میشه از روش بالا استفاده کرد و اینو فیکسش کرد؟ نه
روش بالا زمانی کاربرد داره که فیلدها قراره یک مقداری ثابتی به همشون داده بشه، اینجا بعضی ها ۱۰۰ تا گلد میگیرن بعضی ها نه پس کار نمیکنه، اینجا ما میتونیم از فانکشن bulk_update جنگو استفاده کنیم.
همون حلقه بالا رو میزنید با این تفاوت که داخلش .save رو صدا نمیزنید و تمام آبجکتها رو داخل مموری آپدیت میکنید و بعد همچین حرکتی میزنید:
Records.objects.bulk_update(updated_users_list)
و تموم همرو با هم آپدیت میکنید با یک درخواست اینجا حتی میتونید یک قدم جلوتر برید و با اضافه کردن updated_fields به ورودی فانشکن و مشخص کردن اینکه دقیقا دوتا فیلد بالانس و نام فقط قرار آپدیت بشه بهترش کنید!
از این به بعد بهتر آپدیت کنید :)
@TorhamDevCH
❤🔥9👍2🐳2🆒2
یک چیزی که خیلی داخل بچههایی که جنگو یاد میگیرن میبینم اینه که خیلی تایمشون رو داخل یادگرفتن سیستم تمپلیت جنگو هدر میدن. اقا اگه قرار بکاند کار باشید و کارهای فول استکی انجام نمیدید(حتی اونجا هم بیشتر موارد لازم نیست) اصلا از این بخش بگذرید به کار شما نمیاد اصلا، بیشتر عمر بکاند تون قراره API توسعه بدید نه تمپلیت، به جاش روی خود API و ORM جنگو و DRF تمرکز کنید.
@TorhamDevCH
@TorhamDevCH
👍42❤2❤🔥1👎1
Forwarded from BenDev
Media is too big
VIEW IN TELEGRAM
دارم یکدوره جدید میزنم به عنوان: شیرجه عمیق در ORM جنگو
اسمش رو تصمیم نگرفتم ولی گرفتید ماجرا رو دیگه. دوره کوتاهی احتمالا ۴ قسمتی که CRUD توضیح بدم و اینکه چطور بهتر از orm استفاده کنیم.
اسمش رو تصمیم نگرفتم ولی گرفتید ماجرا رو دیگه. دوره کوتاهی احتمالا ۴ قسمتی که CRUD توضیح بدم و اینکه چطور بهتر از orm استفاده کنیم.
👍24😁6🔥3
TorhamDev | تورهام 😳
دارم یکدوره جدید میزنم به عنوان: شیرجه عمیق در ORM جنگو اسمش رو تصمیم نگرفتم ولی گرفتید ماجرا رو دیگه. دوره کوتاهی احتمالا ۴ قسمتی که CRUD توضیح بدم و اینکه چطور بهتر از orm استفاده کنیم.
اینترو هم در این فاصله ظبط کردم مونده یک کاور بسیارخفن و مستربیستای و اپلودش...
👍10😁2🦄1
دوستان کسی نیست کاور بزنه؟ قسمت دوم(اول) هم رکورد کردم. خیلی وقته کاور نزدم چیزی به مغزم نرسید
👍3💅3🌚1👀1
Forwarded from Sadra Codes
شهریار زحمت کشیده یه کتابخونه طراحی کرده واسه بنچمارک کردن مدلهای LLM زبان فارسی!
- دیتاستهای فارسی
- ارزیابی مدلها در تسکهای متنوع
- مقایسه همزمان چند مدل
- ایجاد ارزیابیهای سفارشی
اگه مثل من علاقه دارید یا این مورد مربوطه به حوزه کاریتون، حتما بررسیش کنید. جالبه.
🔗 https://github.com/shahriarshm/parsbench
خود شهریار: https://x.com/shahriarshm
- دیتاستهای فارسی
- ارزیابی مدلها در تسکهای متنوع
- مقایسه همزمان چند مدل
- ایجاد ارزیابیهای سفارشی
اگه مثل من علاقه دارید یا این مورد مربوطه به حوزه کاریتون، حتما بررسیش کنید. جالبه.
🔗 https://github.com/shahriarshm/parsbench
خود شهریار: https://x.com/shahriarshm
GitHub
GitHub - ParsBench/ParsBench: ParsBench provides toolkits for benchmarking LLMs based on the Persian language tasks.
ParsBench provides toolkits for benchmarking LLMs based on the Persian language tasks. - ParsBench/ParsBench
❤4⚡1👍1
TorhamDev | تورهام 😳
دوستان کسی نیست کاور بزنه؟ قسمت دوم(اول) هم رکورد کردم. خیلی وقته کاور نزدم چیزی به مغزم نرسید
کاور جادی طوری میزنم؛ پایان فعالیت
🤣12❤🔥3✍1🌚1
TorhamDev | تورهام 😳
قسمت اول دوره درک بهتر orm جنگو https://youtu.be/LJkM7VG3foU #درک_orm_جنگو @TorhamDevCH
دوستان یک ساعتی ادیت زدم صدا رو تقویت کردم ولی نسخه اشتباهی اپلود کردم صداش کمه. زیاد کنید 🥰❤️
👍7🤣7✍1👎1
TorhamDev | تورهام 😳 pinned «قسمت اول دوره درک بهتر orm جنگو https://youtu.be/LJkM7VG3foU #درک_orm_جنگو @TorhamDevCH»
TorhamDev | تورهام 😳 pinned «قسمت دوم درک بهتر ORM جنگو https://youtu.be/zspbmH1Jf5I #درک_orm_جنگو @TorhamDevCH»
TorhamDev | تورهام 😳
قسمت دوم درک بهتر ORM جنگو https://youtu.be/zspbmH1Jf5I #درک_orm_جنگو @TorhamDevCH
کاور ویدیو شانسی افتاد همونجا که Gemini گفت شرمنده ایرانی هستید 🥰
😁9🎃3🌚2👍1
😘23🤣11👍8🥰2
TorhamDev | تورهام 😳
یک روز زیاد خوابیدم IT پوکید 😂😂
دوستان منم ویندوز دارم از اونجایی که میدونید، ولی خوشبختانه زیاد خوابیدم هنوز روشنش نکردم 😂😂
البته من کلا auto update ام از ریشه خاموشه🧠
البته من کلا auto update ام از ریشه خاموشه🧠
🍾6🤣2❤1✍1👍1🌚1