چرا Composite Index میتونه کارمون رو راحتتر کنه؟
فرض کنید یه جدول users داریم که دو تا ستون مهم داره:
(تاریخ ثبتنام کاربر) signup_date
(شهر محل سکونت کاربر) city
حالا میخوایم این کوئری رو اجرا کنیم:
"همه کاربرهایی که بعد از یه تاریخ خاص ثبتنام کردن و تو شهر تهران هستن رو پیدا کن."
اگر فقط روی signup_date ایندکس داشته باشیم:
خب MySQL اول میره تو ستون مرتبشده تاریخ، مثلاً 1000 تا کاربر که شرط تاریخ رو دارن پیدا میکنه.
بعدش مجبور میشه تو این 1000 تا رکورد، دونهدونه بررسی کنه با پیچیدگی زمانی (o n) که کدوم کاربر تو تهران زندگی میکنه. این مرحله میتونه کند باشه، مخصوصاً اگه تعداد رکوردها زیاد باشه.
اگر از Composite Index استفاده کنیم:
بهجای اینکه یه ایندکس جدا روی هر ستون داشته باشیم، میتونیم یه ایندکس ترکیبی روی signup_date و city تعریف کنیم. اینجوری:
و MySQL همزمان شرط تاریخ و شهر رو بررسی میکنه و فقط اون رکوردهایی که هر دو شرط رو دارن پیدا میکنه. سرعت کوئری کلی بهتر میشه.
وقتی این ایندکس رو تعریف میکنیم، مای اس کیو ال MySQL برای این ستونها یه جدول مرتبشده ایجاد میکنه و موقع کوئری زدن خیلی سریع نتیجه رو برمیگردونه. ولی باید حواسمون باشه که تعریف بیش از حد ایندکسها میتونه هزینه آپدیت جدول رو بالا ببره.
و تو کمپوزیت ایندکس ها همیشه از چپ به راست خونده میشه ایندکس هامون تو شرطهامون هم باید این ترتیب رو رعایت کنیم.
DevTwitter | <Saber Qadimi/>
فرض کنید یه جدول users داریم که دو تا ستون مهم داره:
(تاریخ ثبتنام کاربر) signup_date
(شهر محل سکونت کاربر) city
حالا میخوایم این کوئری رو اجرا کنیم:
"همه کاربرهایی که بعد از یه تاریخ خاص ثبتنام کردن و تو شهر تهران هستن رو پیدا کن."
اگر فقط روی signup_date ایندکس داشته باشیم:
خب MySQL اول میره تو ستون مرتبشده تاریخ، مثلاً 1000 تا کاربر که شرط تاریخ رو دارن پیدا میکنه.
بعدش مجبور میشه تو این 1000 تا رکورد، دونهدونه بررسی کنه با پیچیدگی زمانی (o n) که کدوم کاربر تو تهران زندگی میکنه. این مرحله میتونه کند باشه، مخصوصاً اگه تعداد رکوردها زیاد باشه.
اگر از Composite Index استفاده کنیم:
بهجای اینکه یه ایندکس جدا روی هر ستون داشته باشیم، میتونیم یه ایندکس ترکیبی روی signup_date و city تعریف کنیم. اینجوری:
و MySQL همزمان شرط تاریخ و شهر رو بررسی میکنه و فقط اون رکوردهایی که هر دو شرط رو دارن پیدا میکنه. سرعت کوئری کلی بهتر میشه.
وقتی این ایندکس رو تعریف میکنیم، مای اس کیو ال MySQL برای این ستونها یه جدول مرتبشده ایجاد میکنه و موقع کوئری زدن خیلی سریع نتیجه رو برمیگردونه. ولی باید حواسمون باشه که تعریف بیش از حد ایندکسها میتونه هزینه آپدیت جدول رو بالا ببره.
و تو کمپوزیت ایندکس ها همیشه از چپ به راست خونده میشه ایندکس هامون تو شرطهامون هم باید این ترتیب رو رعایت کنیم.
DevTwitter | <Saber Qadimi/>
اگه نمیخواید خیلی کانفیگ های mysql رو تغییر بدید وقتی دارید بین سرور ها cross database، جوین کوعری میزنید تو لاراول ، joinSub() رو استفاده کنید. کار کثیفیه ولی چون DB layer کار نمیکنید این راه حل مناسبیه. وگر نه توی mysql میتونید از فیچر Federated Storage Engine استفاده کنید.
اپروچ های مختلف برای این کار. تو خود mysql و laravel. البته درستش اینه که شما همه این ها رو Store Procedure کنید و تو app layer فقط اون ها رو کال کنید.
البته بگم این کار خیلی تمیز ترم میشه تو PostgreSQL که فیچرش میشه
FWD (foreign data wrapper)
که البته پیشنهاد من اینه که کلا از postgres برای این مدل query ها استفاده کنید.
DevTwitter | <iman/>
➖➖➖➖➖➖➖➖
🕸 https://linktr.ee/Labdon
اپروچ های مختلف برای این کار. تو خود mysql و laravel. البته درستش اینه که شما همه این ها رو Store Procedure کنید و تو app layer فقط اون ها رو کال کنید.
البته بگم این کار خیلی تمیز ترم میشه تو PostgreSQL که فیچرش میشه
FWD (foreign data wrapper)
که البته پیشنهاد من اینه که کلا از postgres برای این مدل query ها استفاده کنید.
DevTwitter | <iman/>
➖➖➖➖➖➖➖➖
🕸 https://linktr.ee/Labdon
👍3
Forwarded from Future Pulse Persian
👇 لیست کانالهای مجموعه Labdon با بهروزترین اخبار، آموزشها و ترفندها در حوزههای مختلف:
➖➖➖➖➖➖➖➖
🔵 گولنگ - همه چیز از اخبار تا نکات کلیدی
🔴 @gopher_academy
➖➖➖➖➖➖➖➖
🔵 موقعیت شغلی های گولنگ چه ایرانی و چه خارجی
🔴 @gopher_job
➖➖➖➖➖➖➖➖
🔵 انواع دیتابیس ها ردیس مانگو پستگرس و سایر دیتابیس ها
🔴 @database_academy
🟢 حوزه های تحت پوشش
(redis , mysql , postgresl , mongo ,etc)
➖➖➖➖➖➖➖➖
🔵 دنیای بلاکچین و ارز های دیجیتال
🔴 @Blockchain_labdon
🟢 حوزه های تحت پوشش
(Bitcoin, Ethereum, Altcoins, Blockchain, Policy & Regulations, AI, NFTs, DeFi)
➖➖➖➖➖➖➖➖
🔵 مهندسی نرم افزار
🔴 @software_labdon
🟢 حوزه های تحت پوشش
(Engineering, Architecture, Design, Testing, Security , QA)
➖➖➖➖➖➖➖➖
🔵 لینوکس- از توزیعها تا ترفندهای امنیتی
🔴 @linux_labdon
🟢 حوزه های تحت پوشش
(Linux Distributions, Open Source Software, Security Tips ,New Releases & Features)
➖➖➖➖➖➖➖➖
🔵 دوآپـس - ابزارها و روندهای جدید
🔴 @devops_labdon
🟢 حوزه های تحت پوشش
(CI/CD Pipelines, Cloud Infrastructure, Containerization & Orchestration, Monitoring & Performance, Infrastructure as Code, Security in DevOps)
➖➖➖➖➖➖➖➖
🕸 @labdon_academy
➖➖➖➖➖➖➖➖
🔵 گولنگ - همه چیز از اخبار تا نکات کلیدی
🔴 @gopher_academy
➖➖➖➖➖➖➖➖
🔵 موقعیت شغلی های گولنگ چه ایرانی و چه خارجی
🔴 @gopher_job
➖➖➖➖➖➖➖➖
🔵 انواع دیتابیس ها ردیس مانگو پستگرس و سایر دیتابیس ها
🔴 @database_academy
🟢 حوزه های تحت پوشش
(redis , mysql , postgresl , mongo ,etc)
➖➖➖➖➖➖➖➖
🔵 دنیای بلاکچین و ارز های دیجیتال
🔴 @Blockchain_labdon
🟢 حوزه های تحت پوشش
(Bitcoin, Ethereum, Altcoins, Blockchain, Policy & Regulations, AI, NFTs, DeFi)
➖➖➖➖➖➖➖➖
🔵 مهندسی نرم افزار
🔴 @software_labdon
🟢 حوزه های تحت پوشش
(Engineering, Architecture, Design, Testing, Security , QA)
➖➖➖➖➖➖➖➖
🔵 لینوکس- از توزیعها تا ترفندهای امنیتی
🔴 @linux_labdon
🟢 حوزه های تحت پوشش
(Linux Distributions, Open Source Software, Security Tips ,New Releases & Features)
➖➖➖➖➖➖➖➖
🔵 دوآپـس - ابزارها و روندهای جدید
🔴 @devops_labdon
🟢 حوزه های تحت پوشش
(CI/CD Pipelines, Cloud Infrastructure, Containerization & Orchestration, Monitoring & Performance, Infrastructure as Code, Security in DevOps)
➖➖➖➖➖➖➖➖
🕸 @labdon_academy
🔵 عنوان مقاله
Building AI Apps on Postgres? Start with pgai
🟢 خلاصه مقاله:
مقالهای که مورد بحث قرار گرفته به بررسی افزونهای جدید در PostgreSQL با نام pgai میپردازد، که هدف از آن افزودن قابلیتهای هوش مصنوعی به این پایگاه داده است. pgai به توسعهدهندگان امکان میدهد تا با استفاده از این افزونه، فعالیتهای مرتبط با AI مانند ساختن جاسازیها و تکمیل مدلها را در PostgreSQL انجام دهند. این افزونه تواناییهای برجستهای به توسعهدهندگان میدهد تا بتوانند به سهولت برنامههای جستجو و بازیابی با قابلیت تولید متن گسترده (RAG) را بسازند. به این ترتیب، pgai به عنوان یک ابزار قدرتمند در دست توسعهدهندگان قرار میگیرد تا از آن در ساخت برنامههای پیچیده و تعاملی که نیازمند فناوریهای پیشرفته AI هستند، استفاده کنند. این امکانات جدید، ساخت و توسعه برنامههای کاربردی مبتنی بر دادهها را در محیط PostgreSQL فراتر میبرد و افقهای جدیدی را برای استفاده بهینه از دادهها و AR در اختیار توسعهدهندگان قرار میدهد.
🟣لینک مقاله:
https://postgresweekly.com/link/163304/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
Building AI Apps on Postgres? Start with pgai
🟢 خلاصه مقاله:
مقالهای که مورد بحث قرار گرفته به بررسی افزونهای جدید در PostgreSQL با نام pgai میپردازد، که هدف از آن افزودن قابلیتهای هوش مصنوعی به این پایگاه داده است. pgai به توسعهدهندگان امکان میدهد تا با استفاده از این افزونه، فعالیتهای مرتبط با AI مانند ساختن جاسازیها و تکمیل مدلها را در PostgreSQL انجام دهند. این افزونه تواناییهای برجستهای به توسعهدهندگان میدهد تا بتوانند به سهولت برنامههای جستجو و بازیابی با قابلیت تولید متن گسترده (RAG) را بسازند. به این ترتیب، pgai به عنوان یک ابزار قدرتمند در دست توسعهدهندگان قرار میگیرد تا از آن در ساخت برنامههای پیچیده و تعاملی که نیازمند فناوریهای پیشرفته AI هستند، استفاده کنند. این امکانات جدید، ساخت و توسعه برنامههای کاربردی مبتنی بر دادهها را در محیط PostgreSQL فراتر میبرد و افقهای جدیدی را برای استفاده بهینه از دادهها و AR در اختیار توسعهدهندگان قرار میدهد.
🟣لینک مقاله:
https://postgresweekly.com/link/163304/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
GitHub
GitHub - timescale/pgai: A suite of tools to develop RAG, semantic search, and other AI applications more easily with PostgreSQL
A suite of tools to develop RAG, semantic search, and other AI applications more easily with PostgreSQL - timescale/pgai
👍2
🔵 عنوان مقاله
pg_worker_pool: Extension to Create a Pool of Background Workers
🟢 خلاصه مقاله:
مقاله در مورد یک افزونه ساده برای پایگاه دادههای Postgres بحث میکند که از مکانیزم فرآیندهای کارگر پسزمینه در Postgres استفاده میکند تا توزیع پرسوجوها بین تعدادی از کارگران (workers) را آسانتر کند. این افزونه باعث میشود که عملیات پردازشی بتوانند بین چندین کارگر به صورت موازی انجام شوند، که نهایتاً به بهبود عملکرد کلی سیستم کمک میکند. با استفاده از این تکنیک، پایگاه داده قادر خواهد بود به صورت مؤثرتری در مقیاسدهی و مدیریت بارهای کاری سنگین، عمل کند. این افزونه بخصوص برای کاربردهایی که نیاز به پردازش مقادیر زیادی از دادهها به صورت همزمان دارند، مفید است و میتواند به کاهش زمان پاسخگویی و افزایش راندمان کلی پردازش کمک کند.
🟣لینک مقاله:
https://postgresweekly.com/link/163336/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
pg_worker_pool: Extension to Create a Pool of Background Workers
🟢 خلاصه مقاله:
مقاله در مورد یک افزونه ساده برای پایگاه دادههای Postgres بحث میکند که از مکانیزم فرآیندهای کارگر پسزمینه در Postgres استفاده میکند تا توزیع پرسوجوها بین تعدادی از کارگران (workers) را آسانتر کند. این افزونه باعث میشود که عملیات پردازشی بتوانند بین چندین کارگر به صورت موازی انجام شوند، که نهایتاً به بهبود عملکرد کلی سیستم کمک میکند. با استفاده از این تکنیک، پایگاه داده قادر خواهد بود به صورت مؤثرتری در مقیاسدهی و مدیریت بارهای کاری سنگین، عمل کند. این افزونه بخصوص برای کاربردهایی که نیاز به پردازش مقادیر زیادی از دادهها به صورت همزمان دارند، مفید است و میتواند به کاهش زمان پاسخگویی و افزایش راندمان کلی پردازش کمک کند.
🟣لینک مقاله:
https://postgresweekly.com/link/163336/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
GitHub
GitHub - serpent7776/pg_worker_pool: Postgres extension creating a pool of background workers
Postgres extension creating a pool of background workers - serpent7776/pg_worker_pool
👍1
🔵 عنوان مقاله
pgBadger 13.0: A Postgres Log Analysis Tool
🟢 خلاصه مقاله:
مقاله مروری بر یک ابزار تجزیهوتحلیل لاگ با تمرکز بر عملکرد ارائه داده است که گزارشهای دقیقی را درباره استفاده ارائه میدهد. نمونهای از گزارش ارائه شده به خوانندگان کمک میکند تا درک بهتری از کارایی و دقت این ابزار داشته باشند. همچنین، لینکی به مخزن GitHub ارائه شده است که محلی برای دسترسی به کد منبع و مستندات لازم برای استفاده و بهرهبرداری از این ابزار تجزیهوتحلیل لاگ است. این ابزار به ویژه برای کسانی که به دنبال درک بهتر و دقیقتری از دادههای لاگ و پیشبرد تحلیلهای عملکردی هستند، مفید است.
🟣لینک مقاله:
https://postgresweekly.com/link/163333/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
pgBadger 13.0: A Postgres Log Analysis Tool
🟢 خلاصه مقاله:
مقاله مروری بر یک ابزار تجزیهوتحلیل لاگ با تمرکز بر عملکرد ارائه داده است که گزارشهای دقیقی را درباره استفاده ارائه میدهد. نمونهای از گزارش ارائه شده به خوانندگان کمک میکند تا درک بهتری از کارایی و دقت این ابزار داشته باشند. همچنین، لینکی به مخزن GitHub ارائه شده است که محلی برای دسترسی به کد منبع و مستندات لازم برای استفاده و بهرهبرداری از این ابزار تجزیهوتحلیل لاگ است. این ابزار به ویژه برای کسانی که به دنبال درک بهتر و دقیقتری از دادههای لاگ و پیشبرد تحلیلهای عملکردی هستند، مفید است.
🟣لینک مقاله:
https://postgresweekly.com/link/163333/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
pgbadger.darold.net
pgBadger :: PostgreSQL log analyzer
PostgreSQL log analyzer with fully detailed reports and graphs
👍1
🔵 عنوان مقاله
Smarter Postgres LLM with Retrieval Augmented Generation
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته به معرفی مفهوم "RAG" (Retriever-Augmented Generation) پرداخته است. این مفهوم بر اساس بهبود نتایج مدلهای بزرگ زبانی با استفاده از ارائه زمینه اطلاعاتی اضافی فراهم شده از منابع دادهای اضافی استوار است. در این روش، یک سیستم بازیابی اطلاعات به منظور جمعآوری و انتخاب دادههای مکمل و مرتبط با درخواست کاربر به کار گرفته میشود. سپس این دادهها به عنوان محتوای اضافی در کنار دادههای اصلی وارد مدل تولید محتوا شده، که به مدل امکان میدهد نتایج دقیقتر و غنیتری تولید کند. RAG به ویژه در مواردی که دادههای پایه محدود هستند یا نیاز به دقت اطلاعاتی بالا دارند، میتواند به شدت مفید واقع شود. این رویکرد در بهبود کارایی و دقت پاسخهای تولید شده توسط مدلهای بزرگ زبانی نقش موثری دارد.
🟣لینک مقاله:
https://postgresweekly.com/link/163327/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
Smarter Postgres LLM with Retrieval Augmented Generation
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته به معرفی مفهوم "RAG" (Retriever-Augmented Generation) پرداخته است. این مفهوم بر اساس بهبود نتایج مدلهای بزرگ زبانی با استفاده از ارائه زمینه اطلاعاتی اضافی فراهم شده از منابع دادهای اضافی استوار است. در این روش، یک سیستم بازیابی اطلاعات به منظور جمعآوری و انتخاب دادههای مکمل و مرتبط با درخواست کاربر به کار گرفته میشود. سپس این دادهها به عنوان محتوای اضافی در کنار دادههای اصلی وارد مدل تولید محتوا شده، که به مدل امکان میدهد نتایج دقیقتر و غنیتری تولید کند. RAG به ویژه در مواردی که دادههای پایه محدود هستند یا نیاز به دقت اطلاعاتی بالا دارند، میتواند به شدت مفید واقع شود. این رویکرد در بهبود کارایی و دقت پاسخهای تولید شده توسط مدلهای بزرگ زبانی نقش موثری دارد.
🟣لینک مقاله:
https://postgresweekly.com/link/163327/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
Crunchy Data
Smarter Postgres LLM with Retrieval Augmented Generation | Crunchy Data Blog
As a follow up to Paul's last post on an OpenAI connector to Postgres, Paul shows you how to add new data for your LLM queries to make them more accurate.
👍6🔥1
Forwarded from Linux.py | لینوکس + پایتون
رفقا سلام 🖐
ما تو شرکتمون یه صندلی واسه نیرویی با مهارت های زیر خالی شده:
تخصص در pl sql و کوئری نویسی
تخصص در oracle apex
حداقل یک سال سابقه کاری تو ۲ مهارت بالا
سن و جنسیت و مدرک تحصیلی و نظام وظیفه اهمیتی نداره
اگه شرایطشو دارید خوشحال میشم رزومتونو واسم ارسال کنید.
@mostafavn
ما تو شرکتمون یه صندلی واسه نیرویی با مهارت های زیر خالی شده:
تخصص در pl sql و کوئری نویسی
تخصص در oracle apex
حداقل یک سال سابقه کاری تو ۲ مهارت بالا
سن و جنسیت و مدرک تحصیلی و نظام وظیفه اهمیتی نداره
اگه شرایطشو دارید خوشحال میشم رزومتونو واسم ارسال کنید.
@mostafavn
🥰1
Forwarded from Future Pulse Persian
واقعا برنامه نویس بودن تو ایران ،یه مسیر شغلی کاملا مسخره است.
یوتیوب فیلتره ، سایت های آموزشی تحریم هستیم. پرداخت ارزی به سختی اتفاق میوفته و غیره.
در هر صورت خواستم بگم Github Copilot
به صورت رایگان در دسترس هست. اما تحریم هستیم.
https://aka.ms/vscode-activatecopilotfree
https://code.visualstudio.com/docs/copilot/setup-simplified
<پوریای اصلی قدیمی/>
➖➖➖➖➖➖➖➖
🕸 @labdon_academy
یوتیوب فیلتره ، سایت های آموزشی تحریم هستیم. پرداخت ارزی به سختی اتفاق میوفته و غیره.
در هر صورت خواستم بگم Github Copilot
به صورت رایگان در دسترس هست. اما تحریم هستیم.
https://aka.ms/vscode-activatecopilotfree
https://code.visualstudio.com/docs/copilot/setup-simplified
<پوریای اصلی قدیمی/>
➖➖➖➖➖➖➖➖
🕸 @labdon_academy
👍3🎉1🍓1👻1
اگه ردیس بدون پسورد دارید، احتمالا باید نگران باشید!
https://redrays.io/blog/redis-cve-2024-31449-how-to-reproduce-and-mitigate-the-vulnerability/
<Hosein Ghasemi/>
➖➖➖➖➖➖➖➖
🕸 https://linktr.ee/Labdon
https://redrays.io/blog/redis-cve-2024-31449-how-to-reproduce-and-mitigate-the-vulnerability/
<Hosein Ghasemi/>
➖➖➖➖➖➖➖➖
🕸 https://linktr.ee/Labdon
👍1👏1
Forwarded from Future Pulse Persian
👍1
Forwarded from Software Engineer Labdon
🍾یه سری رودمپ بدرد بخور براتون ردیف کردم
🔻Engineering Manager
https://roadmap.sh/engineering-manager
🔻Software Design and Architecture
https://roadmap.sh/software-design-architecture
🔻System Design
https://roadmap.sh/system-design
🔻Software Architect
https://roadmap.sh/software-architect
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
🔻Engineering Manager
https://roadmap.sh/engineering-manager
🔻Software Design and Architecture
https://roadmap.sh/software-design-architecture
🔻System Design
https://roadmap.sh/system-design
🔻Software Architect
https://roadmap.sh/software-architect
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
🔥3👍1
Forwarded from Software Engineer Labdon
📣 هش SHA 256 چگونه کار میکند؟
این وبسایت قدم به قدم فرآیند هش کردن رشته با الگوریتم Sha256 را بصورت گرافیکی نشان میدهد:
🔗 https://sha256algorithm.com/
🔹🔹🔹🔹🔹
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
این وبسایت قدم به قدم فرآیند هش کردن رشته با الگوریتم Sha256 را بصورت گرافیکی نشان میدهد:
🔗 https://sha256algorithm.com/
🔹🔹🔹🔹🔹
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
مفهوم Race Condition رو تا حالا شنیدی؟!
در واقع به درخواستهای همزمانی که روی یه اندپوینت مشخص یا یه داده خاص در سیستم ما اتفاق میفته، Race Condition میگن.
این اتفاق معمولاً زمانی رخ میده که چندین درخواست همزمان بخوان روی یک داده مشترک اثر بذارن یا تغییراتی ایجاد کنن، و اگه به درستی مدیریت نشه، میتونه منجر به باگهای جدی و رفتار غیرمنتظره در سیستم بشه.
چطور Race Condition رو مدیریت کنیم؟
برای رفع این مشکل، من درخواستهای همزمان رو به دو بخش کلی تقسیم کردم:
۱. همزمانی در لایه اپلیکیشن:
این نوع همزمانی زمانی رخ میده که چندین درخواست همزمان به یک منبع یا عملیات خاص در اپلیکیشن دسترسی پیدا کنن.
راهحل پیشنهادی:
از Cache::lock استفاده میکنیم. این روش برای ایجاد یک قفل موقت روی منابع مشترک کاربرد داره.
مثلاً با استفاده از Redis میتونیم مطمئن بشیم که فقط یک درخواست در یک زمان خاص اجازه دسترسی داره.
۲. همزمانی روی دیتابیس:
اینجا از قفلهای دیتابیس استفاده میکنیم تا درخواستهای همزمان رو کنترل کنیم:
FOR SHARE:
این نوع قفل وقتی استفاده میشه که فقط میخوایم داده رو بخونیم، ولی مطمئن بشیم کسی در همون لحظه نمیتونه اون رو تغییر بده.
این قفل اجازه میده درخواستهای دیگه فقط بخونن ولی هیچ عملیات نوشتن یا دستکاری نمیتونه انجام بشه.
FOR UPDATE:
این قفل وقتی استفاده میشه که میخوایم داده رو بخونیم و تغییر بدیم.
وقتی این قفل فعال بشه، هیچ درخواست دیگهای نمیتونه داده رو حتی بخونه یا تغییر بده تا وقتی که تراکنش فعلی کامل بشه.
با این روشهایی که گفتم، میتونیم از درخواستهای همزمان که باعث ایجاد باگ تو پروژمون میشن جلوگیری کنیم.
یادگیری این مفاهیم نهتنها توی پروژههای واقعی خیلی بهدرد میخوره، بلکه میتونه یه سؤال کلیدی توی مصاحبههای شغلی باشه!
| <Saber Qadimi/>
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
در واقع به درخواستهای همزمانی که روی یه اندپوینت مشخص یا یه داده خاص در سیستم ما اتفاق میفته، Race Condition میگن.
این اتفاق معمولاً زمانی رخ میده که چندین درخواست همزمان بخوان روی یک داده مشترک اثر بذارن یا تغییراتی ایجاد کنن، و اگه به درستی مدیریت نشه، میتونه منجر به باگهای جدی و رفتار غیرمنتظره در سیستم بشه.
چطور Race Condition رو مدیریت کنیم؟
برای رفع این مشکل، من درخواستهای همزمان رو به دو بخش کلی تقسیم کردم:
۱. همزمانی در لایه اپلیکیشن:
این نوع همزمانی زمانی رخ میده که چندین درخواست همزمان به یک منبع یا عملیات خاص در اپلیکیشن دسترسی پیدا کنن.
راهحل پیشنهادی:
از Cache::lock استفاده میکنیم. این روش برای ایجاد یک قفل موقت روی منابع مشترک کاربرد داره.
مثلاً با استفاده از Redis میتونیم مطمئن بشیم که فقط یک درخواست در یک زمان خاص اجازه دسترسی داره.
۲. همزمانی روی دیتابیس:
اینجا از قفلهای دیتابیس استفاده میکنیم تا درخواستهای همزمان رو کنترل کنیم:
FOR SHARE:
این نوع قفل وقتی استفاده میشه که فقط میخوایم داده رو بخونیم، ولی مطمئن بشیم کسی در همون لحظه نمیتونه اون رو تغییر بده.
این قفل اجازه میده درخواستهای دیگه فقط بخونن ولی هیچ عملیات نوشتن یا دستکاری نمیتونه انجام بشه.
FOR UPDATE:
این قفل وقتی استفاده میشه که میخوایم داده رو بخونیم و تغییر بدیم.
وقتی این قفل فعال بشه، هیچ درخواست دیگهای نمیتونه داده رو حتی بخونه یا تغییر بده تا وقتی که تراکنش فعلی کامل بشه.
با این روشهایی که گفتم، میتونیم از درخواستهای همزمان که باعث ایجاد باگ تو پروژمون میشن جلوگیری کنیم.
یادگیری این مفاهیم نهتنها توی پروژههای واقعی خیلی بهدرد میخوره، بلکه میتونه یه سؤال کلیدی توی مصاحبههای شغلی باشه!
| <Saber Qadimi/>
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
👍7
Forwarded from Future Pulse Persian
درود به همگی چند ماه پیش تصمیم گرفتم توی مواردی که خیلی باهاش سروکار دارم نمونه سوالتش رو از بعضی سایت ها و یا استک اور فلو بهش برخوردم رو توی ریپوهای زیر جداگانه جمع آوری کنم
اگر دوس داشتید به اشتراک بزارید و حمایت و مشارکت کنید
🎯- نمونه سوالات مصاحبه ای گیت
https://github.com/mrbardia72/git-Interview-Questions-And-Answers
🎯- نمونه سوالات مصاحبه ای گولنگ
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers
🎯- نمونه سوالات مصاحبه ای دیتابیس
https://github.com/mrbardia72/db-Interview-Questions-and-Answers
🎯- نمونه سوالات مصاحبه ای داکر
https://github.com/mrbardia72/docker-Interview-Questions-and-Answers
🎯- نمونه سوالات مصاحبه ای والت
https://github.com/mrbardia72/vault-Interview-Questions-and-Answers
👇👇join👇👇
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
اگر دوس داشتید به اشتراک بزارید و حمایت و مشارکت کنید
🎯- نمونه سوالات مصاحبه ای گیت
https://github.com/mrbardia72/git-Interview-Questions-And-Answers
🎯- نمونه سوالات مصاحبه ای گولنگ
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers
🎯- نمونه سوالات مصاحبه ای دیتابیس
https://github.com/mrbardia72/db-Interview-Questions-and-Answers
🎯- نمونه سوالات مصاحبه ای داکر
https://github.com/mrbardia72/docker-Interview-Questions-and-Answers
🎯- نمونه سوالات مصاحبه ای والت
https://github.com/mrbardia72/vault-Interview-Questions-and-Answers
👇👇join👇👇
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
🔥5
📌 Database Administration (DBA) Engineering Manager
📝 Type: Visa Sponsorship
🌍 Relocation Package: ✅
🏢 Company: TradingView
📍 Location: UNITED KINGDOM
⌨️ Category: #Programming
🔗 Tags: #javanoscript #python #reactjs #typenoscript #golang #mysql #postgresql #redis #kubernetes #aws #cloud
📝 Type: Visa Sponsorship
🌍 Relocation Package: ✅
🏢 Company: TradingView
📍 Location: UNITED KINGDOM
⌨️ Category: #Programming
🔗 Tags: #javanoscript #python #reactjs #typenoscript #golang #mysql #postgresql #redis #kubernetes #aws #cloud
چرا ردیس اینقدر سریع کار میکنه؟
ردیس یه دیتابیس در حافظه است که سرعت خیلی بالایی داره. حالا بیاید ببینیم چرا اینقدر سریع هست.
۱. دادهها تو RAM ذخیره میشن
اولین دلیل سرعت ردیس اینه که همه دادهها در حافظه RAM ذخیره میشن، نه روی دیسک. این یعنی وقتی یه درخواست میاد، ردیس نیازی نداره که دادهها رو از روی هارد دیسک بخونه، چون همه چیز داخل حافظهس. خواندن از RAM خیلی سریعتر از دیسکه. علاوه بر این، ردیس از ساختارهای دادهای ساده مثل hash tables، linked lists و skip lists استفاده میکنه که همین سادگی باعث میشه خیلی سریعتر از دیتابیسهای دیگه عمل کنه.
۲. فقط یک رشته برای همه درخواستها
حالا شاید این سوال پیش بیاد که چرا ردیس از فقط یه thread استفاده میکنه؟ معمولاً فکر میکنیم استفاده از چندین thread میتونه سرعت رو بیشتر کنه، اما در دیتابیسهای دیگه، این کار باعث درگیری و کندی میشه، چون چند thread ممکنه با هم دسترسی به دادهها رو به اشتراک بذارند و قفلگذاری بشه. اما ردیس با استفاده از تنها یک thread این مشکل رو حل کرده و خیلی سریعتر عمل میکنه.
۳. مدیریت درخواستها با I/O Multiplexing
حالا بریم سراغ یکی از بخشهای جالب ردیس که معمولاً خیلی مورد توجه قرار نمیگیره، ولی درواقع دلیل اصلی سرعت بالای ردیسه: I/O Multiplexing. این تکنیک به ردیس این امکان رو میده که بتونه با یه thread تعداد زیادی درخواست رو بهطور همزمان مدیریت کنه. حالا شاید بپرسید: چطور ممکنه؟
در دیتابیسهای معمولی، وقتی چندین درخواست به سیستم میرسه، معمولاً هر درخواست برای پردازش نیاز به یه thread جداگانه داره. این یعنی سیستم باید چندین thread رو بهصورت همزمان اجرا کنه و این باعث میشه که هم سرعت کاهش پیدا کنه و هم مصرف منابع بیشتر بشه.
اما ردیس با استفاده از I/O Multiplexing این مشکل رو حل کرده. این تکنیک به ردیس این امکان رو میده که فقط با یک thread بتونه همه درخواستها رو مدیریت کنه. چطور؟ اینطور که ردیس از یه مکانیسم پیچیده برای مدیریت ورودی و خروجی (I/O) استفاده میکنه. وقتی درخواستها به سیستم میرسه، ردیس بهطور موقت اونها رو نگه میداره و به محض اینکه منابع آزاد بشه، جواب میده. به این ترتیب ردیس میتونه با یه thread چندین درخواست رو بهطور همزمان پردازش کنه بدون اینکه منتظر بشه یا منابع رو قفل کنه.
این کار باعث میشه که ردیس از نظر سرعت و کارایی خیلی بهتر از سیستمهایی باشه که از چندین thread برای پردازش درخواستها استفاده میکنن. در واقع I/O Multiplexing به ردیس این امکان رو میده که بهطور همزمان و با کمترین میزان تأخیر، چندین درخواست رو پردازش کنه و این یعنی سرعت بالا و پاسخدهی سریع.
در نهایت، این تکنیک به ردیس اجازه میده که در مقیاس بزرگ، حتی با تعداد زیادی درخواست هم عملکرد خودش رو حفظ کنه و به طور موثر منابع رو مدیریت کنه. این یعنی هیچ وقت ردیس از پس بار سنگین درخواستها برنمیاد و همیشه سریع و کارآمد باقی میمونه.
در نهایت، این ویژگیها باعث میشه که ردیس سریعترین و کارآمدترین گزینه برای کار با دادهها باشه، به خصوص برای برنامههایی که نیاز به پاسخدهی سریع دارن.
<Reza Annabestani/>
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
ردیس یه دیتابیس در حافظه است که سرعت خیلی بالایی داره. حالا بیاید ببینیم چرا اینقدر سریع هست.
۱. دادهها تو RAM ذخیره میشن
اولین دلیل سرعت ردیس اینه که همه دادهها در حافظه RAM ذخیره میشن، نه روی دیسک. این یعنی وقتی یه درخواست میاد، ردیس نیازی نداره که دادهها رو از روی هارد دیسک بخونه، چون همه چیز داخل حافظهس. خواندن از RAM خیلی سریعتر از دیسکه. علاوه بر این، ردیس از ساختارهای دادهای ساده مثل hash tables، linked lists و skip lists استفاده میکنه که همین سادگی باعث میشه خیلی سریعتر از دیتابیسهای دیگه عمل کنه.
۲. فقط یک رشته برای همه درخواستها
حالا شاید این سوال پیش بیاد که چرا ردیس از فقط یه thread استفاده میکنه؟ معمولاً فکر میکنیم استفاده از چندین thread میتونه سرعت رو بیشتر کنه، اما در دیتابیسهای دیگه، این کار باعث درگیری و کندی میشه، چون چند thread ممکنه با هم دسترسی به دادهها رو به اشتراک بذارند و قفلگذاری بشه. اما ردیس با استفاده از تنها یک thread این مشکل رو حل کرده و خیلی سریعتر عمل میکنه.
۳. مدیریت درخواستها با I/O Multiplexing
حالا بریم سراغ یکی از بخشهای جالب ردیس که معمولاً خیلی مورد توجه قرار نمیگیره، ولی درواقع دلیل اصلی سرعت بالای ردیسه: I/O Multiplexing. این تکنیک به ردیس این امکان رو میده که بتونه با یه thread تعداد زیادی درخواست رو بهطور همزمان مدیریت کنه. حالا شاید بپرسید: چطور ممکنه؟
در دیتابیسهای معمولی، وقتی چندین درخواست به سیستم میرسه، معمولاً هر درخواست برای پردازش نیاز به یه thread جداگانه داره. این یعنی سیستم باید چندین thread رو بهصورت همزمان اجرا کنه و این باعث میشه که هم سرعت کاهش پیدا کنه و هم مصرف منابع بیشتر بشه.
اما ردیس با استفاده از I/O Multiplexing این مشکل رو حل کرده. این تکنیک به ردیس این امکان رو میده که فقط با یک thread بتونه همه درخواستها رو مدیریت کنه. چطور؟ اینطور که ردیس از یه مکانیسم پیچیده برای مدیریت ورودی و خروجی (I/O) استفاده میکنه. وقتی درخواستها به سیستم میرسه، ردیس بهطور موقت اونها رو نگه میداره و به محض اینکه منابع آزاد بشه، جواب میده. به این ترتیب ردیس میتونه با یه thread چندین درخواست رو بهطور همزمان پردازش کنه بدون اینکه منتظر بشه یا منابع رو قفل کنه.
این کار باعث میشه که ردیس از نظر سرعت و کارایی خیلی بهتر از سیستمهایی باشه که از چندین thread برای پردازش درخواستها استفاده میکنن. در واقع I/O Multiplexing به ردیس این امکان رو میده که بهطور همزمان و با کمترین میزان تأخیر، چندین درخواست رو پردازش کنه و این یعنی سرعت بالا و پاسخدهی سریع.
در نهایت، این تکنیک به ردیس اجازه میده که در مقیاس بزرگ، حتی با تعداد زیادی درخواست هم عملکرد خودش رو حفظ کنه و به طور موثر منابع رو مدیریت کنه. این یعنی هیچ وقت ردیس از پس بار سنگین درخواستها برنمیاد و همیشه سریع و کارآمد باقی میمونه.
در نهایت، این ویژگیها باعث میشه که ردیس سریعترین و کارآمدترین گزینه برای کار با دادهها باشه، به خصوص برای برنامههایی که نیاز به پاسخدهی سریع دارن.
<Reza Annabestani/>
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
👍5💘1
اگه میخوای بیشتر در مورد انواع ایندکس های دیتابیس بدونی پیشنهاد میکنم این سری آموزش ویدیویی از PlanetScale رو ببین.
دیدن ش دید عمیق تری بهت میده که بهتر از ایندکس ها استفاده کنی.
لیست موضوعاتی که پوشش داده
Introduction to indexes
B+ trees
Primary keys
Secondary keys
Primary key data types
Where to add indexes
Index selectivity
Prefix indexes
Composite indexes
Covering indexes
Functional indexes
Indexing JSON columns
Indexing for wildcard searches
Fulltext indexes
Invisible indexes
Duplicate indexes
Foreign keys
https://planetscale.com/learn/courses/mysql-for-developers/indexes/introduction-to-indexes
How do Database Indexes Work?
https://planetscale.com/blog/how-do-database-indexes-work
<Hossein Nazari/>
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
دیدن ش دید عمیق تری بهت میده که بهتر از ایندکس ها استفاده کنی.
لیست موضوعاتی که پوشش داده
Introduction to indexes
B+ trees
Primary keys
Secondary keys
Primary key data types
Where to add indexes
Index selectivity
Prefix indexes
Composite indexes
Covering indexes
Functional indexes
Indexing JSON columns
Indexing for wildcard searches
Fulltext indexes
Invisible indexes
Duplicate indexes
Foreign keys
https://planetscale.com/learn/courses/mysql-for-developers/indexes/introduction-to-indexes
How do Database Indexes Work?
https://planetscale.com/blog/how-do-database-indexes-work
<Hossein Nazari/>
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
👍6
🔵 عنوان مقاله
2. Optimizing Postgres Table Layout for Maximum Efficiency
🟢 خلاصه مقاله:
مقالهی مورد بررسی به اهمیت چیدمان دادهها در ساختارهای دادهای وسیعتر و تأثیر آن بر بهینهسازی در برنامهنویسی سطح پایین میپردازد و تأکید میکند که این مسائل میتوانند بر جداول Postgres نیز تاثیر گذار باشند. رناتو در بررسیهای خود نشان داد که چگونه چیدمان جدول میتواند هم بر کارایی ذخیرهسازی و هم بر عملکرد پرسوجو تأثیر گذارد. این مطالعه به بررسی فنی میپردازد که چگونه تغییرات در طراحی داخلی جداول داده میتواند به افزایش سرعت دسترسی به دادهها و کاهش فضای مورد نیاز برای ذخیرهسازی منجر شود. این اطلاعات برای توسعهدهندگانی که به دنبال بهبود عملکرد پایگاه دادههای خود هستند، مفید است و میتواند در بهینهسازی عملکرد کلی سیستمها مؤثر باشد.
🟣لینک مقاله:
https://postgresweekly.com/link/163620/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
2. Optimizing Postgres Table Layout for Maximum Efficiency
🟢 خلاصه مقاله:
مقالهی مورد بررسی به اهمیت چیدمان دادهها در ساختارهای دادهای وسیعتر و تأثیر آن بر بهینهسازی در برنامهنویسی سطح پایین میپردازد و تأکید میکند که این مسائل میتوانند بر جداول Postgres نیز تاثیر گذار باشند. رناتو در بررسیهای خود نشان داد که چگونه چیدمان جدول میتواند هم بر کارایی ذخیرهسازی و هم بر عملکرد پرسوجو تأثیر گذارد. این مطالعه به بررسی فنی میپردازد که چگونه تغییرات در طراحی داخلی جداول داده میتواند به افزایش سرعت دسترسی به دادهها و کاهش فضای مورد نیاز برای ذخیرهسازی منجر شود. این اطلاعات برای توسعهدهندگانی که به دنبال بهبود عملکرد پایگاه دادههای خود هستند، مفید است و میتواند در بهینهسازی عملکرد کلی سیستمها مؤثر باشد.
🟣لینک مقاله:
https://postgresweekly.com/link/163620/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
Renato's Runtime Reflections
Optimizing Postgres table layout for maximum efficiency
Introduction When modeling a Postgres database, you probably don’t give much thought to the order of columns in your tables. After all, it seems like the kind of thing that wouldn’t affect storage or performance. But what if I told you that simply reordering…
👍1
🔵 عنوان مقاله
3. Can Postgres Replace Redis as a Cache?
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته به مقایسه بین Redis و Postgres برای استفاده بهعنوان سرور ذخيرهسازی دادهها میپردازد. Redis به دلیل عملکرد بالا در ذخیرهسازی دادهها در حافظه و استفاده گسترده برای کش کردن، شناخته شده است. این مقاله بررسی میکند که آیا میتوان از Postgres، که یک سیستم مدیریت پایگاه دادههای رابطهای است، به جای Redis استفاده کرد. سوال اصلی مقاله این است که آیا Postgres میتواند برای همه کارها به کار رود و نقش Redis را در ذخیره سازی دادهها با عملکرد بالا و caching عهدهدار شود. در نتیجه، مقاله تلاش میکند تا با بررسی تفاوتهای عملکردی و کاربردی بین این دو سیستم، به این سوال پاسخ دهد. این بررسی به خوانندگان کمک میکند تا تصمیم گیری بهتری در مورد انتخاب سیستم مدیریت داده مناسب برای نیازهای خاص خود داشته باشند.
🟣لینک مقاله:
https://postgresweekly.com/link/163621/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
3. Can Postgres Replace Redis as a Cache?
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته به مقایسه بین Redis و Postgres برای استفاده بهعنوان سرور ذخيرهسازی دادهها میپردازد. Redis به دلیل عملکرد بالا در ذخیرهسازی دادهها در حافظه و استفاده گسترده برای کش کردن، شناخته شده است. این مقاله بررسی میکند که آیا میتوان از Postgres، که یک سیستم مدیریت پایگاه دادههای رابطهای است، به جای Redis استفاده کرد. سوال اصلی مقاله این است که آیا Postgres میتواند برای همه کارها به کار رود و نقش Redis را در ذخیره سازی دادهها با عملکرد بالا و caching عهدهدار شود. در نتیجه، مقاله تلاش میکند تا با بررسی تفاوتهای عملکردی و کاربردی بین این دو سیستم، به این سوال پاسخ دهد. این بررسی به خوانندگان کمک میکند تا تصمیم گیری بهتری در مورد انتخاب سیستم مدیریت داده مناسب برای نیازهای خاص خود داشته باشند.
🟣لینک مقاله:
https://postgresweekly.com/link/163621/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
Medium
Can Postgres replace Redis as a cache?
I wanted to understand: Is Postgres as a cache a really good idea? Can it indeed replace Redis? That’s what I want to find out today.
👍2❤1