Tablespace در Django: مدیریت محل ذخیره‌سازی جداول و ایندکس‌ها در دیتابیس

این مقاله مفهوم Tablespace در Django را توضیح می‌دهد؛ اینکه چگونه می‌توان محل ذخیره‌سازی جداول و ایندکس‌ها را کنترل کرد، چگونه از db_tablespace در مدل‌ها و فیلدها استفاده می‌شود، نقش DEFAULT_TABLESPACE و DEFAULT_INDEX_TABLESPACE چیست، و کدام دیتابیس‌ها از tablespace پشتیبانی می‌کنند. همچنین یک مثال کامل برای درک بهتر ارائه شده است.

tablespace, db_tablespaceDEFAULT_TABLESPACE, DEFAULT_INDEX_TABLESPACEindex tablespace, Django ORM, PostgreSQL, Oracle

~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 برای استفادهٔ صحیح از این قابلیت ضروری است.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

فریم‌ورک Tasks در Django: راهنمای کامل اجرای کارهای پس‌زمینه در Django 6.0

Django 6.0 فریم‌ورک Tasks را معرفی کرده است؛ سیستمی داخلی برای تعریف و صف‌بندی کارهای پس‌زمینه خارج از چرخهٔ request–response. این مقاله نحوهٔ کار Tasks، پیکربندی backendها، تعریف و enqueue کردن Taskها، استفاده از context، و ادغام با سیستم‌های Worker خارجی را توضیح می‌دهد.

ادامه

پشتیبانی Asynchronous در Django: راهنمای کامل Async Views، ORM، Middleware، عملکرد و ایمنی

این مقاله پشتیبانی Django از برنامه‌نویسی غیرهم‌زمان (async) را توضیح می‌دهد. موضوعاتی مانند async views، اجرای Django تحت ASGI، رفتار middleware، قابلیت‌های ORM غیرهم‌زمان، sync_to_async، مدیریت قطع اتصال، نکات عملکردی، و مکانیزم‌های ایمنی Django برای جلوگیری از استفادهٔ ناامن async بررسی می‌شوند.

ادامه

System Check Framework در Django: راهنمای کامل نوشتن، ثبت، اجرا و تست چک‌های سیستمی

System Check Framework در Django مجموعه‌ای از بررسی‌های استاتیک برای تشخیص مشکلات رایج در پروژه است. این مقاله نحوهٔ اجرای چک‌ها، نوشتن چک‌های سفارشی، مدیریت پیام‌ها، برچسب‌گذاری چک‌ها، افزودن چک به مدل‌ها و فیلدها، و نوشتن تست‌های واحد و یکپارچه برای چک‌ها را توضیح می‌دهد.

ادامه

سیگنال‌ها در Django: راهنمای کامل استفاده، اتصال، ارسال و مدیریت Signalها

این مقاله سیستم سیگنال‌های Django را توضیح می‌دهد؛ مکانیزمی برای اطلاع‌رسانی رویدادها بین بخش‌های مختلف برنامه بدون ایجاد وابستگی مستقیم. موضوعاتی مانند نحوهٔ اتصال receiverها، استفاده از decorator، مدیریت senderهای خاص، محل مناسب قرارگیری کد سیگنال‌ها، هشدارهای مهم، و بهترین شیوه‌ها بررسی می‌شوند.

ادامه

آشنایی کامل با Django Settings: پیکربندی، مدیریت محیط، و بهترین شیوه‌ها

این مقاله یک راهنمای جامع دربارهٔ سیستم تنظیمات در Django ارائه می‌دهد. موضوعاتی مانند ساختار فایل تنظیمات، نحوهٔ تعیین DJANGO_SETTINGS_MODULE، استفاده از settings در کد، امنیت، پیکربندی دستی با configure()، استفادهٔ مستقل از Django با django.setup() و ایجاد تنظیمات سفارشی بررسی می‌شوند.

ادامه

سریال‌سازی و دسریال‌سازی در Django: راهنمای کامل کار با Serialization Framework

این مقاله سیستم سریال‌سازی Django را توضیح می‌دهد؛ از نحوهٔ تبدیل مدل‌ها به JSON، XML، YAML و JSONL گرفته تا دسریال‌سازی داده‌ها، سریال‌سازی فیلدهای انتخابی، کار با مدل‌های ارث‌بری، مدیریت روابط، و نکات مهم هنگام ذخیرهٔ داده‌های دسریال‌شده.

ادامه