~2 دقیقه مطالعه • بروزرسانی ۱۹ اسفند ۱۴۰۴
۱. مقدمه: Tablespace چیست؟
Tablespace یک تکنیک رایج در دیتابیسها برای بهینهسازی عملکرد و مدیریت بهتر فضای ذخیرهسازی است. با tablespace میتوانید تعیین کنید هر جدول یا ایندکس روی کدام بخش از دیسک ذخیره شود.
نکته مهم: Django خودش tablespace ایجاد نمیکند. باید tablespace را مستقیماً در دیتابیس بسازید.
۲. تعیین Tablespace برای جداول
برای تعیین tablespace یک مدل، از گزینهٔ db_tablespace در class Meta استفاده میشود:
class MyModel(models.Model):
...
class Meta:
db_tablespace = "my_tablespace"
این گزینه روی جداول ManyToMany نیز اعمال میشود.
استفاده از DEFAULT_TABLESPACE
اگر میخواهید tablespace پیشفرض برای همهٔ مدلها (یا اپهایی که کنترلشان را ندارید) تعیین کنید:
DEFAULT_TABLESPACE = "default_ts"
۳. تعیین Tablespace برای ایندکسها
برای ایندکسها دو روش وجود دارد:
۳.۱ تعیین tablespace در Index()
models.Index(fields=["shortcut"], db_tablespace="other_indexes")
۳.۲ تعیین tablespace در فیلد (برای ایندکس تکستونی)
name = models.CharField(max_length=30, db_index=True, db_tablespace="indexes")
اگر فیلد ایندکس نداشته باشد، این گزینه نادیده گرفته میشود.
DEFAULT_INDEX_TABLESPACE
برای تعیین tablespace پیشفرض ایندکسها:
DEFAULT_INDEX_TABLESPACE = "default_index_ts"
اگر هیچ tablespace مشخص نشود، ایندکس در همان tablespace جدول ساخته میشود.
۴. مثال کامل
class TablespaceExample(models.Model):
name = models.CharField(max_length=30, db_index=True, db_tablespace="indexes")
data = models.CharField(max_length=255, db_index=True)
shortcut = models.CharField(max_length=7)
edges = models.ManyToManyField(to="self", db_tablespace="indexes")
class Meta:
db_tablespace = "tables"
indexes = [
models.Index(fields=["shortcut"], db_tablespace="other_indexes")
]
توضیح رفتار:
- جدول مدل و جدول ManyToMany → در tablespace با نام tables
- ایندکس فیلد
name→ در indexes - ایندکس فیلد
data→ tablespace مشخص نشده → در tables - ایندکس فیلد
shortcut→ در other_indexes - ایندکسهای جدول ManyToMany → در indexes
۵. پشتیبانی دیتابیسها از Tablespace
| دیتابیس | پشتیبانی از Tablespace |
|---|---|
| PostgreSQL | ✔ بله |
| Oracle | ✔ بله |
| SQLite | ✘ خیر |
| MariaDB | ✘ خیر |
| MySQL | ✘ خیر |
اگر دیتابیس از tablespace پشتیبانی نکند، Django تمام گزینههای مربوط به tablespace را نادیده میگیرد.
جمعبندی
Tablespace ابزاری قدرتمند برای کنترل محل ذخیرهسازی جداول و ایندکسهاست. Django امکان تعیین tablespace را در سطح مدل، فیلد و ایندکس فراهم میکند، اما ایجاد و مدیریت tablespace بر عهدهٔ خود دیتابیس است. شناخت پشتیبانی دیتابیسها از tablespace برای استفادهٔ صحیح از این قابلیت ضروری است.
نوشته و پژوهش شده توسط دکتر شاهین صیامی