Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Speed Optimization
  5. প্রাকটিক্যাল ডেটাবেস শার্ডিং প্রজেক্ট (Django দিয়ে)

প্রাকটিক্যাল ডেটাবেস শার্ডিং প্রজেক্ট (Django দিয়ে)

প্রকল্পের ধারণা (Project Concept)

ধরা যাক, আমরা একটি ছোট Django অ্যাপ্লিকেশন তৈরি করব যেখানে আমরা দুটি শার্ড ব্যবহার করব:

  1. Shard 1: কর্মীদের সাধারণ তথ্য সংরক্ষণ করার জন্য।
  2. Shard 2: কর্মীদের উপস্থিতি এবং কাজের তথ্য সংরক্ষণ করার জন্য।

আমরা ডেটাবেস শার্ডিং কনফিগারেশন ব্যবহার করে কর্মীদের তথ্য দুটি ভিন্ন ডেটাবেসে ভাগ করে সংরক্ষণ করব।


ধাপ ১: প্রজেক্ট সেটআপ (Step 1: Project Setup)

১. নতুন Django প্রজেক্ট তৈরি করুন

django-admin startproject sharding_project
cd sharding_project

২. অ্যাপ তৈরি করুন

python manage.py startapp employees

৩. settings.py ফাইলে দুটি ডেটাবেস কনফিগার করুন

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    },
    'shard_1': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'shard_1.sqlite3',
    },
    'shard_2': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'shard_2.sqlite3',
    }
}

ধাপ ২: মডেল তৈরি করুন (Step 2: Create Models)

১. employees/models.py ফাইলে মডেল তৈরি করুন

from django.db import models

# কর্মীদের সাধারণ তথ্যের জন্য মডেল
class EmployeeInfo(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(unique=True)

    class Meta:
        db_table = 'employee_info'

# কর্মীদের উপস্থিতি সংরক্ষণের জন্য মডেল
class Attendance(models.Model):
    employee = models.ForeignKey(EmployeeInfo, on_delete=models.CASCADE)
    date = models.DateField()
    status = models.CharField(max_length=10, choices=[('Present', 'Present'), ('Absent', 'Absent')])

    class Meta:
        db_table = 'attendance'

ধাপ ৩: ডেটাবেস রাউটার তৈরি করুন (Step 3: Create Database Router)

আমরা একটি রাউটার ব্যবহার করব যা সিদ্ধান্ত নেবে কোন ডেটা কোন শার্ডে যাবে।

১. sharding_project/db_router.py ফাইল তৈরি করুন

class DatabaseRouter:
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'employees':
            if model._meta.model_name == 'employeeinfo':
                return 'shard_1'
            elif model._meta.model_name == 'attendance':
                return 'shard_2'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'employees':
            if model._meta.model_name == 'employeeinfo':
                return 'shard_1'
            elif model._meta.model_name == 'attendance':
                return 'shard_2'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == 'employees' and obj2._meta.app_label == 'employees':
            return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == 'employees':
            if model_name == 'employeeinfo':
                return db == 'shard_1'
            elif model_name == 'attendance':
                return db == 'shard_2'
        return None

২. settings.py ফাইলে রাউটার যোগ করুন

DATABASE_ROUTERS = ['sharding_project.db_router.DatabaseRouter']

ধাপ ৪: মাইগ্রেশন তৈরি এবং প্রয়োগ করুন (Step 4: Create and Apply Migrations)

python manage.py makemigrations employees
python manage.py migrate --database=shard_1
python manage.py migrate --database=shard_2

ধাপ ৫: ডেটা ইনসার্ট এবং ফেচ করা (Step 5: Insert and Fetch Data)

১. employees/views.py ফাইলে ডেটা ইনসার্ট এবং ফেচ করার জন্য কোড লিখুন

from django.shortcuts import render
from .models import EmployeeInfo, Attendance

def insert_data(request):
    # কর্মী ইনফো ইনসার্ট করা
    employee = EmployeeInfo.objects.using('shard_1').create(name="John Doe", email="john@example.com")

    # উপস্থিতি ইনসার্ট করা
    Attendance.objects.using('shard_2').create(employee=employee, date="2024-11-01", status="Present")

    return render(request, 'employees/success.html', {'employee': employee})

ধাপ ৬: টেমপ্লেট তৈরি করুন (Step 6: Create a Template)

১. employees/templates/employees/success.html ফাইলে টেমপ্লেট লিখুন

<!DOCTYPE html>
<html>
<head>
    <title>Data Inserted</title>
</head>
<body>
    <h1>Employee Data Inserted Successfully!</h1>
    <p>Name: {{ employee.name }}</p>
    <p>Email: {{ employee.email }}</p>
</body>
</html>

ধাপ ৭: URL কনফিগার করুন (Step 7: Configure URL)

১. employees/urls.py ফাইলে URL কনফিগার করুন

from django.urls import path
from . import views

urlpatterns = [
    path('insert/', views.insert_data, name='insert_data'),
]

২. sharding_project/urls.py ফাইলে অ্যাপের URL যোগ করুন

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('employees/', include('employees.urls')),
]

ধাপ ৮: সার্ভার রান করুন (Step 8: Run the Server)

python manage.py runserver

এখন আপনি ব্রাউজারে গিয়ে http://127.0.0.1:8000/employees/insert/ URL-এ গেলে দেখতে পাবেন যে ডেটা দুটি ভিন্ন শার্ডে সংরক্ষণ হচ্ছে।


সারাংশ (Summary)

  • Shard 1-এ কর্মীদের সাধারণ তথ্য সংরক্ষণ করা হয়েছে।
  • Shard 2-এ কর্মীদের উপস্থিতির তথ্য সংরক্ষণ করা হয়েছে।
  • আমরা Django রাউটার ব্যবহার করে শার্ডিং কনফিগার করেছি, যা নির্ধারণ করে কোন ডেটা কোন ডেটাবেসে যাবে।

এটি একটি সহজ প্রজেক্ট যা শার্ডিং-এর মূল ধারণা তুলে বাস্তব জীবনে বড় স্কেল ডেটাবেসে আরও উন্নত শার্ডিং কৌশল ব্যবহার করা হয়।

How can we help?