প্রকল্পের ধারণা (Project Concept)
ধরা যাক, আমরা একটি ছোট Django অ্যাপ্লিকেশন তৈরি করব যেখানে আমরা দুটি শার্ড ব্যবহার করব:
- Shard 1: কর্মীদের সাধারণ তথ্য সংরক্ষণ করার জন্য।
- 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 রাউটার ব্যবহার করে শার্ডিং কনফিগার করেছি, যা নির্ধারণ করে কোন ডেটা কোন ডেটাবেসে যাবে।
এটি একটি সহজ প্রজেক্ট যা শার্ডিং-এর মূল ধারণা তুলে বাস্তব জীবনে বড় স্কেল ডেটাবেসে আরও উন্নত শার্ডিং কৌশল ব্যবহার করা হয়।