پایتون فارسی
رفتن به کانال در Telegram
233
مشترکین
+124 ساعت
+37 روز
+1430 روز
آرشیو پست ها
233
خب سلام دوباره در ادامه مجموعه پست های دیتابیس تو این یکی قراره با معماری Vitess اشنا بشیم و متوجه بشیم یوتوب چگونه 2.49 میلیارد کاربر خودش رو با MySQL هندل میکنه.
توجه این پست بر اساس تحقیق هستش و ممکنه با پیادهسازی واقعی فرق داشته باشه.
روزی روزگاری، سه نفر که تو PayPal کار میکردن، تصمیم گرفتن یه سایت دوستیابی درست کنن. اما مدل کسبوکارشون شکست خورد. برای همین ایدهشون رو عوض کردن و یه سایت اشتراکگذاری ویدئو درست کردن و اسمش رو گذاشتن یوتیوب.
اونا عناوین ویدئوها، توضیحات و اطلاعات کاربران رو تو MySQL ذخیره کردن. وقتی کاربرهای بیشتری به سایت پیوستن، اونا MySQL رو به حالت رهبر-دنبالکننده (leader-follower replication topology) تنظیم کردن تا بتونن بهتر مقیاسپذیری کنن. اما تکرار در MySQL تکنخی (single-threaded) است. بنابراین دنبالکنندهها نمیتونستن در عملیات نوشتن شدید به رهبر برسند و دادههای جدید رو بهروز کنن. با این حال، نرخ رشدشون خیلی زیاد بود و به یک میلیارد کاربر رسیدن و به دومین سایت پربازدید در جهان تبدیل شدن.
بنابراین با اضافه کردن یه حافظه نهان (cache) مقیاسپذیری کردن و همه رویدادها رو از لاگ باینری MySQL (binary log) بارگذاری کردن. این یعنی تکرار به حافظه وابسته شد و سرعت بیشتری پیدا کرد. اگرچه این کار به طور موقت مشکل مقیاسپذیری اونا رو حل کرد، مشکلات جدیدی به وجود اومد.
در اینجا به برخی از اونا اشاره میکنم:
1. پارتیشنبندی (Sharding):
اولین کاری که باید کرد این که MySQL باید پارتیشنبندی بشه تا نیازهای ذخیرهسازی رو مدیریت کنه. اما بعد از پارتیشنبندی، معاملات (transactions) و پیوستن جداول (joins) سخت میشه. بنابراین منطق برنامه (application logic) باید این رو مدیریت کنه. این یعنی منطق برنامه باید بفهمه که کدوم پارتیشنها رو باید پرسوجو کنه و این باعث افزایش احتمال زمان خرابی (downtime) میشه.
2. عملکرد (Performance):
و(leader-follower replication topology) باعث میشه که دادههای قدیمی از دنبالکنندهها خونده بشه. بنابراین منطق برنامه باید خوندن دادهها رو به رهبر هدایت کنه اگر دادههای جدید لازم باشه. و این نیاز به پیادهسازی منطق اضافی داره.
3. حفاظت (Protection):
ریسک اینکه برخی پرسوجوها خیلی طول بکشه تا دادهها رو برگردونن وجود داره. همچنین تعداد زیادی از اتصالات MySQL به طور همزمان میتونه مشکلساز بشه و ممکنه دیتابیس رو از کار بندازه.
اونا میخواستن یه لایه انتزاعی روی MySQL برای سادگی و مقیاسپذیری ایجاد کنند. بنابراین Vitess رو ساختن. در اینجا نحوه ارائه مقیاسپذیری بالا توسط Vitess رو توضیح میدم:
1. تعامل با پایگاه داده:(Interacting with Database)
اونا یه سرور جانبی (sidecar server) جلو هر نمونه MySQL نصب کردن و اسمش رو گذاشتند VTTablet.
این سرور جانبی به اونا اجازه میداد:
- کنترل سرور MySQL و مدیریت پشتیبانگیری از پایگاه داده
- بازنویسی کوئریهای سنگین با اضافه کردن محدودیت (limit clause)
- کش کردن دادههای پر دسترس برای جلوگیری از مشکل Thundering Herd
2. مسیریابی کوئریها(Routing SQL Queries):
یه سرور پراکسی بدون حالت (stateless proxy server) برای مسیریابی کوئریها تنظیم کردند و اسمش رو گذاشتند VTGate.
این سرور پراکسی بهشون اجازه میداد:
- پیدا کردن VTTablet صحیح برای مسیریابی کوئری بر اساس اسکیما و طرح پارتیشنبندی
- پایین نگه داشتن تعداد اتصالات MySQL از طریق تجمیع اتصالات (connection pooling)
- صحبت با لایه کاربردی به پروتکل MySQL
- عمل کردن مانند یه سرور MySQL یکپارچه برای سادگی
- محدود کردن تعداد معاملات در یک زمان برای عملکرد بهتر
همچنین برای مقیاسپذیری بیشتر، سرورهای VTGate متعددی راهاندازی کردند.
3. اطلاعات حالت:
تصویر چهارم در کامنت ها
یه پایگاه داده توزیعشده کلید-مقدار (distributed key-value database) راهاندازی کردند تا اطلاعات مربوط به اسکیما، طرحهای پارتیشنبندی و نقشها رو ذخیره کنه.
این پایگاه داده همچنین روابط بین پایگاههای داده مثل رهبر و دنبالکنندهها رو مدیریت میکنه.
در ادمه از Zookeeper برای پیادهسازی این پایگاه داده کلید-مقدار استفاده کرندند.
علاوه بر این، این دادهها رو در VTGate برای عملکرد بهتر کش میکردند.
برای بهروزرسانی پایگاه داده کلید-مقدار، یه سرور HTTP راهاندازی کردند و اسمش رو گذاشتند VTctld. این سرور فهرست کامل سرورها و روابطشون رو میگیره و سپس پایگاه داده کلید-مقدار رو بهروزرسانی میکنه.
#database
#postgresql
233
یک بار دیگه این مطلب رو بخونید و لپ مطلب رو بگیرید
پروژه های بر بستر تلگرام بعد از نات قطعا قارچ وار رشد میکنن و همه شون هم قرار نیست به جایی برسند
فرصت های که بعنوان یه برنامه نویس پیش اومده رو بگیرید و روی تخصص خودتون متمرکز بشید
و این پروژه ها رو هم بعنوان یه گیم ببینید که ممکنه بشه ممکنه نشه
جوری نشه که بخاطر این جوی که شکل گرفته از هدف اصلی دور بشید و تمام وقت و تمرکز رو روی اینا بذارید
هیچ چیزی تو این دنیا مجانی نیست
233
سلام به همه دو تا پروژه جدید رو تلگرام لانچ شدن شبیه به نات کوین و تپ سواپ
اگه علاقه به این موضوعات دارید میتونید تست کنید شاید مثل نات کوین قیمت گرفتن
اولی بزرگترین کانال تلگرام رو دارن با بیست میلیون کاربر
دومی هم در حال حاضر ده میلیون عضو داره
بازی همستر با کانال بیست میلیونی
https://t.me/hamsTer_kombat_bot/start?startapp=kentId26472764
--------------------------------------------------------
بازی یس کوین که الان ده میلیون کاربر داره
https://t.me/theYescoin_bot/Yescoin?startapp=TmPQnI
233
⌨️ مایکروسافت از ویژوال استودیو
0️⃣1️⃣🔤7️⃣1️⃣ با گیتهاب کوپایلوت رونمایی کرد.
⌨️ ویژوال استودیو 17.10 با پنجره بهبودیافته Attach to Process، ابزارهایی برای دیباگکردن آفلاین، افزونه کوپایلوت مایکروسافت 365، رابط بهتر در بخش تنظیمات و غیره عرضه میشود.
📱در نسخه جدید ویژوال استودیو تجربه دسترسی به تنظیمات یکپارچه شده است. رابط پیشرفته این بخش براساس JSON به شخصیسازی آسانتر IDE کمک میکند و به شما اجازه میدهد راحتتر محیط را پیکربندی کنید.
⌨️ کارکردهای مربوط به دیباگکردن و رفع مشکل برنامهها بهبود یافته است. در بخش توسعه با زبان برنامهنویسی ++C و توسعه بازیها نیز شاهد پیشرفتهایی هستیم که پیشبرد پروژه را سادهتر میکند.
⌨️ با ویژوال استودیو 17.10 میتوانید کدها را به کمک هوش مصنوعی بازبینی و عیبیابی کنید تا نهتنها کیفیت کد را افزایش دهید، بلکه بینش عمیقتری درباره عملکرد اپلیکیشن خود پیدا کنید.
◽️مایکروسافت میگوید این نسخه جدید پشتیبانی از SQL Server Data Tools یا SSDT را به کامپیوترهای مبتنی بر معماری Arm64 میآورد.
#SADRA_K
🐍 @persians_python
233
سایتscr که فانکشن های تبدیل زمان میلادی به زمان شمسی رو بهتون میده
یه فانکشن پایتونی رو نوشته که سه تا آرگومان بهش داده میشه سال و ماه و روز میلادی و خروجی یه لیست برمیگردونه که سال و ماه و روز شمسی رو میده و میتونید تو پروژه هاتون استفاده کنید ازش بدون نیاز به پکیج خاصی
https://jdf.scr.ir/jdf/python
233
سلام وقت همگی بخیر
با توجه به تعطیلی روز پنجشنبه در خراسان رضوی کلیه کلاس های مجتمع فنی روز پنجشنبه
تعطیل هست
233
اینم نقد شدن نات کوین از شروع این پروژه چندین مطلب راجع بهش نوشتم امیدوارم ازش استفاده کرده باشید
233
اطلاعیه
امروز چهارشنبه بعدظهر کلاس دوره جنگو ساعت شش تا هشت کنسله
دقت کنید چهار تا شش برقراره کلاس شش تا هشت بدلیل مشکل شخصی کلاس برگزار نمیشه
باز دوباره تاکید میکنم چهار تا شش برگزار میشه شش تا هشت برگزار نمیشه
233
اپلیکیشن Beeper که سر کلاس راجع بهش صحبت کردم ، این اپ میتونه با تمام پیام رسان های شما پل بزنه و براحتی هم به واتس اپ تلگرام اینستاگرام و بقیه اپ ها پیام بفرستید و دریافت کنید بدون هیچ فیلتری یا نیاز به پروکسی و فیلترشکن
اپ رو نصب کنید واردش که شدید صفحه اول پل ها رو نشون میده که رو هر کدوم کلیک کنید فعال میشه فقط زمان اتصال به مثلا تلگرام یه کد تایید به حساب تلگرام میفرسته که باید داخل اپ جایی که خودش مشخص میکنه وارد کنید تا متصل به تلگرام بشه و همینجوری به بقیه
همزمان همه اپ ها رو در یک اپ بدون فیلتر خواهید داشت
اینستاگرام قسمت دایرکت براتون اضافه میشه
https://play.google.com/store/apps/details?id=com.beeper.android
#M_Sh
@persians_python
233
Repost from پایتون فارسی
دوره پایتون روز سه شنبه امتحان رو یادتون نره سوالی که امروز سر کلاس حل شد رو سر کلاس انجام میدید جزوه بسته هم هست
233
بچه ها ویدیوهای آموزشی الگوریتم که آقا سجاد اماده کرده رو حتما ببینید به شدت توی فهم ساختارهای برنامه نویسی کمک میکنه
233
در ادامه پست قبلی:
Indexing:
ایندکس ها برای بهبود عملکرد عملیات پایگاه داده، به ویژه برای مجموعه داده های بزرگ، ضروری هستند.
به عنوان مثال، فرض کنید شما یک جدول کاربران دارید و میخواهید بر اساس نام آنها جستجو کنید. بدون ایندکس، پایگاه داده باید هر رکورد را از ابتدا تا انتها بررسی کند تا نام مورد نظر را پیدا کند. اما با ایجاد یک ایندکس بر روی فیلد نام، پایگاه داده میتواند به سرعت به رکوردهای مرتبط با نام مورد نظر دسترسی پیدا کند.
Example:
class User(models.Model):
username = models.CharField(max_length=100, db_index=True)
email = models.CharField(max_length=100)
class Meta:
indexes = [
models.Index(fields=['username'], name='username_idx'),
models.Index(fields=['email'], name='email_idx')
]
Overriding Model Methods:
وقتی در Django یک مدل ایجاد میکنید، میتوانید رفتارهای خاصی را برای عملیاتهای مختلف مدل، مانند ذخیرهسازی یا حذف، سفارشیسازی کنید. این کار به شما این امکان را میدهد که قبل یا بعد از انجام یک عملیات، کارهای خاصی انجام دهید. شما میتوانید عملیات save , delete ,.... رو بازنویسی کنید.
Example:
class MyModel(models.Model):
name = models.CharField(max_length=100)
def save(self, *args, **kwargs):
self.name = self.name.upper()
super().save(*args, **kwargs)
در این مثال، هر زمان که یک نمونه از MyModel ذخیره میشود، مقدار فیلد name به حروف بزرگ تبدیل میشود قبل از ذخیرهسازی و سپس عملیات ذخیرهسازی انجام میشود.
Soft Deletion:
استفاده از Soft Deletion به شما این امکان را میدهد که آیتمها را به عنوان حذف شده علامتگذاری کنید، اما در واقع آنها را از پایگاه داده حذف نکنید. به این تکنیک "حذف نرم" یا "حذف موقت" نیز گفته میشود. این روش برای نگهداری تاریخچه دادهها، امکان بازگردانی آیتمهای حذف شده و همچنین حفظ ارتباطات بین آیتمهای مختلف مفید است.
Example:
class SoftDeleteModel(models.Model):
is_deleted = models.BooleanField(default=False)
def delete(self, *args, **kwargs):
self.is_deleted = True
self.save()
هر یک از این تکنیک ها مجموعه ای از مزایای خاص خود را ارائه می دهد و می تواند به طور قابل توجهی بر کارایی و عملکرد پروژه های شما تأثیر بگذارد. با اجرای این استراتژیها، میتوانید از قابلیتهای قدرتمند مدلسازی جنگو برای ساخت برنامههای کاربردی وب قویتر و مقیاسپذیرتر بهره ببرید.
منبع
#djnago
#model
#mahyar233
دوره پایتون روز سه شنبه امتحان رو یادتون نره سوالی که امروز سر کلاس حل شد رو سر کلاس انجام میدید جزوه بسته هم هست
233
در این پست نکات و ترفند های پیشرفته مدل های جنگو رو بررسی خواهیم کرد.🥸
از جمله: ...indexing, custom managers, inheritance
ارث بری مدل ها به شما امکان می دهد یک مدل پایه با اطلاعات رایج ایجاد کنید و آن را در مدل های دیگر گسترش دهید. جنگو از سه نوع model inheritance پشتیبانی می کند:
abstract base classes, multi-table inheritance, and proxy models
Using Abstract Models:
روشی فوقالعاده برای جمعبندی اطلاعات و رفتار مشترک هستند. برای یک abstract model هیچ جدولی در دیتابیس نشان داده نمی شود. در عوض، فیلدها و متدهای آن توسط زیر کلاسها به ارث میرسند.
Example:
class BaseProfile(models.Model):
bio = models.TextField()
avatar = models.ImageField(upload_to='avatars/')
class Meta:
abstract = True
class StudentProfile(BaseProfile):
graduation_year = models.IntegerField()
class TeacherProfile(BaseProfile):
office = models.CharField(max_length=100)
در اینجا BaseProfile مانند یک الگو عمل میکند.StudentProfile, TeacherProfile هر دو دارای فیلد های bio , avatar خواهند بود اما هر کدام در جدول های پایگاه داده خودشان ذخیره میشوند.
Custom Managers :
در جنگو Custom Managers به شما این امکان را می دهند که عملکردهای سطح جدول را به مدل های جنگو خود اضافه کنید. آنها را می توان برای کپسوله کردن و عملیات های crud پیچیده و ارائه یک API تمیزتر برای مدل استفاده کرد.
Example:
class ActiveProfileManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(deleted=False)
class Profile(models.Model):
name = models.CharField(max_length=100)
deleted = models.BooleanField(default=False)
objects = models.Manager() # The default manager.
active_objects = ActiveProfileManager() # Our custom manager.
# Usage:
active_profiles = Profile.active_objects.all()
این custom manager تمامی query های شمارو بر اساس "deleted" فیلتر میکند.
Models Migrations:
مدیریت Migrations مدلها
در جنگو migrations به شما امکان میدهند تا طی زمان، طرح پایگاه داده خود را تکامل دهید. مدیریت مناسب migrations ها برای حفظ یک پروژه سالم بسیار حیاتی است.
توصیهها:
برنامهریزی migrations خود: سعی کنید هنگام امکانپذیر بودن، مهاجرتها را ترکیب کنید و آنها را به کنترل نسخه منتقل کنید.
تست migrations: همیشه migrations را به صورت محلی و در محیط استیجینگ تست کنید، قبل از اعمال آنها در محیط تولید.
استفاده از دستور makemigrations برای تولید فایلهای migrations
استفاده از دستور migrate برای اعمال migrations ها
استفاده از دستور sqlmigrate برای پیشنمایش دستور sql
Proxy Models:
مدلهای پروکسی برای تغییر رفتار یک مدل، مانند defualt ordering یا custom manager بدون ایجاد جدول پایگاه داده جدید استفاده میشوند.
Example:
class OrderedProfile(Profile):
class Meta:
proxy = True
ordering = ['name']
# Usage:
ordered_profiles = OrderedProfile.objects.all()
این پروکسی مدل تمامی profile هارا بر اساس نام نشان میدهد.
Multi-table Inheritance:
این نوع وراثت زمانی استفاده می شود که هر مدل در سلسله مراتب به تنهایی یک موجودیت کامل در نظر گرفته شود که به طور بالقوه به جدول پایگاه داده دیگری مرتبط است.به زبان ساده هر مدل به تنهایی میتواند در یک جدول جداگانه در پایگاه داده نمایش داده شود، به جای اینکه همه اطلاعات در یک جدول واحد ذخیره شود.
class Place(models.Model):
name = models.CharField(max_length=50)
class Restaurant(Place):
serves_pizza = models.BooleanField(default=False)
مدل Restaurant از مدل Place ارثبری میکند. این بدان معنی است که همه فیلدهای Place به صورت اتوماتیک به Restaurant ارث میبرده شده و Restaurant از همه ویژگیهای Place استفاده میکند.
این الگو به شما امکان میدهد که یک مدل (در اینجا Restaurant) را برای ارثبری از ویژگیها و رفتارهای یک مدل دیگر (در اینجا Place) استفاده کنید، در حالی که همچنان میتوانید به آن فیلدها و ویژگیهای جدیدی را اضافه کنید.
ادامه مطالب در پست بعد
#djnago
#django
#mahyar233
در این پست تمایز اغلب گیج کننده بین function و method هارو پایتون را بررسی خواهیم کرد. هر دو بلوک های اساسی در پایتون هستند اما اهداف کمی تفاوت دارد. ما آنها را در کنار هم در قالب جدول با هم مقایسه خواهیم کرد و نمونه های کد واقعی را برای نشان دادن نحوه استفاده از هر کدام ارائه می دهیم. چه مبتدی باشید و چه به دنبال تقویت مهارت های پایتون خود باشید، این تفکیک دقیق به شما درک روشنی از زمان و نحوه استفاده موثر از function ها و method ها می دهد.
تابع(functios)در پایتون چیست؟ در پایتون، یک تابع یک بلوک از کد است که برای انجام یک کار خاص طراحی شده است. توابع به تقسیم برنامه ما به قطعات کوچکتر و ماژولار کمک می کنند. با ایجاد برنامه های پیچیده تر، توابع را می توان مجدداً مورد استفاده قرار داد و کد شما را سازماندهی و مدیریت کرد. مثالی از یک تابع:
def greet(name):
return f"Hello, {name}!"
print(greet("ali")) # Output: Hello, ali!
متد در پایتون چیست؟
متد، به عکس تابع، یک تابع است که به یک شیء مرتبط است. در پایتون، متدها مستقل نیستند و باید بر روی یک شیء یا داخل یک کلاس فراخوانی شوند. متدها به طور ضمنی از یک شیء استفاده میکنند که برای آن فراخوانی شدهاند.
برای درک بهتر به مثال زیر توجه کنید.
class Greeter:
def __init__(self, name):
self.name = name
def greet(self):
return f"Hello, {self.name}!"
g = Greeter("ali")
print(g.greet()) # Output: Hello, ali!
در اینجا، greet یک متد از کلاس Greeter است و بر روی نمونه g از آن کلاس فراخوانی میشود.
در ادامه چند مثال عملی رو باهم بررسی میکنیم.
Function:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # Output: 120
در اینجا یک تابع ساده برای به دست اوردن فاکتوریل یک عدد داریم.(5!)
Method:
class Car:
def __init__(self, make, model):
self.make = make
self.model = model
def description(self):
return f"{self.make} {self.model}"
my_car = Car("Toyota", "Corolla")
print(my_car.description()) # Output: Toyota Corolla
در اینجا تابع description یک متود است که جزئیات مربوط به یک نمونه خودرو رو نشون میده.
درک تمایز بین توابع و متودها در پایتون برای نوشتن کد واضح و موثر بسیار مهم است. توابع ماژولار بودن و قابلیت استفاده مجدد را ارائه می دهند، در حالی که متود ها ما را قادر می سازند تا رفتارهای درون اشیاء را با رعایت اصول برنامه نویسی شی گرا محصور کنیم. اینکه یک تابع یا یک روش را انتخاب کنید تا حد زیادی به نیازهای خاص برنامه و ترجیحات طراحی شما بستگی دارد. با درک این مفاهیم، می توانید از انعطاف پذیری و استحکام پایتون در پروژه های برنامه نویسی خود استفاده کنید و کد خود را سازماندهی و پویا تر کنید.
#mahyar233
Splash Pro AI
#هوش_مصنوعی برای ایجاد آهنگ از متن
این سرویس که از هوش مصنوعی پشتیبانی میکند، دری را به روی دنیای خلاقیت موسیقی باز میکند و به شما امکان میدهد حتی بدون دانش عمیق موسیقی، آهنگهای شخصی ایجاد کنید.
@persians_python
