https://www.youtube.com/watch?v=J8et7Xoy1GU
خیلی ویدیو خوبیه توصیه میکنم حتما ببینید, کالچر یک شرکت سالمه. یک تیکه اش مربوط به Optimize for deep work هست
"We trust each others, we know everyone is really working hard, we don't need to waste time on scheduling and attending meeting where we keep checking on everyone frequently"
این کار باعث میشه همه درواقع کار کنند :) کسی نباشه که کل ساعتاشو داره تو میتینگ میچرخه و کاری خاصی پیش نمیبره.
@PyBackendHub
خیلی ویدیو خوبیه توصیه میکنم حتما ببینید, کالچر یک شرکت سالمه. یک تیکه اش مربوط به Optimize for deep work هست
"We trust each others, we know everyone is really working hard, we don't need to waste time on scheduling and attending meeting where we keep checking on everyone frequently"
این کار باعث میشه همه درواقع کار کنند :) کسی نباشه که کل ساعتاشو داره تو میتینگ میچرخه و کاری خاصی پیش نمیبره.
@PyBackendHub
YouTube
Don’t Turn Your Development Process Into a NIGHTMARE
💡 Learn how to design great software in 7 steps: https://arjan.codes/designguide.
In this video, I’ll share the unique development process we use at ArjanCodes that helps us work better together. I'm sharing real-world tips and tricks for developers that…
In this video, I’ll share the unique development process we use at ArjanCodes that helps us work better together. I'm sharing real-world tips and tricks for developers that…
👍10❤2👏1
Python BackendHub
دومین قسمت از پلی لیست SQLAlchemy منتشر شد! در این قسمت، به Engine در SQLAlchemy میپردازیم, نحوه وصل شدن به دیتابیس رو میبینیم. مفهوم Dialect رو بهتر و عمیقتر بررسی میکنیم, و کانکشن پولینگ و نحوه پیاده سازیش و کنترلش داخل SQLAlchemy رو آزمایش میکنیم. لینک…
#موقت کسایی که دو قسمت رو دیدن، نظرشون تا اینجا راجب دوره چیه؟
زیاد تر از نیاز توضیح میدم؟ (خیلی وقتا یک چیزو چند بار تکرار میکنم که برای مخاطب خوب جا بیفته.)
ویدیو بلنده؟ کوتاهه؟ صدا بده یا خوبه؟ تصویر بده یا خوبه؟ کلا یک فیدبک بدین بهم خیلی تاثیر میذاره رو ویدیو های بعدی
@PyBackendHub
زیاد تر از نیاز توضیح میدم؟ (خیلی وقتا یک چیزو چند بار تکرار میکنم که برای مخاطب خوب جا بیفته.)
ویدیو بلنده؟ کوتاهه؟ صدا بده یا خوبه؟ تصویر بده یا خوبه؟ کلا یک فیدبک بدین بهم خیلی تاثیر میذاره رو ویدیو های بعدی
@PyBackendHub
❤17🔥4👍1
سومین قسمت از پلی لیست SQLAlchemy منتشر شد!
در این بخش به تعامل بین Engine و Query میپردازیم. بررسی میکنیم که چگونه میتوانیم یک کوئری را اجرا کنیم، نتایج حاصل از دیتابیس را پردازش کنیم، و چگونه با تغییر در نحوهی کامپایل کوئری، میتوانیم بر خروجی تاثیر بگذاریم. با پرداختن به این موضوع هابه درک بهتری از تایپ های SQLAlchemy میرسیم و داکیومنت شلوغ و به هم ریخته اش رو بهتر میتونیم بخونیم.
لینک ویدیو:
https://youtu.be/qDtB--xlbX0
این دوره شامل ۶ قسمت هست. این دوره ۶ قسمته شما رو برای استفاده از SQLAlchemy داخل پروژه هاتون و پروداکشن آماده میکنه و به شما درک بنیادی و کافی از SQLAlchemy میده که دیگه درک این ORM براتون خیلی سخت نباشه.
@PyBackendHub
در این بخش به تعامل بین Engine و Query میپردازیم. بررسی میکنیم که چگونه میتوانیم یک کوئری را اجرا کنیم، نتایج حاصل از دیتابیس را پردازش کنیم، و چگونه با تغییر در نحوهی کامپایل کوئری، میتوانیم بر خروجی تاثیر بگذاریم. با پرداختن به این موضوع هابه درک بهتری از تایپ های SQLAlchemy میرسیم و داکیومنت شلوغ و به هم ریخته اش رو بهتر میتونیم بخونیم.
لینک ویدیو:
https://youtu.be/qDtB--xlbX0
این دوره شامل ۶ قسمت هست. این دوره ۶ قسمته شما رو برای استفاده از SQLAlchemy داخل پروژه هاتون و پروداکشن آماده میکنه و به شما درک بنیادی و کافی از SQLAlchemy میده که دیگه درک این ORM براتون خیلی سخت نباشه.
@PyBackendHub
YouTube
قسمت سوم دوره SQLAlchemy | نحوه دریافت و پردازش دیتا از دیتابیس با انجین
سومین قسمت از پلی لیست SQLAlchemy منتشر شد!
در این بخش به تعامل بین Engine و Query میپردازیم. بررسی میکنیم که چگونه میتوانیم یک کوئری را اجرا کنیم، نتایج حاصل از دیتابیس را پردازش کنیم، و چگونه با تغییر در نحوهی کامپایل کوئری، میتوانیم بر خروجی تاثیر…
در این بخش به تعامل بین Engine و Query میپردازیم. بررسی میکنیم که چگونه میتوانیم یک کوئری را اجرا کنیم، نتایج حاصل از دیتابیس را پردازش کنیم، و چگونه با تغییر در نحوهی کامپایل کوئری، میتوانیم بر خروجی تاثیر…
❤12👍9🔥2
Python BackendHub
سومین قسمت از پلی لیست SQLAlchemy منتشر شد! در این بخش به تعامل بین Engine و Query میپردازیم. بررسی میکنیم که چگونه میتوانیم یک کوئری را اجرا کنیم، نتایج حاصل از دیتابیس را پردازش کنیم، و چگونه با تغییر در نحوهی کامپایل کوئری، میتوانیم بر خروجی تاثیر…
قسمت چهارم امشب نمیاد, فردا شب میاد.
تا الان نیمی از دوره گذشته و حدود ۱ ساعت و ربع بوده 😁 اگه بتونم۶ قسمت رو در نهایت تو ۲ ساعت و نیم جمع کنم خیلی خوب میشه. 👌 امیدوارم اینطوری کمکی کرده باشم که کسایی که بخاطر پیچیدگی و داکیومنت بد نمیرفتن سمتش, یک تجدید نظر کنند.
@PyBackendHub
تا الان نیمی از دوره گذشته و حدود ۱ ساعت و ربع بوده 😁 اگه بتونم۶ قسمت رو در نهایت تو ۲ ساعت و نیم جمع کنم خیلی خوب میشه. 👌 امیدوارم اینطوری کمکی کرده باشم که کسایی که بخاطر پیچیدگی و داکیومنت بد نمیرفتن سمتش, یک تجدید نظر کنند.
@PyBackendHub
👍32❤17
چهارمین قسمت از پلی لیست SQLAlchemy منتشر شد!
در این بخش ابتدا به انواع دادهها (Types) در SQL و نحوه تعریف و شخصیسازی آنها در SQLAlchemy میپردازیم. سپس به بررسی روشهای مختلف ساخت جداول (Tables) و استفاده از type registry خواهیم پرداخت. در نهایت، نحوه ایجاد Foreign Key، انجام عملیات query و ّInsert در جداول را تمرین خواهیم کرد.
لینک ویدیو:
https://youtu.be/wHV98-DZoZg
این دوره شامل ۶ قسمت هست. این دوره ۶ قسمته شما رو برای استفاده از SQLAlchemy داخل پروژه هاتون و پروداکشن آماده میکنه و به شما درک بنیادی و کافی از SQLAlchemy میده که دیگه درک این ORM براتون خیلی سخت نباشه.
@PyBackendHub
در این بخش ابتدا به انواع دادهها (Types) در SQL و نحوه تعریف و شخصیسازی آنها در SQLAlchemy میپردازیم. سپس به بررسی روشهای مختلف ساخت جداول (Tables) و استفاده از type registry خواهیم پرداخت. در نهایت، نحوه ایجاد Foreign Key، انجام عملیات query و ّInsert در جداول را تمرین خواهیم کرد.
لینک ویدیو:
https://youtu.be/wHV98-DZoZg
این دوره شامل ۶ قسمت هست. این دوره ۶ قسمته شما رو برای استفاده از SQLAlchemy داخل پروژه هاتون و پروداکشن آماده میکنه و به شما درک بنیادی و کافی از SQLAlchemy میده که دیگه درک این ORM براتون خیلی سخت نباشه.
@PyBackendHub
YouTube
قسمت چهارم | نحوه ساخت تیبل
در این بخش ابتدا به انواع دادهها (Types) در SQL و نحوه تعریف و شخصیسازی آنها در SQLAlchemy میپردازیم. سپس به بررسی روشهای مختلف ساخت جداول (Tables) و استفاده از type registry خواهیم پرداخت. در نهایت، نحوه ایجاد Foreign Key، انجام عملیات query و ّInsert…
🔥11👍4👏2❤1
یک وقتا به دلایل خیلی منطقی مجبوریم cast کنیم. مثلاً تایپی که از لایبری برمیگرده اشتباهه. مثلاً فرض کنید لایبری تایپش داره میگه int برمیگرده ولی در واقع float هست. هیچوقت همچین کاری نکنید:
به جاش اینکارو انجام بدید
فرقش چیه؟ شما داری خودتو تایید میکنی که من میدونستم این int برمیگردونه. ولی به float اومدم cast اش کردم. اینطوری اگر یک روزی signature اون تابع عوض شد و تبدیل شد به استرینگ مثلاً، کد شما یک چیزی که قصد نداشتی (استرینگ) رو به یک چیز دیگه cast نمیکنه.
خلاصش cast یعنی دروغ گفتن به تایپینگ. اگه دارین به تایپینگ دروغ میگین,حواستون باشه که یادتون نره چه دروغی گفتین😁
@PyBackendHub
foo = library_func()
bar = typing.cast(float, foo)
به جاش اینکارو انجام بدید
foo: int = library_func()
bar = typing.cast(float, foo)
فرقش چیه؟ شما داری خودتو تایید میکنی که من میدونستم این int برمیگردونه. ولی به float اومدم cast اش کردم. اینطوری اگر یک روزی signature اون تابع عوض شد و تبدیل شد به استرینگ مثلاً، کد شما یک چیزی که قصد نداشتی (استرینگ) رو به یک چیز دیگه cast نمیکنه.
خلاصش cast یعنی دروغ گفتن به تایپینگ. اگه دارین به تایپینگ دروغ میگین,حواستون باشه که یادتون نره چه دروغی گفتین😁
@PyBackendHub
👍22🤯5😁2
پنجمین قسمت از پلی لیست SQLAlchemy منتشر شد!
در این بخش میپردازیم به مفهوم ORM. یاد میگیریم چطور میتونیم آبجکت ORM بسازیم, چطوری راحت تر با دیتابیس کار کنیم. متوجه میشیم Session چیه. چه فرقی با انجین داره. به مفاهیم Expire, expunge, refresh و attach داخل سشن میپردازیم. رفتار سشن رو تو حالت های مختلف تست میکنیم. بالاخره با این ویدیو SQLAlchemy رو تموم کردیم و ویدیو بعدی فقط راجب ماگریشن نویسیه 😍
لینک ویدیو:
https://youtu.be/qH1B9xkfDNA
این دوره شامل ۶ قسمت هست. این دوره ۶ قسمته شما رو برای استفاده از SQLAlchemy داخل پروژه هاتون و پروداکشن آماده میکنه و به شما درک بنیادی و کافی از SQLAlchemy میده که دیگه درک این ORM براتون خیلی سخت نباشه.
@PyBackendHub
در این بخش میپردازیم به مفهوم ORM. یاد میگیریم چطور میتونیم آبجکت ORM بسازیم, چطوری راحت تر با دیتابیس کار کنیم. متوجه میشیم Session چیه. چه فرقی با انجین داره. به مفاهیم Expire, expunge, refresh و attach داخل سشن میپردازیم. رفتار سشن رو تو حالت های مختلف تست میکنیم. بالاخره با این ویدیو SQLAlchemy رو تموم کردیم و ویدیو بعدی فقط راجب ماگریشن نویسیه 😍
لینک ویدیو:
https://youtu.be/qH1B9xkfDNA
این دوره شامل ۶ قسمت هست. این دوره ۶ قسمته شما رو برای استفاده از SQLAlchemy داخل پروژه هاتون و پروداکشن آماده میکنه و به شما درک بنیادی و کافی از SQLAlchemy میده که دیگه درک این ORM براتون خیلی سخت نباشه.
@PyBackendHub
YouTube
قسمت پنجم | آموزش بخش ORM
در این بخش میپردازیم به مفهوم ORM. یاد میگیریم چطور میتونیم آبجکت ORM بسازیم, چطوری راحت تر با دیتابیس کار کنیم. متوجه میشیم Session چیه. چه فرقی با انجین داره. به مفاهیم Expire, expunge, refresh و attach داخل سشن میپردازیم. رفتار سشن رو تو حالت های مختلف…
❤28👍2🥰2👏1
Python BackendHub
پنجمین قسمت از پلی لیست SQLAlchemy منتشر شد! در این بخش میپردازیم به مفهوم ORM. یاد میگیریم چطور میتونیم آبجکت ORM بسازیم, چطوری راحت تر با دیتابیس کار کنیم. متوجه میشیم Session چیه. چه فرقی با انجین داره. به مفاهیم Expire, expunge, refresh و attach داخل…
یک ویدیو اخر داریم alembic. که میشه فقط سیستم ماگریشن یعنی خوده لایبری کلا جمع شد. که اونم امشب یا فردا شب منتشر میشه.
اما یک چیزی کمه، که یک نمونه کد باهم بزنیم. یعنی یک پروژه کوچیک بزنیم. که ببینید تو دنیای واقعی چطوری استفاده میشه.
اینو میخوام بصورت لایو بذارم.میدونم نت ها بده. برای همین من یکی دو هفته باید وقت بدم که هرکی عقبه ببینه ویدیو هارو. بنابراین این لایو رو ۲ هفته دیگه اینطورا خواهیم داشت.
@PyBackendHub
اما یک چیزی کمه، که یک نمونه کد باهم بزنیم. یعنی یک پروژه کوچیک بزنیم. که ببینید تو دنیای واقعی چطوری استفاده میشه.
اینو میخوام بصورت لایو بذارم.میدونم نت ها بده. برای همین من یکی دو هفته باید وقت بدم که هرکی عقبه ببینه ویدیو هارو. بنابراین این لایو رو ۲ هفته دیگه اینطورا خواهیم داشت.
@PyBackendHub
👍32❤4👏1
فرهنگ فیدبک دادن واقعا افتضاحه! یک نفر میاد همینطوری کامنت میذاره، بدون اینکه هیچ دلیل و استدلالی باشه. هروقت دارین یک نظری راجب یک content میدین، چه مثبت چه منفی باید اینطوری باشه:
من فکر میکنم <افکارتون>…، چون <دلیل ۱> و <دلیل ۲>.
من حدس میزنم دوستمون چرا همچین حرفی زده، برای همین تو کانال توضیح میدم:
اولا سطح همه ویدیو ها خیلی پایینه، من دارم یک چیزیو abstract شده به شما توضیح میدم، با ازمون خطا. من نیازی به ازمون خطا ندارم برای اینکه اون مطلبو به شما بگم، بلکه دارم سعی میکنم انتقال مطلب رو قوی تر انجام بدم
دوما همه چیزو تو detail ریز توضیح نمیدم. مثلا تو ویدیو اخر میگم اره Session داره ابجکت های orm اتون رو track میکنه. نمیام بگم چطوری میکنه. چون باید یک ویدیو بدم فقط راجب این حرف بزنم، و به درده ۹۹ درصد نمیخوره و هدف یک crash course نیست و اکثریت رو گیج میکنه. به جاش با ازمون خطا این فکتو ثابت میکنم.
@PyBackendHub
من فکر میکنم <افکارتون>…، چون <دلیل ۱> و <دلیل ۲>.
من حدس میزنم دوستمون چرا همچین حرفی زده، برای همین تو کانال توضیح میدم:
اولا سطح همه ویدیو ها خیلی پایینه، من دارم یک چیزیو abstract شده به شما توضیح میدم، با ازمون خطا. من نیازی به ازمون خطا ندارم برای اینکه اون مطلبو به شما بگم، بلکه دارم سعی میکنم انتقال مطلب رو قوی تر انجام بدم
دوما همه چیزو تو detail ریز توضیح نمیدم. مثلا تو ویدیو اخر میگم اره Session داره ابجکت های orm اتون رو track میکنه. نمیام بگم چطوری میکنه. چون باید یک ویدیو بدم فقط راجب این حرف بزنم، و به درده ۹۹ درصد نمیخوره و هدف یک crash course نیست و اکثریت رو گیج میکنه. به جاش با ازمون خطا این فکتو ثابت میکنم.
@PyBackendHub
👍67❤12🤣3💩2
Python BackendHub
فرهنگ فیدبک دادن واقعا افتضاحه! یک نفر میاد همینطوری کامنت میذاره، بدون اینکه هیچ دلیل و استدلالی باشه. هروقت دارین یک نظری راجب یک content میدین، چه مثبت چه منفی باید اینطوری باشه: من فکر میکنم <افکارتون>…، چون <دلیل ۱> و <دلیل ۲>. من حدس میزنم دوستمون چرا…
اشتباه برداشت نشه من هدفم این نیست که بگم چرا فیدبک منفی دادن. اتفاقا کاملا استقبال میکنم و خیلی دوست دارم فیدبک بگیرم. کاری که خیلی زیاد انجام دادم تو کانالم. ولی فرهنگ و آدابی داره که سینتکسشو مثال زدم.
@PyBackendHub
@PyBackendHub
👍21👎3💩3❤2🍌1
Python BackendHub
یک ویدیو اخر داریم alembic. که میشه فقط سیستم ماگریشن یعنی خوده لایبری کلا جمع شد. که اونم امشب یا فردا شب منتشر میشه. اما یک چیزی کمه، که یک نمونه کد باهم بزنیم. یعنی یک پروژه کوچیک بزنیم. که ببینید تو دنیای واقعی چطوری استفاده میشه. اینو میخوام بصورت لایو…
یک چالشی تو ذهنم طراحی کردم بنظرم برای لایو و این ویدیو جالب میشه:
اپلیکیشن Rest APIبنویسید که این requirement هارو پوشش بده
۱. ردیابی زمان کارمندان:
• کارمندان باید بتوانند از اپلیکیشن به عنوان تایمر برای ردیابی ساعتهای کاری خود استفاده کنند.
• اپلیکیشن باید اکشنهای شروع کار، استراحت و پایان کار را پشتیبانی کند.
۲. نقش مدیر یا منابع انسانی برای تایید:
• باید یک نقش برای مدیر یا منابع انسانی (HR) وجود داشته باشد تا بتوانند زمانهای رکورد شده توسط هر کارمند را تایید کنند.
۳. خروجی زمان کاری و حقوق:
• مدیر باید بتواند خروجی زمانهای کاری هر کارمند را در یک بازه تاریخی مشخص و بر اساس حقوق ساعتی ذخیره شده در پروفایل کارمند دریافت کند.
• این خروجی باید با یک query قابل دسترسی باشد.
۴. ثبت پرداخت حقوق:
• پس از دریافت خروجی و پرداخت حقوق کارمند، مدیر باید بتواند این پرداختها را در سیستم ثبت کند.
بدون نیاز به لاگین و ثبت نام.
بنظرم چالش خوبی میشه و یکم پیچیدست و میشه تو یکی دو ساعت جمعش کرد تو لایو.
نظرتون چیه؟
@PyBackendHub
اپلیکیشن Rest APIبنویسید که این requirement هارو پوشش بده
۱. ردیابی زمان کارمندان:
• کارمندان باید بتوانند از اپلیکیشن به عنوان تایمر برای ردیابی ساعتهای کاری خود استفاده کنند.
• اپلیکیشن باید اکشنهای شروع کار، استراحت و پایان کار را پشتیبانی کند.
۲. نقش مدیر یا منابع انسانی برای تایید:
• باید یک نقش برای مدیر یا منابع انسانی (HR) وجود داشته باشد تا بتوانند زمانهای رکورد شده توسط هر کارمند را تایید کنند.
۳. خروجی زمان کاری و حقوق:
• مدیر باید بتواند خروجی زمانهای کاری هر کارمند را در یک بازه تاریخی مشخص و بر اساس حقوق ساعتی ذخیره شده در پروفایل کارمند دریافت کند.
• این خروجی باید با یک query قابل دسترسی باشد.
۴. ثبت پرداخت حقوق:
• پس از دریافت خروجی و پرداخت حقوق کارمند، مدیر باید بتواند این پرداختها را در سیستم ثبت کند.
بدون نیاز به لاگین و ثبت نام.
بنظرم چالش خوبی میشه و یکم پیچیدست و میشه تو یکی دو ساعت جمعش کرد تو لایو.
نظرتون چیه؟
@PyBackendHub
👍59🔥5👎1
Forwarded from Sadra Codes
مانی حرف قشنگی زد. گفت الان کلی بیزینس اومده بالا که صرفا ChatGPT Wrapperه و نه چیز دیگه! 👌
🤣22👍4
Python BackendHub
یک چالشی تو ذهنم طراحی کردم بنظرم برای لایو و این ویدیو جالب میشه: اپلیکیشن Rest APIبنویسید که این requirement هارو پوشش بده ۱. ردیابی زمان کارمندان: • کارمندان باید بتوانند از اپلیکیشن به عنوان تایمر برای ردیابی ساعتهای کاری خود استفاده کنند. • اپلیکیشن…
لایو یک شنبه هفته بعد، ۲۵ ام August به وقت ۸ شب تهران خواهد بود
یک نکته راجب این لایوی که میخوام بذارم بگم:
من قبلش اموزش fastapi و pydantic نمیدم. تو لایو هم دیگه توضیحات ابتدایی که تو دوره SQLAlchemy هست رو نمیدم. صرفا دارم با یک سری پرکتیس نوشتن api خوب، یک محصولیو کد میزنم.
راجب FastAPI و pydantic که جفتشون به شدت راحتن. تایپینگ و async بلد باشین ۱ روزه یاد میگیرین با خوندن داکیومنتش.
راجب SQLAlchemy سعی کنید تا اون موقع دوره من رو ببینید یا داکشو بخونید.
@PyBackendHub
یک نکته راجب این لایوی که میخوام بذارم بگم:
من قبلش اموزش fastapi و pydantic نمیدم. تو لایو هم دیگه توضیحات ابتدایی که تو دوره SQLAlchemy هست رو نمیدم. صرفا دارم با یک سری پرکتیس نوشتن api خوب، یک محصولیو کد میزنم.
راجب FastAPI و pydantic که جفتشون به شدت راحتن. تایپینگ و async بلد باشین ۱ روزه یاد میگیرین با خوندن داکیومنتش.
راجب SQLAlchemy سعی کنید تا اون موقع دوره من رو ببینید یا داکشو بخونید.
@PyBackendHub
🔥14👍5❤3👏1
Python BackendHub pinned «لایو یک شنبه هفته بعد، ۲۵ ام August به وقت ۸ شب تهران خواهد بود یک نکته راجب این لایوی که میخوام بذارم بگم: من قبلش اموزش fastapi و pydantic نمیدم. تو لایو هم دیگه توضیحات ابتدایی که تو دوره SQLAlchemy هست رو نمیدم. صرفا دارم با یک سری پرکتیس نوشتن api خوب،…»
👍2
همیشه قرار نیست چون یک چیزی یک فیچری داره پس حتما ازش استفاده کنید. باید دلیل منطقی باشه پشت استفاده از یک فیچر. و البته آگاه باشین از روش کارکردش.
این اشتباهو من اخیرا انجام دادم. تو دیتابیس postgresql چون یک لاجیک transactional داشتم بین دو تا دیتابیس , از two phase commit استفاده کردم. اینطوریه که شما یک بار کامیت میکنی و دیتابیس بهت میگه که کامیتت انجام میشه یا نه. و بعد باره دوم واقعا کامیت میکنید. (اینکه چرا لاجیک transactional داشتم بین دو تا دیتابیس خارج از کنترله من بوده)
حالا این مکانیزم تو لایه زیر چطوری کار میکنه؟
داره از prepare transaction استفاده میکنه برای اینکار. درواقع یک کامیت الکی هم مثل کامیت واقعی باید تو WAL نوشته شه. تو postgresql تو قسمت لاگ فایلاش یک فایلی هست به اسم pg_twophase که این رکورد هارو نگه میداره. اگه این وسط کرش شه دیتابیس, این لاگ ها باقی میمونه و وقتی که دوباره استارت شه prepare transaction ها restore میشن.
فایل ها دیلیت میشن اگه اون transaction که prepared بود رول بک شه یا کامیت شه.
حالا مشکل کجاست؟
اگه دیتابیس crash شه prepared transaction ها باقی میمونن. مثلا یک prepared transaction میتونه یک row ای رو lock کرده باشه. و این میتونه باعث deadlock میشه. یا میتونه تداخل ایجاد کنه برای VACUUM پی جی.
چرا؟ مگه transaction ها rollback نمیشن اگه دیتابیس کرش شه؟
چرا میشن, ولی از قصد اینطوری دیزاین شده که prepared transaction ها نشن. چون اگه کامیت فاز اول خورده, رول بک کردنشون ممکنه باعث inconsistent شدن اون یکی دیتابیسی شه که داره two phase commit میزنه. برای همین از قصد footprint میذارن از خودشون که db admin ها بیان چک کنند و اگه inconsistency وجود داره درستش کنند.
وقتی که دیتابیس رو ریستارت میکنید و ریکاور میشه دیگه پروسسی وجود نداره برای اون prepared transaction ها. چون کانکشن قطع شده و پروسس بسته شده. ولی لاگش هنوز اونجاست. خلاصه من داشتم از این فیچر استفاده میکردم بدون اینکه بدونم همچین اتفاقی ممکنه بیفته. و یک جایی دیدم یک سری لاک دارم تو postgresql که اصلا process id ندارن ولی transactional id دارن 😅 که با خوندن داکیومنت postgresql متوجه این چیزا شدم. و در آخر تصمیم گرفتم از این فیچر استفاده نکنم.
@PyBackendHub
این اشتباهو من اخیرا انجام دادم. تو دیتابیس postgresql چون یک لاجیک transactional داشتم بین دو تا دیتابیس , از two phase commit استفاده کردم. اینطوریه که شما یک بار کامیت میکنی و دیتابیس بهت میگه که کامیتت انجام میشه یا نه. و بعد باره دوم واقعا کامیت میکنید. (اینکه چرا لاجیک transactional داشتم بین دو تا دیتابیس خارج از کنترله من بوده)
حالا این مکانیزم تو لایه زیر چطوری کار میکنه؟
داره از prepare transaction استفاده میکنه برای اینکار. درواقع یک کامیت الکی هم مثل کامیت واقعی باید تو WAL نوشته شه. تو postgresql تو قسمت لاگ فایلاش یک فایلی هست به اسم pg_twophase که این رکورد هارو نگه میداره. اگه این وسط کرش شه دیتابیس, این لاگ ها باقی میمونه و وقتی که دوباره استارت شه prepare transaction ها restore میشن.
فایل ها دیلیت میشن اگه اون transaction که prepared بود رول بک شه یا کامیت شه.
حالا مشکل کجاست؟
اگه دیتابیس crash شه prepared transaction ها باقی میمونن. مثلا یک prepared transaction میتونه یک row ای رو lock کرده باشه. و این میتونه باعث deadlock میشه. یا میتونه تداخل ایجاد کنه برای VACUUM پی جی.
چرا؟ مگه transaction ها rollback نمیشن اگه دیتابیس کرش شه؟
چرا میشن, ولی از قصد اینطوری دیزاین شده که prepared transaction ها نشن. چون اگه کامیت فاز اول خورده, رول بک کردنشون ممکنه باعث inconsistent شدن اون یکی دیتابیسی شه که داره two phase commit میزنه. برای همین از قصد footprint میذارن از خودشون که db admin ها بیان چک کنند و اگه inconsistency وجود داره درستش کنند.
وقتی که دیتابیس رو ریستارت میکنید و ریکاور میشه دیگه پروسسی وجود نداره برای اون prepared transaction ها. چون کانکشن قطع شده و پروسس بسته شده. ولی لاگش هنوز اونجاست. خلاصه من داشتم از این فیچر استفاده میکردم بدون اینکه بدونم همچین اتفاقی ممکنه بیفته. و یک جایی دیدم یک سری لاک دارم تو postgresql که اصلا process id ندارن ولی transactional id دارن 😅 که با خوندن داکیومنت postgresql متوجه این چیزا شدم. و در آخر تصمیم گرفتم از این فیچر استفاده نکنم.
@PyBackendHub
👍19🤯1
Python BackendHub
همیشه قرار نیست چون یک چیزی یک فیچری داره پس حتما ازش استفاده کنید. باید دلیل منطقی باشه پشت استفاده از یک فیچر. و البته آگاه باشین از روش کارکردش. این اشتباهو من اخیرا انجام دادم. تو دیتابیس postgresql چون یک لاجیک transactional داشتم بین دو تا دیتابیس …
Two general problems
یکی از سخت ترین مشکلات کامپیوتر ساینسه که حل نشده هست. و معمولا تو معماری ماکروسرویس خیلی زیاد دیده میشه. اگه نمیدونید چیه حتما توصیه میکنم ویدیو زیرو ببینید. یکی از بزرگ ترین cons های distributed system همینه.
https://www.youtube.com/watch?v=MDuWnzVnfpI
@PyBackendHub
یکی از سخت ترین مشکلات کامپیوتر ساینسه که حل نشده هست. و معمولا تو معماری ماکروسرویس خیلی زیاد دیده میشه. اگه نمیدونید چیه حتما توصیه میکنم ویدیو زیرو ببینید. یکی از بزرگ ترین cons های distributed system همینه.
https://www.youtube.com/watch?v=MDuWnzVnfpI
@PyBackendHub
YouTube
Distributed Systems 2.1: The two generals problem
Accompanying lecture notes: https://www.cl.cam.ac.uk/teaching/2122/ConcDisSys/dist-sys-notes.pdf
Full lecture series: https://www.youtube.com/playlist?list=PLeKd45zvjcDFUEv_ohr_HdUFe97RItdiB
This video is part of an 8-lecture series on distributed systems…
Full lecture series: https://www.youtube.com/playlist?list=PLeKd45zvjcDFUEv_ohr_HdUFe97RItdiB
This video is part of an 8-lecture series on distributed systems…
👍7❤1
Python BackendHub
لایو یک شنبه هفته بعد، ۲۵ ام August به وقت ۸ شب تهران خواهد بود یک نکته راجب این لایوی که میخوام بذارم بگم: من قبلش اموزش fastapi و pydantic نمیدم. تو لایو هم دیگه توضیحات ابتدایی که تو دوره SQLAlchemy هست رو نمیدم. صرفا دارم با یک سری پرکتیس نوشتن api خوب،…
به دلیل سرما خوردگی لایو به یک شنبه یک هفته بعد موکول خواهد شد (۲۵ ام August).
متاسفانه نتونستم ویدیو آخر که راجب ماگریشن نویسی با alembic هست رو ظبط کنم. ایشالا اونم طی این آخر هفته انجام میدم وقتی بهتر شدم :)
متاسفانه نتونستم ویدیو آخر که راجب ماگریشن نویسی با alembic هست رو ظبط کنم. ایشالا اونم طی این آخر هفته انجام میدم وقتی بهتر شدم :)
❤35💊23👍3🤬3😡2🙏1🍌1🍓1
سورس کدی که خوب تست نداره هر PR ای که زده میشه بهش، مثل رولت روسی (Russian roulette) میمونه 😁
@PyBackendHub
@PyBackendHub
😁10👍8🤣3