Forwarded from Ninja Learn | نینجا لرن
💎 استفاده از PostgreSQL با Django 💎
امروز میخوایم درباره PostgreSQL و اینکه چرا این دیتابیس رابطهای با Django فوقالعاده مچ میشه، صحبت کنیم. همچنین چندتا از فیچرهای خاصی که جنگو برای این دیتابیس داره رو معرفی میکنیم
چرا PostgreSQL؟ 🤔
خب PostgreSQL یه دیتابیس رابطهای قدرتمنده که خیلیها بهش میگن "Postgres". این دیتابیس اوپن سورس، خیلی خوب با Django هماهنگ میشه و خیلی امکانات و قابلیتهای پیشرفتهای رو ارائه میده که وقتی با جنگو کار میکنی حسابی به درد میخوره. از جمله پشتیبانی از JSONB، قفلهای پیچیده، پارتیشنبندی دادهها و ... 😍
چطوری از PostgreSQL توی Django استفاده کنیم؟ 🛠️
1⃣ اول از همه، باید مطمئن شی که PostgreSQL رو نصب داری.
2⃣ بعدش توی پروژه جنگویی، توی فایل settings.py باید دیتابیس رو به Postgres وصل کنی. یه همچین چیزی:
فیچرهای خاص Django برای PostgreSQL 📦
1⃣ مدلهای JSONField 📄
با استفاده از Postgres توی Django، میتونی از فیلد JSONField استفاده کنی. این فیلد بهت اجازه میده که دادههای JSON رو بهراحتی توی دیتابیس ذخیره کنی و بعداً کوئریهای خفن روشون بزنی! دیگه نیازی نیست همیشه ساختار دادهت فقط رابطهای باشه.
2⃣ فیلد ArrayField 🔢
اگه یه لیست یا آرایه داری و میخوای اون رو مستقیم توی دیتابیس ذخیره کنی، ArrayField بهترین انتخابه. با این فیلد، میتونی یه لیست از مقادیر (مثلاً یه سری عدد یا استرینگ) رو توی یه ستون ذخیره کنی.
خب HStore یه قابلیت خاص توی Postgresه که بهت اجازه میده دادههای کلید-مقدار (key-value) رو توی دیتابیس ذخیره کنی. Django از این فیلد پشتیبانی میکنه و باهاش میتونی دادههایی شبیه به دیکشنری رو ذخیره کنی.
این فیلد بهت اجازه میده که رِنجها رو توی دیتابیس ذخیره کنی. مثلاً میخوای یه بازه تاریخی یا عددی رو نگهداری، این فیلد دقیقاً به درد همون کار میخوره.
خب Postgres قابلیت جستجوی متنی پیشرفته داره و Django هم از این قابلیت پشتیبانی میکنه. با استفاده از این فیچر میتونی بهصورت سریع و بهینه توی متنها جستجو کنی.
استفاده از PostgreSQL توی Django یه انتخاب خیلی خوبه، چون هم دیتابیس قویایه و هم فیچرهای اختصاصی زیادی برای جنگو داره که میتونه کارتو سریعتر و راحتتر کنه. از ذخیره JSON گرفته تا جستجوی متنی، Postgres و Django یه ترکیب طلایین
امیدوارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم درباره PostgreSQL و اینکه چرا این دیتابیس رابطهای با Django فوقالعاده مچ میشه، صحبت کنیم. همچنین چندتا از فیچرهای خاصی که جنگو برای این دیتابیس داره رو معرفی میکنیم
چرا PostgreSQL؟ 🤔
خب PostgreSQL یه دیتابیس رابطهای قدرتمنده که خیلیها بهش میگن "Postgres". این دیتابیس اوپن سورس، خیلی خوب با Django هماهنگ میشه و خیلی امکانات و قابلیتهای پیشرفتهای رو ارائه میده که وقتی با جنگو کار میکنی حسابی به درد میخوره. از جمله پشتیبانی از JSONB، قفلهای پیچیده، پارتیشنبندی دادهها و ... 😍
چطوری از PostgreSQL توی Django استفاده کنیم؟ 🛠️
1⃣ اول از همه، باید مطمئن شی که PostgreSQL رو نصب داری.
2⃣ بعدش توی پروژه جنگویی، توی فایل settings.py باید دیتابیس رو به Postgres وصل کنی. یه همچین چیزی:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'localhost',
'PORT': '5432',
}
}
حالا میتونی از قابلیتهای خفن Postgres استفاده کنی و دیتابیس پروژهت رو به یه سطح بالاتر ببری! 🚀فیچرهای خاص Django برای PostgreSQL 📦
1⃣ مدلهای JSONField 📄
با استفاده از Postgres توی Django، میتونی از فیلد JSONField استفاده کنی. این فیلد بهت اجازه میده که دادههای JSON رو بهراحتی توی دیتابیس ذخیره کنی و بعداً کوئریهای خفن روشون بزنی! دیگه نیازی نیست همیشه ساختار دادهت فقط رابطهای باشه.
from django.db import models
class MyModel(models.Model):
data = models.JSONField()
2⃣ فیلد ArrayField 🔢
اگه یه لیست یا آرایه داری و میخوای اون رو مستقیم توی دیتابیس ذخیره کنی، ArrayField بهترین انتخابه. با این فیلد، میتونی یه لیست از مقادیر (مثلاً یه سری عدد یا استرینگ) رو توی یه ستون ذخیره کنی.
from django.contrib.postgres.fields import ArrayField3⃣ فیلد HStore 🗂️
from django.db import models
class MyModel(models.Model):
tags = ArrayField(models.CharField(max_length=100), blank=True)
خب HStore یه قابلیت خاص توی Postgresه که بهت اجازه میده دادههای کلید-مقدار (key-value) رو توی دیتابیس ذخیره کنی. Django از این فیلد پشتیبانی میکنه و باهاش میتونی دادههایی شبیه به دیکشنری رو ذخیره کنی.
from django.contrib.postgres.fields import HStoreField4⃣ فیلد Range 📏
from django.db import models
class MyModel(models.Model):
attributes = HStoreField()
این فیلد بهت اجازه میده که رِنجها رو توی دیتابیس ذخیره کنی. مثلاً میخوای یه بازه تاریخی یا عددی رو نگهداری، این فیلد دقیقاً به درد همون کار میخوره.
from django.contrib.postgres.fields import DateRangeField5⃣ و در اخر Full-Text Search 🔍
from django.db import models
class MyModel(models.Model):
date_range = DateRangeField()
خب Postgres قابلیت جستجوی متنی پیشرفته داره و Django هم از این قابلیت پشتیبانی میکنه. با استفاده از این فیچر میتونی بهصورت سریع و بهینه توی متنها جستجو کنی.
from django.contrib.postgres.search import SearchVectorجمعبندی 🎯
from .models import MyModel
MyModel.objects.annotate(search=SearchVector('title', 'description')).filter(search='keyword')
استفاده از PostgreSQL توی Django یه انتخاب خیلی خوبه، چون هم دیتابیس قویایه و هم فیچرهای اختصاصی زیادی برای جنگو داره که میتونه کارتو سریعتر و راحتتر کنه. از ذخیره JSON گرفته تا جستجوی متنی، Postgres و Django یه ترکیب طلایین
#django #postgressql #postgres
Forwarded from Gopher Academy
🔵 عنوان مقاله
How to Implement the Outbox Pattern in Go and Postgres
🟢 خلاصه مقاله:
** این مقاله توضیح میدهد چگونه با الگوی Outbox در کنار Go و Postgres، مشکل دونوشتن را حل کنیم و ارسال رویدادها را قابلاعتماد کنیم. ایده اصلی این است که در یک تراکنش واحد، هم تغییرات دامنه و هم رکورد مربوط به رویداد در جدول outbox ذخیره شود تا یا هر دو باهم انجام شوند یا هیچکدام. سپس یک پردازشگر پسزمینه رکوردهای معوق را با SELECT … FOR UPDATE SKIP LOCKED برداشته، آنها را به سامانهای مثل Kafka یا RabbitMQ یا یک وبهوک ارسال میکند و وضعیتشان را به processed تغییر میدهد.
نکات کلیدی پیادهسازی شامل: طراحی جدول outbox با فیلدهایی مانند type، payload (معمولاً JSON)، status، retry_count و زمانها؛ پوشش هر دو عملیات (نوشتن دامنه و درج outbox) در یک تراکنش؛ پیادهسازی worker در Go برای برداشت دستهای، ارسال، ثبت موفقیت/خطا و بازآزمایی با backoff؛ تکیه بر تحویل حداقل-یکبار همراه با مصرفکنندههای idempotent برای مدیریت تکرار؛ و پایش شاخصهایی مثل تأخیر برداشت و نرخ شکست. برای بهینگی عملیاتی، پاکسازی دورهای رکوردهای پردازششده، ایندکسگذاری مناسب، رسیدگی به پیامهای مشکلدار (dead-letter) و حفظ ترتیب رویدادها در سطح aggregate ضروری است. ترکیب polling با LISTEN/NOTIFY در Postgres میتواند زمان واکنش را بهتر کند. نتیجه، راهکاری ساده و مقیاسپذیر است که بدون تراکنشهای توزیعشده، قابلیت اتکا را در معماری رویدادمحور فراهم میکند.
#OutboxPattern #Go #Postgres #Microservices #EventDriven #TransactionalOutbox #Messaging #Reliability
🟣لینک مقاله:
https://golangweekly.com/link/174422/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How to Implement the Outbox Pattern in Go and Postgres
🟢 خلاصه مقاله:
** این مقاله توضیح میدهد چگونه با الگوی Outbox در کنار Go و Postgres، مشکل دونوشتن را حل کنیم و ارسال رویدادها را قابلاعتماد کنیم. ایده اصلی این است که در یک تراکنش واحد، هم تغییرات دامنه و هم رکورد مربوط به رویداد در جدول outbox ذخیره شود تا یا هر دو باهم انجام شوند یا هیچکدام. سپس یک پردازشگر پسزمینه رکوردهای معوق را با SELECT … FOR UPDATE SKIP LOCKED برداشته، آنها را به سامانهای مثل Kafka یا RabbitMQ یا یک وبهوک ارسال میکند و وضعیتشان را به processed تغییر میدهد.
نکات کلیدی پیادهسازی شامل: طراحی جدول outbox با فیلدهایی مانند type، payload (معمولاً JSON)، status، retry_count و زمانها؛ پوشش هر دو عملیات (نوشتن دامنه و درج outbox) در یک تراکنش؛ پیادهسازی worker در Go برای برداشت دستهای، ارسال، ثبت موفقیت/خطا و بازآزمایی با backoff؛ تکیه بر تحویل حداقل-یکبار همراه با مصرفکنندههای idempotent برای مدیریت تکرار؛ و پایش شاخصهایی مثل تأخیر برداشت و نرخ شکست. برای بهینگی عملیاتی، پاکسازی دورهای رکوردهای پردازششده، ایندکسگذاری مناسب، رسیدگی به پیامهای مشکلدار (dead-letter) و حفظ ترتیب رویدادها در سطح aggregate ضروری است. ترکیب polling با LISTEN/NOTIFY در Postgres میتواند زمان واکنش را بهتر کند. نتیجه، راهکاری ساده و مقیاسپذیر است که بدون تراکنشهای توزیعشده، قابلیت اتکا را در معماری رویدادمحور فراهم میکند.
#OutboxPattern #Go #Postgres #Microservices #EventDriven #TransactionalOutbox #Messaging #Reliability
🟣لینک مقاله:
https://golangweekly.com/link/174422/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Medium
How to implement the Outbox pattern in Go and Postgres
I was at a ContainerDays conference recently and attended a great talk from Nikolay Kuznetsov about the Outbox pattern and resilient system…
Forwarded from Gopher Academy
🔵 عنوان مقاله
PG Back Web 0.5: A Postgres Backup System with Web Interface
🟢 خلاصه مقاله:
** PG Back Web 0.5 یک ابزار مبتنی بر Go برای مدیریت پشتیبانگیریهای Postgres از طریق یک رابط وب ساده و کاربرپسند است. این برنامه امکان زمانبندی پشتیبانها، پایش وضعیت و مشاهده تاریخچه را فراهم میکند و با webhooks میتواند اعلانها را به سامانههای بیرونی ارسال کند. استقرار آن بهصورت Docker image بسیار ساده است و در نسخه 0.5 پشتیبانی از Postgres 18 نیز اضافه شده تا با آخرین نسخه Postgres سازگار باشد.
#Postgres #Backup #Go #Docker #Database #DevOps #Webhooks #Monitoring
🟣لینک مقاله:
https://golangweekly.com/link/175372/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
PG Back Web 0.5: A Postgres Backup System with Web Interface
🟢 خلاصه مقاله:
** PG Back Web 0.5 یک ابزار مبتنی بر Go برای مدیریت پشتیبانگیریهای Postgres از طریق یک رابط وب ساده و کاربرپسند است. این برنامه امکان زمانبندی پشتیبانها، پایش وضعیت و مشاهده تاریخچه را فراهم میکند و با webhooks میتواند اعلانها را به سامانههای بیرونی ارسال کند. استقرار آن بهصورت Docker image بسیار ساده است و در نسخه 0.5 پشتیبانی از Postgres 18 نیز اضافه شده تا با آخرین نسخه Postgres سازگار باشد.
#Postgres #Backup #Go #Docker #Database #DevOps #Webhooks #Monitoring
🟣لینک مقاله:
https://golangweekly.com/link/175372/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - eduardolat/pgbackweb: 🐘 Effortless PostgreSQL backups with a user-friendly web interface! 🌐💾
🐘 Effortless PostgreSQL backups with a user-friendly web interface! 🌐💾 - eduardolat/pgbackweb
Forwarded from Database Labdon
🔵 عنوان مقاله
Did You Know Postgres Tables are Limited to 1,600 Columns?
🟢 خلاصه مقاله:
اگر نمیدانستید، در Postgres هر جدول حداکثر ۱۶۰۰ ستون میتواند داشته باشد. این یک محدودیت سخت در هسته سیستم است و با NULL بودن فیلدها یا TOAST دور زده نمیشود. اگر شماره issue 226 در سال 2017 را خوانده باشید، احتمالاً این نکته را به خاطر دارید. این سقف به معنای آن است که طراحیهایی با جدولهای بسیار عریض—مثل هر شاخص یک ستون یا طرحهای EAV تثبیتشده—بهسرعت به حد میخورند. راهحلهای بهتر شامل نرمالسازی، تفکیک عمودی، تبدیل ستونها به سطرها برای سنجهها، یا استفاده از JSONB برای ویژگیهای کماستفاده و پراکنده است. جدولهای خیلی عریض علاوه بر ریسک رسیدن به سقف، هزینه I/O و نگهداری را بالا میبرند. نتیجه عملی: با در نظر گرفتن حد ۱۶۰۰ ستون، از طرحهای باریکتر و انعطافپذیرتر استفاده کنید و قبل از اعمال مهاجرتها، تعداد ستونها را بررسی کنید.
#Postgres #PostgreSQL #SQL #DatabaseDesign #DataModeling #SchemaDesign #JSONB #SoftwareEngineering
🟣لینک مقاله:
https://postgresweekly.com/link/176989/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
Did You Know Postgres Tables are Limited to 1,600 Columns?
🟢 خلاصه مقاله:
اگر نمیدانستید، در Postgres هر جدول حداکثر ۱۶۰۰ ستون میتواند داشته باشد. این یک محدودیت سخت در هسته سیستم است و با NULL بودن فیلدها یا TOAST دور زده نمیشود. اگر شماره issue 226 در سال 2017 را خوانده باشید، احتمالاً این نکته را به خاطر دارید. این سقف به معنای آن است که طراحیهایی با جدولهای بسیار عریض—مثل هر شاخص یک ستون یا طرحهای EAV تثبیتشده—بهسرعت به حد میخورند. راهحلهای بهتر شامل نرمالسازی، تفکیک عمودی، تبدیل ستونها به سطرها برای سنجهها، یا استفاده از JSONB برای ویژگیهای کماستفاده و پراکنده است. جدولهای خیلی عریض علاوه بر ریسک رسیدن به سقف، هزینه I/O و نگهداری را بالا میبرند. نتیجه عملی: با در نظر گرفتن حد ۱۶۰۰ ستون، از طرحهای باریکتر و انعطافپذیرتر استفاده کنید و قبل از اعمال مهاجرتها، تعداد ستونها را بررسی کنید.
#Postgres #PostgreSQL #SQL #DatabaseDesign #DataModeling #SchemaDesign #JSONB #SoftwareEngineering
🟣لینک مقاله:
https://postgresweekly.com/link/176989/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy