CodeCrafters
764 subscribers
91 photos
51 videos
42 files
170 links
Download Telegram
CodeCrafters
https://telegra.ph/Stacks-and-queues-09-30 #algorithm @code_crafters
Queue¹
صف²
یک صف شبیه به یک استک³ است، اما روش متفاوتی را برای افزودن و حذف عناصر تعریف می‌کند.
عناصر از یک انتها اضافه می‌شوند که به آن rear⁴ می‌گویند و از انتهای دیگر به نام front⁵ حذف می‌شوند.

به این رفتار FIFO⁶ (First in First Out) گفته می‌شود.
برای تجسم عملکرد آن می توانید یک صف از افراد را در نظر بگیرید. افراد به ترتیب وارد صف می شوند. به مرور طول صف افزایش می‌یابد. سپس افراد به ترتیبی که وارد صف شده اند، از صف خارج می‌شوند. در این صورت اولین نفری که وارد صف شده، اولین نفری است که از صف خارج خواهد شد.

اصطلاح شناسی
فرآیند افزودن عناصر جدید به صف را enqueue⁷ می‌گویند.
فرآیند حذف یک عنصر از صف را dequeue⁸ می‌گویند.

برنامه‌های کاربردی
از صف‌ها هر زمان که نیاز به مدیریت اشیاء⁹ داشته باشیم به منظور شروع با اولین مورد وارد شده استفاده می‌شود.
سناریوها شامل چاپ اسناد¹⁰ بر روی چاپگر، سیستم‌های مرکز تماس پاسخگویی به افراد در انتظار و غیره است.

📌 لیست¹¹های پایتون ساده‌ترین راه برای پیاده‌سازی عملکرد یک صف هستند.


پانوشت:
1. به فارسی: صف
2. به انگلیسی: Queue
3. Stack (به فارسی: پُشته)
4. انتها، پشت
5. جلو
6. First in First Out
یا به اختصار FIFO یعنی خروج به ترتیب ورود، یکی از روش‌های سازماندهی کنترل داده با توجه به زمان و اولویت‌بندی است.
7. enqueue
کردن، عنصری را به انتهای Queue (صف) اضافه میکند.
8. dequeue
کردن، اولین عنصر یا همان عنصر جلوی صف را از Queue خارج و حذف خواهد کرد.
9. Object
10. Document
11. List

#data_structures
#algorithm

@code_crafters
👍4🔥3
CodeCrafters
Queue¹ صف² یک صف شبیه به یک استک³ است، اما روش متفاوتی را برای افزودن و حذف عناصر تعریف می‌کند. عناصر از یک انتها اضافه می‌شوند که به آن rear⁴ می‌گویند و از انتهای دیگر به نام front⁵ حذف می‌شوند. به این رفتار FIFO⁶ (First in First Out) گفته می‌شود. برای تجسم…
صف در پایتون

بیایید کلاس Queue را با متُدهای enqueue، dequeue، is_empty و print مربوطه پیاده سازی کنیم.

ما از یک لیست برای ذخیره عناصر استفاده خواهیم کرد.
class Queue:
def __init__(self):
self.items = []

def is_empty(self):
return self.items == []

def enqueue(self, item):
self.items.insert(0, item)

def dequeue(self):
return self.items.pop()

def print_queue(self):
print(self.items)

q = Queue()
q.enqueue('a')
q.enqueue('b')
q.enqueue('42')
q.print_queue()

q.dequeue()
q.print_queue()


متُد enqueue یک عنصر را در ابتدای لیست اضافه می‌کند، در حالی که متُد dequeue آخرین عنصر را حذف می‌کند.

ℹ️ با کد بازی کنید و صف را در عمل ببینید!

#data_structures
#algorithm

@code_crafters
🔥4👍3👌1
Linked List¹

یک لینکدلیست² مجموعه‌ای از گره³ها است که در آن هر گره دادههای خود و پیوند⁵ی به گره بعدی را ذخیره می‌کند.

یک گره به گره دیگری پیوند دارد و آنچه را که می‌توان به عنوان یک زنجیره پیوندی⁶ در نظر گرفت، تشکیل می‌دهد:


اولین گره سَر⁷ نامیده می‌شود و به عنوان نقطه شروع برای هر تکرار⁸ در لیست استفاده می‌شود. آخرین گره باید پیوند آن به None⁹ اشاره داشته باشد، تا انتهای لیست تعیین شود.

برخلاف استک‌ها¹⁰ و صف‌ها¹¹، می‌توانید گره‌ها را در هر جایگاهی از لینکدلیست (شبیه به یک لیست استاندارد) اضافه و حذف کنید.

برنامه‌های کاربردی

لینکدلیست‌ها زمانی مفید هستند که داده‌های شما پیوند داده شده است. به عنوان مثال، زمانی که به عملکرد بازگردانی-بازانجام¹² نیاز دارید، گره‌ها می‌توانند وضعیت را با پیوندهایی به حالت‌های قبلی و بعدی نشان دهند. مثال دیگر می‌تواند یک پلی‌لیست¹³ موسیقی باشد که در آن هر بُرش¹⁴ با بُرش بعدی مرتبط است.

📌 لینکدلیست‌ها همچنین می‌توانند برای ایجاد سایر ساختارهای داده¹⁵ مانند استک‌ها، صف‌ها و گراف‌ها¹⁶ استفاده شوند.


پانوشت:

1. به فارسی: لیست پیوندی (فهرست پیوندی)
2. Linked List
3. Node
یا نود یک نقطه اتصال در شبکه است. این نقطه اتصال می‌تواند یکی از نقاط توزیع مجدد داده یا نقاط ارتباطی باشد که اطلاعات را ارسال و دریافت می‌کنند. اما این همه آنچه که در خصوص node یا گره در شبکه نیست.
4. Data
5. Link
6. Linked Chain
7. Head
8. Iteration
9. از None برای نشان دادن عدم وجود یک مقدار استفاده می‌شود. این در زبان‌های دیگر برنامه‌نویسی مشابه است. مانند دیگر مقادیر خالی مانند 0، [] و رشته خالی، زمانی که به یک متغیر بولی تبدیل می‌شود false خواهد بود.
10. Stacks (پشته‌ها)
11. Queues
12. Undo/ Redo
13. Playlist
14. Clip
15. Data Structures
16. Graphs
دیتا استراکچر یا ساختمان داده‌ای است که به منظور مدل‌سازی مجموعه‌ای از اشیاء و ارتباطات مابین آن‌ها مورد استفاده قرار می‌گیرد.

#data_structures
#algorithm

@code_crafters
🔥4👍1
CodeCrafters
Linked List¹ یک لینکدلیست² مجموعه‌ای از گره³ها است که در آن هر گره داده⁴های خود و پیوند⁵ی به گره بعدی را ذخیره می‌کند. یک گره به گره دیگری پیوند دارد و آنچه را که می‌توان به عنوان یک زنجیره پیوندی⁶ در نظر گرفت، تشکیل می‌دهد: اولین گره سَر⁷ نامیده می‌شود…
لینکد‌لیست‌ در پایتون

هر گره شامل داده و پیوند به گره بعدی خواهد بود.

بیایید با ایجاد کلاس Node¹ شروع کنیم:
class Node:
def __init__(self, data, next):
self.data = data
self.next = next


اکنون می‌توانیم کلاس LinkedList را با متُدهای مربوطه ایجاد کنیم:
class Node:
def __init__(self, data, next):
self.data = data
self.next = next

class LinkedList:
def __init__(self):
self.head = None

def add_at_front(self, data):
self.head = Node(data, self.head)

def add_at_end(self, data):
if not self.head:
self.head = Node(data, None)
return
curr = self.head
while curr.next:
curr = curr.next
curr.next = Node(data, None)

def get_last_node(self):
n = self.head
while(n.next != None):
n = n.next
return n.data

def is_empty(self):
return self.head == None

def print_list(self):
n = self.head
while n != None:
print(n.data, end = " => ")
n = n.next
print()


s = LinkedList()
s.add_at_front(5)
s.add_at_end(8)
s.add_at_front(9)

s.print_list()
print(s.get_last_node())


متُد ()add_at_front یک Node جدید را به عنوان سَر لیست اضافه می کند و سَر قبلی را به آن پیوند می‌دهد.
متُد ()add_at_end با استفاده از یک حلقه² while تا انتهای لیست تکرار می‌شود و گره جدید را به عنوان پیوندِ آخرین گره اضافه می‌کند.

ℹ️ کد را اجرا کنید و ببینید چگونه کار می‌کند!


پانوشت:

1. نام کلاس "گره" (نود/ Node)
2. حلقه در برنامه نویسی یکی از عنصرهای برنامه‌نویسی به حساب می‌آید که به وسیله آن می‌توان بخشی از کدها را به تعداد دفعات مشخص تا زمانی تکرار کرد که فرایند و پروسه مورد نظر به پایان برسد.

#data_structures
#algorithm

@code_crafters
👍4🔥4👌1
سیستم SSO (single sign-on) چیست؟

در واقع sso یک سیستم احراز هویت هستش، تکنولوژی که صفحات مختلف ورود برنامه‌های مختلف رو در یک صفحه ترکیب میکنه، با sso کاربر تنها یکبار اعتبارنامه خودش (نام کاربری و رمزعبور) رو در یک صفحه وارد میکنه و به همه برنامه‌های SaaS مورد نیاز خود دسترسی پیدا میکنه

در واقع sso توسط زمینه تجاری مورد استفاده قرار میگیرد، زمانیکه تمام برنامه‌های کاربردی کاربر توسط یک تیم متخصص IT ارائه و مدیریت میگردد

یک سازمان رو در نظر بگیرید که چندین برنامه کاربردی مختلف دارد و کاربر برای هر برنامه باید بصورت جداگانه هویت خود رو احراز کند، این موجب میشه تا در نهایت کاربران نهایی از انجام آن خسته و یا بخواهند آنرا به هر طریقی شده دور بزنند، sso در اینجا این امکان رو فراهم میکنه تا کاربر تنها با یکبار مشخص کردن هویت خود به تمامی سرویس‌های کاربردی دسترسی پیدا کند، sso یک جنبه مهم از تمام راه حلهای مدیریت هویت و دسترسی یا کنترل دسترسی (IAM) و تایید هویت کاربر برای دانستن مجوزهای که هرکاربر باید داشته باشد است

مزایای استفاده از sso
علاوه بر سادگی استفاده از آن برای کاربران، امنیت آن نیز بسیار است، اما چگونه ممکن است استفاده از یک نام کاربری و پسورد برای استفاده از چندین سرویس امنتر از استفاده از چندین نام کاربری و پسورد باشد، دلایل زیر میتواند توضیح قانع کننده‌ای باشد:

۱-پسورد سخت:
کاربران تنها از یک پسورد استفاده میکنند و sso امکان ساخت و به یاد داشتن پسورد سخت رو فراهم میکنه چون کاربران تنها از یک پسورد استفاده میکنند و پسورد سخت از حملات (brute force attack) جلوگیری میکند، حدس زدن یک پسورد سخت کار رو غیر ممکن میکند

۲-عدم تکرار پسورد:
وقتی کاربران برای هر سرویس نیاز به پسورد داشته باشند معمولا از یک پسورد تکراری در تمامی سرویس‌ها استفاده میکنند(یک رمز یکسان برای تمامی سرویس‌ها) اگر داده‌های دیتابیس یک سرویس لو بره با همون پسورد کاربر میتوانن به همه سرویس‌های دیگه دسترسی پیدا کنند، sso با حذف چندین صفحه ورود به یک صفحه این مورد رو رفع میکند

۳-اعمال و اجرا کردن سیاست‌های رمز عبور:
با استفاده از سیستم sso متخصصان IT میتوانند به راحتی سیاست‌های رمز عبور خود را اعمال کنند برای مثال: بجای بازنشانی رمز عبور دوره‌ای در سرویس‌های مختلف با استفاده از sso کاربر تنها در یک سرویس بطور دوره‌ای رمز عبور خود را بازنشانی میکند

۴-احراز هویت‌های چندعامله(multi-factore authentication):
یا به اختصار MFA رجوع میکنه به بیش از یک عامل هویت سنجی، برای مثال علاوه بر نام کاربری و رمز عبور کاربر ممکن است مجبور به استفاده از احرازهویت سخت افزاری هم گردد، این قطعه سخت افزاری در شناسایی کاربر بسیار مهم است، MFA بسیار امنتر از اتکا به رمز عبور می‌باشد، sso امکان استفاده از MFA رو در یک نقطه واحد بجای استفاده از آن در چندین نقطه که ممکن است غیرقابل پیاده سازی باشد فراهم میکند

۵-یک نقطه برای ورود رمز عبور:
ناظران سیستم میتوانند پس از مدت مشخصی اعتبارنامه را مجدد وارد کنند تا اطمینان حاصل کنند که همان کاربر همچنان در دستگاهی که به سیستم وارد شده فعال است، با sso انها یک مکان مرکزی برای انجام اینکار رو برای همه برنامه‌های داخلی دارند، به جای اینکه اینکار رو در چندین برنامه مختلف اعمال کنند که ممکن است برخی از آنها این مورد رو پشتیبانی نکنند

۶-مدیریت اعتبار داخلی بجای حافظه خارجی:
معمولا رمزعبور کاربران بصورت مدیریت نشده توسط برنامه‌ها و سرویس‌های که ممکن است از بهترین شیوه‌های امنیتی پیروی کنند یا نکنند ذخیره میشوند، با sso آنها بصورت داخلی در محیطی ذخیره میشوند که تیم IT کنترل بیشتری روی آن دارد

۷-اتلاف زمان کمتر جهت بازیابی رمز عبور:
علاوه بر مزایای ذکر شده ،sso زمان تلف شده رو برای تیم‌های داخلی کاهش میدهد، تیم IT زمان کمتری رو برای کمک به بازیابی رمز عبور کاربران میکند و کاربران زمان کمتری رو صرف ورود به برنامه‌های مختلف برای انجام کارهای خود میکندد،این پتانسیل موجب افزایش بهره وری کسب و کار می‌شود


#microservice
#sso

@code_crafters
👍5
توکن‌های احرازهویت SSO چگونه کار میکندد؟
توانایی ارسال توکن احراز هویت به برنامه‌ها و سرویس‌های خارجی در فرآیند SSO بسیار مهم است. این همان چیزی است که سیستم تأیید هویت را قادر می سازد جدا از سایر سرویس های ابری انجام شود و SSO را ممکن می کند.

یک رویداد اجتماعی را تصور کنید که تنها یکعده خاص از مردم میتوانند در آن شرکت کنند، یک راه برای بررسی آن این است در قسمت ورودی نگهبانانی بگذاریم که ورود افراد رو چک کنه و مهر تایید بر اجازه ورود صادر بشود، شبیه هر مهر که یکسری پارامترهای تاییدی دارد توکن احرازهویت نیز پارامترهایی دارد که صحت آنرا نشان میدهد،این استاندارد توکن احراز هویت رو با نام SAML (Security Assertion Markup Language) میشناسیم


چگونه SSO در یک استراتژی مدیریت دسترسی قرار می گیرد؟
در واقع sso تنها یک جنبه مدیریت دسترسی هستش، این باید ترکیبی باشد از کنترل دسترسی، کنترل سطح دسترسی، لاگ فعالیت‌ها و سایر اقدامات جهت رهگیری و کنترل رفتار کاربر درون برنامه‌های سازمانی، با این حال، SSO یک عنصر حیاتی در مدیریت دسترسی است. اگر سیستمی نداند کاربر کیست، هیچ راهی برای اجازه یا محدود کردن اعمال آن کاربر وجود ندارد.



سیستم sso یک سرویس حیاتی در مبحث میکروسرویس هستش که سعی میکنیم این سرویس رو با جنگو و یک پلتفرم مخصوص و معروف آن پیاده سازی کنیم


#microservice
#sso

@code_crafters
👍4
در ادامه مبحث میکروسرویس رسیدیم به sso و اکنون با یک پلتفرم جامع بابتش آشنا خواهیم شد


در پست قبل گفتیم تمامی سرویس‌ها و برنامه‌های ما نیاز به احراز هویت دارن و با استفاده از sso تمام صفحات ورود رو در یک صفحه جا میدیم، برای اینکار یک پلتفرم رایگان و پر استفاده وجود دارد از شرکت readhat با نام keycloak


در واقع keycloak یک ابزار رایگان شناسایی هویت و مدیریت دسترسی میباشد(IAM) identity and access management ، فرآیند احراز هویت رو برای سرویس‌های IT ساده میکند

هدف از ابزار IAM اطمینان حاصل کردن از این مورد است که مردم به منابع درستی دسترسی دارن، که معمولاً اجرای SSO, فدراسیون هویت (identity federation) و احراز هویت قوی (authentication strong) رو امکان پذیر می کند

همه شما استفاده از مدیریت هویت و دسترسی (IAM) را می دانید.کاربرد اصلی راه حل IAM این است که به عنوان یک Identity Provider (IdP) عمل می کند، به این معنی که هویت های دیجیتالی کاربر و همچنین فاکتورهای احراز هویت آنها را ایجاد، نگهداری و مدیریت می کند

اما این سوالات پیش میاد
خود keycloak چیست؟؟
ویژگی و سودمندی آن چیست؟؟
چگونه تاثیر گذاره؟؟

ما به این سوالات پاسخ میدیم

نخست keycloak چیست؟؟
یک ابزار برای IAM هستش که مجوز Apache رو داره و توسط شرکت redhat برای sso طراحی شده است

با keycloak شما میتونید در تایم کوتاهی سرویس خودتون رو امن و احرازهویت رو به برنامه خود اضافه کنید

با استفاده از کنسول ادمین keycloak ،کمپانی‌ها میتونن با شبکه‌های اجتماعی سریعا وارد بشن، اینجا کد یا برنامه‌ای تغییر نمیکنه، تمامی این موارد نیازمند انتخاب شبکه اجتماعی میباشد، ادمین‌ها میتونن تمام جنبه‌های keycloak رو به سادگی مدیریت کنند، برای مثال فعال و غیرفعال کردن ویژگی‌های آن


ویژگی‌های keycloak
در واقع keycloak از سه نوع پروتکل oidc, oauth2, saml پشتیبانی میکند

این ابزار بصورت کامل از SSO که مخفف single-sign on و single-sign out میباشد پشتیبانی میکند

کنسول ادمین
یک رابط کاربری گرافیکی مبتنی بر وب توسط Keycloak ارائه شده است، که در آن می‌توانید تمام تنظیمات مورد نیاز خود را با «کلیک کنید» آنطور که می‌خواهید کار کند تنظیم کنید


دسترسی و هویت شناسی کاربر
ما میتونیم بگیم که keycloak یک ابزار مستقل برای مدیریت هویت و دسترسی کاربران است، که به ما اجازه داشتن یک دیتابیس از کاربران، نقش‌ها و گروه‌ها رو میده، ما می‌تونیم از این اطلاعات بیشتر برای احراز هویت کاربران در برنامه‌هامون استفاده کنیم و بخش‌هایی از آن را بر اساس نقش‌های از پیش تعریف‌شده ایمن کنیم

میتواند نقش یک پروکسی رو بین کاربران و ارائه دهندگان هویت سنجی خارجی رو ایفا کنه
مهمترین ویژگی آن اجازه دادن به ارائه دهندگان احراز هویت خارجی می باشد و شما میتوانید موارد رو در کنسول ادمین آن کنترل کنید

مزایای keycloak
۱-سریع و منعطف:
جامعه ان نشان داده که بسیار سریع با تغییرات دنیای مهندسی خودش رو وفق میده و در کل طراحی keycloak خودش رو برای رویکرد agile آماده و مناسب کرده

۲-نرم افزار منبع باز:
شما میتوانید به تمامی کدهای برنامه بصورت رایگان دسترسی داشته باشید و از آن استفاده نمایید

۳-پشتیبانی و ثابت شده:
جامعه عظیم و پشتیبانی بزرگی از آن حمایت میکند که سریع میتوانند به شما بازخورد دهند

۴-احراز هویت و مجوز دسترسی:
با حداقل ترین تلاش و سریع احراز هویت و افزایش امنیت را به سازمان و برنامه‌های خود میتوانید اضافه کنید

۵-مدیریت سیستم:
حساب های کاربران را به طور یکپارچه مدیریت و داده ها و همچنین جلسات را حفظ می کند

۶-ماژول و مستقل:
می توان از آن به عنوان یک عنصر زیرساخت IT یا به عنوان یک راه حل مستقل استفاده کرد


#microservice
#sso #keycloak


@code_crafters
👍4🔥4
ایندکس‌ها در پایگاه داده‌ها

یکی از مهم‌ترین روش‌ها برای افزایش سرعت دسترسی به داده‌ها در پایگاه داده‌ها، استفاده از ایندکس‌ها است. ایندکس‌ها به پایگاه داده‌ها کمک می‌کنند تا سریع‌تر داده‌ها را جستجو و بازیابی کنند. هرچند که انواع مختلفی از ایندکس‌ها وجود دارد، اما در اینجا به دو نوع اصلی و پرکاربرد ایندکس‌ها، یعنی ایندکس‌های خوشه‌ای و غیرخوشه‌ای، می‌پردازیم.

چگونه پایگاه داده‌ها با ایندکس‌ها کار می‌کنند؟

هنگامی که شما یک ایندکس را روی یک ستون در جدول پایگاه داده اعمال می‌کنید، پایگاه داده از روی آن ستون یک کپی می‌گیرد و آن را در پشت صحنه بر اساس الگوریتم خاص خود (مثلاً B-Tree) مرتب می‌کند. این فرآیند مرتب‌سازی به پایگاه داده اجازه می‌دهد تا زمانی که مقداری را از این ستون جستجو می‌کنید، بتواند سریع‌تر به مقدار مورد نظر دست یابد.

مزایای استفاده از ایندکس‌ها:

- افزایش سرعت جستجو: ایندکس‌ها به طور قابل توجهی سرعت جستجوها را افزایش می‌دهند، به خصوص در جداول بزرگ.
- بهبود عملکرد کوئری‌ها: ایندکس‌ها می‌توانند به بهبود عملکرد کوئری‌های پیچیده کمک کنند، به خصوص کوئری‌هایی که شامل عملیات JOIN و WHERE هستند.

معایب استفاده از ایندکس‌ها:

- افزایش فضای ذخیره‌سازی: هر ایندکس نیاز به فضای ذخیره‌سازی اضافی دارد که می‌تواند حجم پایگاه داده را افزایش دهد.
- کاهش سرعت نوشتن: اضافه کردن، به‌روزرسانی و حذف داده‌ها ممکن است زمان بیشتری ببرد، زیرا ایندکس‌ها باید به‌روزرسانی شوند.

انواع ایندکس‌ها

نکته : تعداد ایندکس ها بیشتر از این دو مورد است ولی این دو مورد از مهم ترین و کاربردی ترین نوع ایندکس هستند.

1. ایندکس‌های خوشه‌ای (Clustered Index):

- ایندکس‌های خوشه‌ای نوعی ایندکس هستند که داده‌های جدول را بر اساس مقادیر ستون ایندکس مرتب می‌کنند. هر جدول تنها می‌تواند یک ایندکس خوشه‌ای داشته باشد زیرا ترتیب فیزیکی ردیف‌ها در جدول را مشخص می‌کند.
- این نوع ایندکس برای ستون‌هایی مناسب است که داده‌های آنها معمولاً مرتب شده‌اند، مانند شناسه کاربری یا تاریخ.
- مزیت اصلی این نوع ایندکس این است که دسترسی به داده‌ها بسیار سریع است، زیرا داده‌ها به صورت فیزیکی مرتب شده‌اند.

2. ایندکس‌های غیرخوشه‌ای (Non-Clustered Index):

- ایندکس‌های غیرخوشه‌ای، ایندکس‌هایی هستند که ترتیب فیزیکی ردیف‌های جدول را تغییر نمی‌دهند. به جای آن، یک ساختار جداگانه برای ذخیره مقادیر ایندکس و اشاره‌گرهایی به مکان‌های داده اصلی در جدول ایجاد می‌کنند.
- این نوع ایندکس‌ها برای ستون‌هایی مناسب است که داده‌های آنها معمولاً نامرتب هستند، مانند ایمیل، نام یا شماره تلفن.
- مزیت اصلی این نوع ایندکس این است که می‌تواند بر روی چندین ستون اعمال شود و انعطاف بیشتری در جستجوهای مختلف فراهم کند.

نتیجه‌گیری

استفاده از ایندکس‌ها یک ابزار قدرتمند برای بهبود عملکرد پایگاه داده‌ها است. با این حال، انتخاب نوع مناسب ایندکس و استفاده هوشمندانه از آنها بسیار مهم است. در حالی که ایندکس‌ها می‌توانند به طور قابل توجهی سرعت دسترسی به داده‌ها را افزایش دهند، اما باید به تعادل بین مزایا و معایب آنها توجه کرد. انتخاب صحیح بین ایندکس‌های خوشه‌ای و غیرخوشه‌ای بر اساس نیازهای خاص سیستم و نوع داده‌ها می‌تواند تأثیر زیادی بر عملکرد کلی پایگاه داده داشته باشد.
#Database
@Code_Crafters
👍3👎3
کارفرما: پروژه سربسته هستش
مدیر فنی:برنامه نویس قبلی کجاست
کارفرما:نمیدونم، از سایتهای مرجع استخدام فریلنسری بود



#fun

@code_crafters
😁7
در ادامه مباحث میکروسرویس رسیدیم به sso و پلتفرم keycloak

با محیط خود keycloak بیشتر آشنا بشیم


ابتدا با دستور زیر پلتفرم رو در داکر بالا میاریم
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -e KEYCLOAK_LOGL_EVEL=debug quay.io/keycloak/keycloak:24.0.3 start-dev

پلتفرم رو بر روی پورت 8080 بالا میاریم و با نام کاربری و پسورد admin وارد کنسول ادمین ان میشویم (در بروزر خود نام هاست خود یا ip رو همراه با پورت وارد کرده (localhost:8080) و به صفحه لاگین وارد میشویم)

بعد ورود به کنسول در سمت چپ نوباری میبینیم که هرکدوم رو بصورت جداگانه بررسی میکنیم

در قسمت بالایی آن یک لیست کشویی میبینیم که مربوط به realm می‌باشد، realm بعنوان یک یک فضای جداگانه برای مدیریت مجموعه‌ای از کاربران و نقش‌ها و برنامه‌ها و تنظیمات امنیتی تعریف میشود، هر realm بطور جداگانه و مستقل از بقیه عمل میکند و میتواند تنظیمات امنیتی و مدیریتی مخصوص به خود را دارد با کلیک کردن بر روی create realm.و دادن یک نام یکتا به آن میتوان یک realm ساخت (ما با نام test14 یک realm میسازیم) و با رجوع به آدرس (localhost:8080/admin/test14/console) میتوان به محیط کنسول یوزر خود وارد شد و با دادن نام‌کاربری و پسورد داخل شد(چون تا کنون یوزری نساخته‌ایم نمیتوان به ان ورود کرد)


پس بریم سراغ قسمت User و با زدن add user شروع به ساخت کنیم، فرم ان کامل مشخص است فیلد username رو وارد میکنیم و create رو میزنیم و بعد ریدایرکت میشیم به داخل محیط تنظمیات این یوزر که ساختیم در قسمت credentials برای این یوزر پسورد میگذاریم و در قسمت assign role به این یوزر نقش‌هایی رو‌ میدیم و با استفاده از filter و جستجو این قسمت میتوانیم دنبال role مد نظر خود بگردیم در قسمت میتونیم دسترسی یوزر رو محدود کنیم

برای دسترسی پیدا کردن به کنسول ادمین در لینک بالا که گفتیم حتما باید رول role_admin رو از زیر مجموعه realm_management رو اضافه کنیم

بعد از اتمام با یوزرنیم و پسورد این کاربر میتوانیم به لینک بالا که مربوط به کنسول realm با نام test14 میباشد دسترسی پیدا کرد(در قسمت رولهای یوزر میتوان دسترسی یوزر رو با realm آن مرتبط و محدود کرد) در قسمت یوزر هم میتوان تمام یوزرهارو دید و هنگام اتصال به پروژه یوزرهامون رو در این قسمت ایجاد میکنیم

اکنون نیاز به یک کلاینت داریم
کلاینت به یک برنامه یا سرویس اشاره دارد که برای احراز هویت و مجوز دسترسی (authentication, authorization) به منابع محافظت شده با keycloak ارتباط برقرار میکند، کلاینت‌ها میتوانند انواع مختلفی از برنامه‌ها باشند، مانند برنامه‌های وب، موبایل و سرویس‌ها بک‌اند باشند

در قسمت client بر روی create client کلیک‌کنید یک نام یکتا به ان دهید نوع بر روی oidc بماند، تیک client authentication رو فعال کنید و گزینه service accounts roles رو اضافه کنید برای کارکرد بهتر مقدار redirects uris رو یک ستاره بزارید و کلاینت رو ذخیره کنید

وارد کلاینتی که ساختید بشی
در تنظمیات کلاینت تمامی موارد رو میبینید و در تب credentials مقدار سکرت رو میبینید و در تب service accounts roles بر روی assign role کلیک کنید و رول‌های مدنظر خودتون رو بهش اضافه کنید دو رول views , manage users دو رول حیاتی هستند که بعدا در کتابخانه‌هامون جهت کار با keycloak لازم داریم

خبر اینکه این پلتفرم اندپوینت داره و با طراحی rest api می‌باشد که داکیومنتش رو در لینک زیر میتونید بخونید(دوستانی که سابقه کاری بالایی دارند اهمیت این موضوع رو بهتر میدونن)
https://www.keycloak.org/docs-api/22.0.1/rest-api/index.html


برای تست و کار کردن با اندپوینت‌ها پنل رو بالا بیارید و موارد ذکر شده در بالا رو پیش ببرید(در قسمت رول‌ها با توجه به اینکه میخواهیم اندپوینت‌هارو تست کنیم تمامی رول‌هارو اعمال کنید)

یک پست من بالا بیارید و یک درخواست با متد post به لینک
reelms/test14/protocol/openid_connect/token
با مقادیر زیر در body ارسال کنید
client_id test14
client_secret در پنل و از کلاینتتون بردارید
grant_type client_credentials

تا توکن دسترسی بهتون برگردونه و با استفاده از این توکن در قسمت authorization که از نوع bearer token هستش به اندپوینت‌ها دسترسی پیدا میکنید


پنل رو بالا بیارید با محیط ان آشنا بشید تا بتونیم اندکی بیشتر به سمت پیاده سازی sso خودمون پیش بریم


#microservice
#sso #kecloak

@code_crafters
👍4
در ادامه مبحث sso و کار با ابزار keycloak و آشنایی با محیط آن میرسیم به این موضوع که چگونه با پایتون با این ابزار کار کنیم


یکی از بهترین کتابخانه‌های اون رو در زیر براتون میزارم

https://pypi.org/project/python-keycloak/

دلیل استفاده از این پکیج جهت کار کردن روی سطح پایینتری از کی‌کلاک جهت ترکیب ان با drf و پیاده سازی کردن اندپوینت‌هایی جهت ساخت ui مخصوص خود و جدا شدن از محیط ui خود کی‌کلاک ،در پست قبلی یاد گرفتیم که چگونه realm, client, user بسازیم که دسترسی داشته باشیم از این داده درون این پکیج هم استفاده کنید جهت کار کردن و اعتبار سنجی

اگر به ارور نوع grant برخوردید ابتدا با کنسول لاگین خود کی‌کلاک ورود کرده و مرحله تغییر پسورد رو پشت سر بگذارید، اگر میخواهید به این قسمت برنخورید هنگام ساخت یوزر زمانیکه به تب credentials میروید و برای یوزرتون پسورد ست میکنید گزینه Temporary رو غیر فعال کنید

لازم بذکر میباشد که پکیج جامع django all auth نیز از کی‌کلاک پشتیبانی میکند، دلیل استفاده من از کتابخانه بالاتر انتخاب شخصی و مناسب با درخواست شرکت می‌باشد و نیاز به کد زدن در سطح پایینتری داشتم با امکان کنترل بیشتر بر روی flow موجود در طراحی سیستم


سعی میکنم یک نمونه پروژه کوچیک بسازم و بالا بیارم تا بتونیم درک سریعی از ترکیب موارد بالا رو باهم داشته باشیم و در گیتهاب پابلیک کنم


#microservice
#sso #keycloak


@code_crafters
به یک نفر جهت مشاوره فنی نرم افزار نیازمندم

یه توضیح کلی بدم
فقط قراره مشاوره بدید(کد نمیزنید و سیستم طراحی نمیکنید) کار زیاد هم نداریم که بگم روزی n ساعت ازتون وقت بگیره، فکر کنید یکسری جلسات ماهیانه با هیات مدیره برگزار میشه و راجب شرکت و پروژه‌هاش حرفایی زده میشه که مالکان پروژه یک شرکت بزرگ هستند، در این جلسات مفاهیمی مطرح میشه بحث‌هایی صورت میگیره، و به شما منتقل میشه موضوعات فنیش فقط و شما این مسایل رو سبک و سنگین میکنید و توضیحات جامع و کارآمد به هیات رییسه میدید، پیشنهادی هم باشه میگید فرض کنید برای یک نفر که درکی از سیستم نرم افزاری نداره راجب سیستم توضیح میدید، من خودم هم کنارتون هستم و بهتون کمک میکنم


انتظارم ازتون چیه؟؟؟
۱- فارغ‌التحصیل رشته مهندسی کامپیوتر باشه (مهندسی نرم افزار یا فناوری اطلاعات یا علوم کامپیوتر) حداقل لیسانس(دیگه جوری نباشه که واحدهای تخصصی رو با نمره ده پاس کرده باشید ازتون کارنامه مدرسه نمیخوام ولی این هم نباشید که راجب سیستم من بهتون توضیحات پایه بدم)

۲- به یک زبان برنامه نویسی حداقل تسلط داشته باشه (قرار نیست کد بزنید ولی حداقل یک زبان مهندسی باشه- js , php و ... بکار نمیاد یک زبان جامع مثه جاوا، پایتون، سی‌‌شارپ، گولنگ و ... باشه بهتره) دوستان فول‌استک کار هم فاصله خودشون رو رعایت کنند

۳- تحلیل و بررسی سیستم بلد باشید(برامون قرار نیست دیتا لایر طراحی کنید یا معماری بنویسید، ولی حداقل بلد باشید کلاس دیاگرام ساده بسازید، یک ‌use case کوچیک درست کنید، برام uml مبتدی طراحی کنید، اگه bpm بلد باشید دوست خوب من هستید نبودید هم اشکالی نداره ،انتظار ifw رو هم ازتون ندارم) دیگه نیایید روی کاغذ طرح بدین حداقل با visio بلد باشید یچیزی درخور بهم بدین، انتظار bizagi , power designer رو هم ازتون ندارم

۴- دیتابیس‌ها رو خوب بشناسید sql و no sql ،دیگه این نباشه تو هر سیستمی بگید پستگرس خوبه و جوابگو، همه این رو بلدن ، حداقل بتونید بر اساس سیستم بگید چرا باید از فلان دیتابیس بهره ببریم

۵- حداقل الگوهای معماری‌های معروف نرم افزار رو بشناسه و بلد باشه (میکروسرویس، لایه‌ای، کلاینت و سرور، ریز هسته و رویداد محور)

۶- نقدپذیر باشه، خوش بیان باشه، متین باشه، خودکنترلگر باشه، شنونده و گوینده خوب باشه، دارای تمرکز بالا باشه اگه اهل کتاب هم باشید دوستای خوبی میشیم

۷- سن بالای ۲۵، اگر هم در تهران باشه که حداقل ماهی یبار بیایید شرکت باهم حرف بزنیم راجب مسائل عالی میشه، در دسترس باشه پیام ندم بهش بعد یک هفته با کبوتر نامه رسان بهم پاسخ بده

۸- بروز باشه و مشتاق یادگیری چیزهای جدید(فقط به سئوی گوگل اکتفا نکنه ،بابت یک‌موضوع کتاب نمیخونه حداقل مقاله بخونه)

۹- تجربه کاری هم داشته باشید(این باور رو هم نداشته باشه که فروشگاه آنلاین تهشه دیگه)دانشجو هم هستید مشکلی نیست چون قرار نیست هر روز بیاید روی گل همدیگه رو ببینیم

در نهایت هم بگم و یادآوری کنم دانشگاه رفته باشه (مهندسی نرم افزار، فناوری اطلاعات، علوم کامپیوتر)یکدفعه دیدید گفتم مدرک دانشگاهی ارائه کنید, دلیل و اهمیتش هم کاملا مشخص هست



کارتون هم از دوماه دیگه شروع میشه ،اگه شرایط رو داشتید و دوست داشتین بهم پیام بدید یکم باهم حرف بزنیم

@behzad_azadi



@code_crafters
🤡5👍3🤣2
خب در ادامه پست های استفاده از ایندکس در جداول دیتابیس قرار در این پست با Multi-Column Indexes اشنا بشیم/

ایندکس‌های چندستونی (Multi-Column Indexes) برای بهبود کارایی جستجو در جداولی که به طور مکرر از چندین ستون در کوئری‌های خود استفاده می‌کنند، بسیار مفید هستند. این نوع ایندکس‌ها بر روی بیش از یک ستون از جدول ایجاد می‌شوند و می‌توانند به طور همزمان ترتیب چند ستون را برای بهبود سرعت جستجو حفظ کنند.

ویژگی‌های ایندکس‌های چندستونی
1. ترتیب ستون‌ها:
   - ترتیب ستون‌هایی که در ایندکس تعریف می‌شوند بسیار مهم است.
   - ایندکس ابتدا بر اساس ستون اول مرتب می‌شود و سپس در داخل هر مقدار ستون اول، بر اساس ستون دوم و به همین ترتیب ادامه می‌یابد.
   - انتخاب ترتیب مناسب ستون‌ها بر اساس الگوهای کوئری معمول، می‌تواند تاثیر زیادی بر کارایی جستجو داشته باشد.

2. بهبود کارایی:
   - ایندکس‌های چندستونی می‌توانند کارایی کوئری‌هایی را که از این ستون‌ها در شرط WHERE، ORDER BY، و GROUP BY استفاده می‌کنند، بهبود بخشند.
   - در کوئری‌هایی که فقط از ستون اول ایندکس استفاده می‌کنند نیز می‌تواند بهبود کارایی ایجاد کند.

3. محدودیت‌ها:
   - ایندکس‌های چندستونی می‌توانند فضای بیشتری را نسبت به ایندکس‌های تک‌ستونی اشغال کنند.
   - به‌روزرسانی‌های جداولی که دارای ایندکس‌های چندستونی هستند می‌توانند زمان‌برتر باشند به دلیل نیاز به بروزرسانی ساختار ایندکس.

مثال‌ها و کد

فرض کنید یک جدول به نام employees داریم که شامل ستون‌های first_name، last_name، و department_id است و می‌خواهیم یک ایندکس چندستونی بر روی ستون‌های last_name و department_id ایجاد کنیم.

ایجاد ایندکس چندستونی
در SQL، ایجاد یک ایندکس چندستونی به شکل زیر است:

CREATE INDEX idx_lastname_department ON employees (last_name, department_id);


این ایندکس ابتدا بر اساس last_name و سپس بر اساس department_id مرتب می‌شود.

استفاده از ایندکس چندستونی در کوئری‌ها

مثال 1: جستجو بر اساس هر دو ستون
SELECT * FROM employees WHERE last_name = 'Doe' AND department_id = 5;

در این کوئری، هر دو ستون last_name و department_id استفاده شده‌اند، بنابراین ایندکس idx_lastname_department به طور کامل بهره‌برداری می‌شود و کارایی جستجو افزایش می‌یابد.

مثال 2: جستجو بر اساس ستون اول
SELECT * FROM employees WHERE last_name = 'Doe';

در این کوئری، تنها ستون last_name استفاده شده است که ستون اول ایندکس است. بنابراین ایندکس هنوز هم می‌تواند کارایی جستجو را بهبود بخشد.

مثال 3: جستجو بر اساس ستون دوم
SELECT * FROM employees WHERE department_id = 5;

در این کوئری، تنها ستون department_id استفاده شده است که ستون دوم ایندکس است. این کوئری نمی‌تواند از ایندکس idx_lastname_department بهره‌برداری کند و به احتمال زیاد از اسکن کامل جدول استفاده خواهد کرد.

به‌روزرسانی و حذف ایندکس
برای حذف یک ایندکس چندستونی:

DROP INDEX idx_lastname_department ON employees;


نکات مهم
1. انتخاب ستون‌ها: ستون‌هایی را انتخاب کنید که در بیشتر کوئری‌ها استفاده می‌شوند و ترتیب آنها را بر اساس بیشترین تاثیر بر کارایی جستجو تعیین کنید.
2. نگهداری و به‌روزرسانی: با افزایش تعداد ایندکس‌ها، عملیات نوشتن (INSERT, UPDATE, DELETE) کندتر می‌شود. به همین دلیل، باید توازن مناسبی بین تعداد ایندکس‌ها و نیازهای جستجو برقرار کرد.
3. تحلیل کارایی: استفاده از ابزارهای تحلیل کارایی (مانند EXPLAIN در SQL) برای بررسی تاثیر ایندکس‌ها بر کوئری‌ها مفید است.

با توجه به این نکات، ایندکس‌های چندستونی می‌توانند به طور قابل توجهی کارایی دیتابیس شما را بهبود بخشند اگر به درستی طراحی و استفاده شوند.


#database
#postgresql
👍41
https://play.google.com/store/apps/details?id=app.hiddify.com


این برنامه رو نصب کنید و در قسمت کامنت‌های این پست دوستان براتون کلید میزارن و اپدیت میکنن

در خصوص هزینه اینترنت هم سیمکارت سامان تل بخرید که هر گیگ حدود ۱۲۰۰ قمیتش هست(انلاین خرید نکنید برخی دوستان خریدن و گویا تحویل نگرفتن)


#vpn #free

@code_crafters
😁1
در ادامه مباحث مربوط به میکروسرویس و sso اینبار با یک پلتفرم جامعتر و بزرگتر با نام openam آشنا میشویم

تعریف OpenAM چیست؟

در واقع OpenAM ( Open Access Management) یک پلتفرم مدیریت هویت و دسترسی (IAM) منبع باز است که توسط ForgeRock ارائه می‌شود. این پلتفرم مجموعه‌ای جامع از قابلیت‌ها را برای مدیریت چرخه عمر هویت، احراز هویت، مجوزها، دسترسی و انطباق ارائه می‌دهد. OpenAM به طور گسترده در سازمان‌های مختلف، از جمله شرکت‌های دولتی، موسسات آموزشی، و ارائه دهندگان خدمات مالی، برای ایمن‌سازی برنامه‌ها و منابع آنلاین آنها استفاده می‌شود.

برخی از ویژگی‌های کلیدی OpenAM عبارتند از:

* مدیریت هویت: شامل ایجاد، مدیریت و حذف کاربران و گروه‌ها، ذخیره‌سازی اطلاعات هویت، و همگام‌سازی با دایرکتوری‌های خارجی.
* احراز هویت: شامل پشتیبانی از انواع مختلف روش‌های احراز هویت، مانند نام کاربری و رمز عبور، احراز هویت دو عاملی (2FA)، و احراز هویت مبتنی بر بیومتریک.
* مجوزها و دسترسی: شامل تعیین اینکه چه کسی می‌تواند به چه منابعی دسترسی داشته باشد و چه عملیاتی را می‌تواند انجام دهد.
* انطباق: شامل پشتیبانی از الزامات انطباق مختلف، مانند HIPAA، PCI DSS و GDPR.
*مبحث SSO (Single Sign-On): به کاربران اجازه می‌دهد تا با یک بار ورود به سیستم به چندین برنامه دسترسی داشته باشند.
*دروازه API: امکان ایمن سازی و مدیریت دسترسی به API ها را فراهم می‌کند.
* تجزیه و تحلیل: گزارش‌ها و بینش‌هایی در مورد فعالیت‌های کاربران و دسترسی به برنامه‌ها ارائه می‌دهد.

پلتفرم OpenAM به صورت زیر قابل استقرار است:

* محلی: در زیرساخت‌های خودتان نصب و اجرا می‌شود.
* ابر: در یک محیط ابری مانند AWS، Azure یا Google Cloud Platform (GCP) میزبانی می‌شود.
* هیبریدی: ترکیبی از استقرار محلی و ابری.

پلتفرم OpenAM برای چه کسانی مناسب است؟

در واقع OpenAM برای سازمان‌هایی که نیاز به یک پلتفرم IAM قدرتمند، انعطاف‌پذیر و مقیاس‌پذیر برای مدیریت هویت، دسترسی و انطباق در برنامه‌ها و منابع آنلاین خود دارند، مناسب است. این پلتفرم به ویژه برای سازمان‌های بزرگ با نیازهای IAM پیچیده مناسب است.


مزایای استفاده از OpenAM:

* امنیت: OpenAM به محافظت از برنامه‌ها و منابع شما در برابر دسترسی غیرمجاز، نقض داده‌ها و سایر تهدیدات امنیتی کمک می‌کند.
* انطباق: OpenAM به شما کمک می‌کند تا با الزامات انطباق مختلف مانند HIPAA، PCI DSS و GDPR مطابقت داشته باشید.
* کارایی: OpenAM می‌تواند فرآیندهای احراز هویت و مجوز را خودکار کند و به شما در صرفه‌جویی در زمان و منابع کمک کند.
* قابلیت انعطاف‌پذیری: OpenAM می‌تواند با انواع مختلف برنامه‌ها، سیستم‌ها و دایرکتوری‌ها ادغام شود.
* مقیاس‌پذیری: OpenAM می‌تواند برای پشتیبانی از تعداد زیادی از کاربران و برنامه‌ها مقیاس‌پذیر باشد.

معایب استفاده از OpenAM:

* پیچیدگی: OpenAM می‌تواند برای نصب، پیکربندی و مدیریت پیچیده باشد.
* هزینه: OpenAM می‌تواند یک پلتفرم گران‌قیمت باشد، به خصوص برای پیاده‌سازی‌های بزرگ.
* نیاز به تخصص: ممکن است برای استفاده موثر از OpenAM به تخصص فنی خاصی نیاز داشته باشید.


#micriservice
#sso #iam #sam
#openam


@code_crafters
5👍2
خب گروه زبان کانال هم راه انداختیم

و مدرس هم یکی از اساتید زبان هستش که از بچه‌های خودمون هستش




لینک گروه "آموزش و یادگیری زبان‌های مورد‌علاقه"
https://t.iss.one/tanda_fav_languages_group
8🤡2👏1
دیلی(daily)، جلسات سرپایی روزانه در اسکرام کلا باید ۱۵ دقیقه برای کل تیم طول بکشه نهایتا هر نفر باید یک دقیقه فشرده سه موضوع رو مطرح کنه، چکار کرده ،چکاری میخواهد انجام بده و چه چالشی داره یا حس میکنه


گویا این دوستمون بجای کل تیم نه، بلکه بجای کل شرکت گزارش داده(خیلی دلش پر بوده از تسک‌ها) این حجم گزارش درواقع داکیومنت سرویس هستش نه گزارش روزانه

#fun

@code_crafters
😁10
در ادامه پست ها راجب استفاده از ایندکس در دیتابیس, در این پست قراره نحوه استفاده از Multi-Column Indexes ها در جنگو ببینیم. همچنین اگه نمیدونید که Multi-Column Indexe چیه و دقیقا چیکار میکنه, اول این پست رو مطالعه کنید.

1. تعریف مدل با ایندکس چندستونی
فرض کنید یک مدل به نام Employee داریم که شامل فیلدهای first_name، last_name، و department_id است. برای ایجاد ایندکس چندستونی بر روی last_name و department_id، می‌توانید از ویژگی Meta در مدل استفاده کنید.


from django.db import models

class Employee(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
department_id = models.IntegerField()

class Meta:
indexes = [
models.Index(fields=['last_name', 'department_id']),
]

def __str__(self):
return f'{self.first_name} {self.last_name}'

در این کد، یک ایندکس چندستونی بر روی last_name و department_id تعریف شده است.



2. استفاده از ایندکس در کوئری‌ها
پس از ایجاد ایندکس، می‌توانید کوئری‌هایی بنویسید که از این ایندکس بهره‌مند شوند. به عنوان مثال:

مثال 1: جستجو بر اساس هر دو ستون


from .models import Employee

employees = Employee.objects.filter(last_name='Doe', department_id=5)

در این کوئری، هر دو ستون last_name و department_id استفاده شده‌اند، بنابراین ایندکس به طور کامل بهره‌برداری می‌شود و کارایی جستجو افزایش می‌یابد.

مثال 2: جستجو بر اساس ستون اول

employees = Employee.objects.filter(last_name='Doe')

در این کوئری، تنها ستون last_name استفاده شده است که ستون اول ایندکس است. بنابراین ایندکس هنوز هم می‌تواند کارایی جستجو را بهبود بخشد.

مثال 3: جستجو بر اساس ستون دوم

employees = Employee.objects.filter(department_id=5)

در این کوئری، تنها ستون department_id استفاده شده است که ستون دوم ایندکس است. این کوئری نمی‌تواند از ایندکس چندستونی بهره‌برداری کند و به احتمال زیاد از اسکن کامل جدول استفاده خواهد کرد.

3. تحلیل کارایی
برای تحلیل کارایی کوئری‌ها و مشاهده اینکه آیا ایندکس‌ها استفاده می‌شوند یا خیر، می‌توانید از ابزارهایی مانند django-debug-toolbar استفاده کنید که اطلاعات کوئری‌ها و ایندکس‌ها را نمایش می‌دهد.

نتیجه‌گیری
با استفاده از ایندکس‌های چندستونی در Django، می‌توانید کارایی جستجوهای پیچیده را بهبود ببخشید. با تعریف درست ایندکس‌ها و استفاده بهینه از آن‌ها در کوئری‌ها، می‌توانید به طور قابل توجهی زمان پاسخ‌دهی دیتابیس را کاهش دهید.

#database
#postgresql


@code_crafters
🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
فروید معتقد بود که ما در حال فرار از رنج‌هایمان هستیم

با این تعبیر زندگی جز رنج چیزی نیست، رنج‌هایی که موجب میشن ما رشد کنیم البته شاید

و اما فلسفه پایان بوکوفسکی گرایانه شاید زیباتر باشد، هرچیزی که تمام شود لذت آن بیشتر است، مانند تحویل یک پروژه، اتمام یک کار،درمان یک درد یا پایان یک زندگی و مرگ


#free

@code_crafters
👍3👎1
یکی از سیاست‌های حکمرانی soa این است که سرویس ‌های ما قابل اجرا بر روی فضاهای ابری (cloud) باشد،این یک الزام است، فضاهای ابری زیاد و متنوعی وجود دارد که شما میتوانید از آنها استفاده کنید اما این بسته به نیاز شما و سرویس‌های شما دارد

در این پست مسائلی مطرح میکنیم که با استفاده از آن تشخیص دهید کدام فضای ابری مناسب سرویس شماست

ابتدا بیایید مختصر در خصوص انواع فضای ابری صحبت کنیم:
ارایه دهنده software as a service (Saas):
هنگامی که از یک محیط SaaS استفاده می کنید،به یک برنامه یا سرویس کامل که در جایی آنلاین میزبانی شده است دسترسی خواهید داشت. شما برنامه‌ها یا خدمات خود را در این ابر مستقر نمی‌کنید،بلکه از آنچه ارائه‌دهنده SaaS ارائه می‌کند استفاده می‌کنید.Google Docs، Salesforce و Office 365 همگی نمونه‌هایی از SaaS هستند

ارائه دهنده platform as a service (PaaS):
-اگر می خواهید برنامه های خود را مستقر کنید، ممکن است از PaaS استفاده کنید.با یک PaaS یک پلت فرم محاسباتی کامل یا پشته نرم افزاری به شما پیشنهاد می شود که می توانید از آن برای ایجاد برنامه ها و خدمات خود استفاده کنید.Google Apps، AWS آمازون،Windows Azure مایکروسافت و بسیاری دیگر این سرویس را ارائه می دهند

ارائه دهنده infrastructure as a service (IaaS):
ارائه دهنده IaaS زیرساخت های محاسباتی مانند منابع CPU، ذخیره سازی داده ها و IO شبکه را فراهم می کند.اغلب PaaS از خدمات ارائه شده توسط IaaS استفاده می کند.ارائه دهندگان IaaS زیادی وجود دارد:Cloud.com، Rackspace، Amazon، و HP به جز چند مورد


با توجه به سیاست‌های soa بهتر است بر روی PaaS تمرکز کنید و با استفاده از پارامترهای زیر و خدماتی که provider به ما می‌دهند انتخاب کنیم:

عملکرد همه ارائه دهندگان ابر عملکرد یکسانی را ارائه نمی دهند.برخی ممکن است فقط منابع محاسباتی را ارائه دهند،در حالی که برخی دیگر یک پشته نرم افزار کامل را ارائه می دهند
وقتی به یک ارائه دهنده ابر احتمالی نگاه می کنید، باید عملکرد مورد نیاز خود را تعیین کنید.آیا به یک پایگاه داده آنلاین،قابلیت ایمیل یا شاید یک سیستم پیام رسانی نیاز دارید؟ سعی کنید ارائه دهنده ای پیدا کنید که تمام این الزامات را پوشش دهد.اگر نتوانستید یکی را پیدا کنید،سعی کنید تعدادی را پیدا کنید که به خوبی با یکدیگر ادغام شوند

پشته نرم افزار همه سرویس ها با استفاده از یک فناوری ایجاد نمی شوند.هنگام انتخاب یک ارائه‌دهنده ابری،به دنبال پشته توسعه‌تان باشید و اگر ویژگی‌های اضافی(مانند ذخیره‌سازی مبتنی بر کلید/مقدار)را ارائه می‌دهد، به دنبال یکی از APIهایی باشید که به زبان شما یک API ارائه می‌کند

قابل حمل بودن داده ها وقتی خدمات خود را در فضای ابری اجرا می کنید،از گزینه های ذخیره سازی ارائه شده توسط ابر استفاده کنید و مطمئن شوید که این ارائه دهنده به شما اجازه می دهد تا داده های خود را به راحتی صادر کنید.اگر اینطور نیست، می توانید به سرعت در یک ارائه دهنده ابر خاص قفل شوید

مقیاس پذیری یکی از مزیت های مهم استفاده از ارائه دهنده ابر این است که وقتی برنامه شما رشد می کند،لازم نیست نگران اضافه کردن منابع اضافی باشید.هنگامی که به دنبال ارائه دهنده ابری هستید، به دنبال ارائه دهنده ای باشید که قابلیت مقیاس پذیری شفاف را ارائه می دهد.اگر منابع مورد نیاز شما افزایش یابد،ارائه‌دهنده ابر باید به طور خودکار بتواند مقیاس را افزایش دهد.اگر منابع مورد نیاز شما کاهش یابد،ارائه دهنده ابر باید مقیاس را کاهش دهد

امنیت داده وقتی از یک ارائه دهنده ابر استفاده می کنید،اطلاعات حساس خود را در ابر ذخیره می کنید.این داده ها حتی ممکن است در کشور دیگری ذخیره شوند.هنگامی که یک ارائه دهنده ابر را انتخاب می کنید،مطمئن شوید که گزینه های امنیت داده ارائه شده توسط این ارائه دهنده با نیازهای شما و مشتریان شما مطابقت دارد

خط‌مشی پشتیبان‌گیری اگر از پلتفرم ابری برای ذخیره‌سازی استفاده می‌کنید،تعیین خط‌مشی‌های پشتیبان‌گیری ارائه‌دهنده ابر مهم است.آیا آنها به طور منظم از داده ها نسخه پشتیبان تهیه می کنند،آیا پایگاه داده ها تکرار می شوند یا اینکه شما کنترل بازیابی نسخه های پشتیبان را خودتان دارید؟

قابلیت مدیریت پلتفرم ابری باید به راحتی توسط شما مدیریت شود.باید یک رابط مدیریتی وجود داشته باشد که با آن بتوانید به راحتی میزان استفاده از منابع خدمات خود را مشاهده کنید و عملکردهای اضافی اضافه کنید.همچنین باید بتوانید به راحتی سوابق ثبت و ممیزی برنامه خود را مشاهده کنید

هزینه همیشه یک عامل مهم است.ببینید برای خدمات ارائه شده چه چیزی باید پرداخت کنید.آیا حداقل قیمتی وجود دارد که باید هر ماه بپردازید؟آیا وقتی از منابع زیادی استفاده می کنید، میانگین قیمت شما کاهش می یابد؟

#microservice
#soa

@code_crafters
👍5👏1
100X Scaling_ How Figma Scaled its Databases.pdf
3.5 MB
#bytebytego #pro #database #scaling

100X Scaling
How Figma Scaled its Databases
👍5