Drizzle ORM سب سے تیزی سے بڑھنے والا TypeScript ORM کے طور پر ابھرا ہے، جو مکمل قسم کی حفاظت اور صفر رن ٹائم اوور ہیڈ کے ساتھ SQL جیسا نحو پیش کرتا ہے۔ NestJS کے ساتھ مل کر، یہ پروڈکشن APIs بنانے کے لیے ایک طاقتور اسٹیک بناتا ہے جو ڈویلپر کے موافق اور پرفارمنس دونوں ہیں۔
Drizzle ORM سب سے تیزی سے بڑھنے والا TypeScript ORM کے طور پر ابھرا ہے، جو مکمل قسم کی حفاظت اور صفر رن ٹائم اوور ہیڈ کے ساتھ SQL جیسا نحو پیش کرتا ہے۔ NestJS کے ساتھ مل کر، یہ پروڈکشن APIs بنانے کے لیے ایک طاقتور اسٹیک بناتا ہے جو ڈویلپر کے موافق اور پرفارمنس دونوں ہیں۔
اہم ٹیک ویز
- بوندا باندی مکمل TypeScript انفرنس کے ساتھ SQL جیسے سوالات فراہم کرتی ہے -- کوئی کوڈ جنریشن مرحلہ نہیں
- NestJS انحصار انجیکشن ڈریزل ڈیٹا بیس کنکشن کے ساتھ صاف طور پر مربوط ہوتا ہے۔
- اسکیما سے چلنے والی ترقی ڈیٹا بیس اور ٹائپ اسکرپٹ کی اقسام کو ہم آہنگ رہنے کو یقینی بناتی ہے
- بوندا باندی اور منتقلی کی کمانڈ بغیر ٹائم ٹائم کے اسکیما ارتقاء کو ہینڈل کرتی ہے۔
پروجیکٹ سیٹ اپ
انسٹالیشن
NestJS پروجیکٹ کے ساتھ شروع کریں اور بوندا باندی کا انحصار شامل کریں:
npm install drizzle-orm postgres
npm install -D drizzle-kit @types/pg
ہم اس کی کارکردگی کے لیے postgres.js ڈرائیور کی سفارش کرتے ہیں۔ پیداوار میں کنکشن پولنگ کے لیے، PgBouncer یا سرور لیس-آپٹمائزڈ ڈرائیورز پر غور کریں۔
ڈیٹا بیس کنکشن ماڈیول
انحصار انجیکشن کے ذریعے بوندا باندی مثال فراہم کرنے والا عالمی ڈیٹا بیس ماڈیول بنائیں۔ useFactory کا استعمال کرتے ہوئے ایک DB_TOKEN فراہم کنندہ کی وضاحت کریں جو DATABASE_URL سے پوسٹگریس کلائنٹ بناتا ہے اور بوندا باندی (کلائنٹ، \\\\\\\\{ سکیما \\\\\\\\}) لوٹاتا ہے۔ ٹوکن ایکسپورٹ کریں تاکہ کوئی بھی سروس اسے @Inject("DRIZZLE_DB") کے ساتھ انجیکشن کر سکے۔
اسکیما کی تعریف
Drizzle ٹیبل بلڈرز کا استعمال کرتے ہوئے ڈیٹا بیس ٹیبلز کی وضاحت کریں۔ ہر ٹیبل pgTable() کے ساتھ بنائے گئے ایک const کو برآمد کرتا ہے جس میں uuid، varchar، ٹائم اسٹیمپ، بولین، اور کالم کی دیگر اقسام کا استعمال کرتے ہوئے کالم کی تعریفیں ہوتی ہیں۔ کالم ڈیفالٹس (defaultRandom، defaultNow)، رکاوٹوں (notNull، منفرد) اور تعلقات کی حمایت کرتے ہیں۔
تعلقات کی تعریف
Drizzle relations provide type-safe eager loading. تعلقات () فنکشن کا استعمال کرتے ہوئے تعلقات کی وضاحت کریں، ایک سے کئی کے ساتھ بہت سے () اور بہت سے ایک کے ساتھ ایک () کی وضاحت کریں۔ حوالہ کالم غیر ملکی کلیدوں کو ان کی بنیادی ٹیبل کی بنیادی کلیدوں پر نقشہ بناتا ہے۔
استفسار کی عمارت
سوالات منتخب کریں۔
بوندا باندی کے سوالات SQL کی طرح پڑھتے ہیں جبکہ مکمل قسم کا اندازہ فراہم کرتے ہیں:
- سادہ انتخاب: db.select().from(users)
- فلٹر شدہ: db.select().from(users).where(and(eq(users.role, "admin"), eq(users.isActive, true)))
- جوائنز کے ساتھ: db.select().from(users).leftJoin(orders, eq(users.id, orders.userId))
- ریلیشن لوڈنگ: db.query.users.findMany(\\\\\\\\{ مع: { آرڈرز: سچ \\\\\\\\}، حد: 20 })
داخل کریں، اپ ڈیٹ کریں، حذف کریں۔
// Insert with returning
const [newUser] = await this.db
.insert(users)
.values({ email: "[email protected]", name: "New User" })
.returning();
// Update
await this.db
.update(users)
.set({ role: "admin", updatedAt: new Date() })
.where(eq(users.id, userId));
// Delete
await this.db.delete(users).where(eq(users.id, userId));
لین دین
بوندا باندی کا لین دین ایٹمی آپریشن کو یقینی بناتا ہے۔ ٹرانزیکشن آبجیکٹ (tx) وصول کرنے والے async کال بیک کے ساتھ db.transaction() پر کال کریں۔ کال بیک کے اندر تمام استفسارات جوہری طور پر انجام پاتے ہیں -- اگر کوئی ناکام ہو جاتا ہے، تو پورا لین دین واپس ہو جاتا ہے۔
عام استعمال کے معاملات میں والدین اور بچوں کا ایک ساتھ ریکارڈ بنانا، آرڈرز پر کارروائی کرتے وقت انوینٹری کو اپ ڈیٹ کرنا، اور اکاؤنٹس کے درمیان رقوم کی منتقلی شامل ہیں۔
ہجرتیں
سکیما پش (ترقی)
ڈویلپمنٹ کے دوران، پش سکیما براہ راست بوندا باندی کٹ پش کے ساتھ تبدیل ہوتی ہے۔ یہ آپ کی اسکیما فائلوں کا ڈیٹا بیس سے موازنہ کرتا ہے اور تبدیلیوں کا اطلاق کرتا ہے۔ ترقی کے لیے تیز لیکن پیداوار کے لیے موزوں نہیں۔
منتقلی فائلیں (پیداوار)
پروڈکشن کے لیے، drizzle-kit generate کے ساتھ ورژن والی SQL مائیگریشن فائلیں بنائیں، پھر انہیں drizzle-kit migrate کے ساتھ لاگو کریں۔ مائیگریشن فائلوں کا جائزہ لیا جا سکتا ہے، اسٹیجنگ میں ٹیسٹ کیا جا سکتا ہے، اور CI/CD پائپ لائنوں میں لاگو کیا جا سکتا ہے۔
NestJS انٹیگریشن پیٹرنز
سروس پیٹرن
سروسز Drizzle ڈیٹا بیس کو انجیکشن کرتی ہیں اور متحرک فلٹرز کے ساتھ سوالات تیار کرتی ہیں:
@Injectable()
export class ProductsService {
constructor(@Inject("DRIZZLE_DB") private db: DrizzleDB) {}
async findAll(filters: ProductFilters) {
const conditions = [];
if (filters.category)
conditions.push(eq(products.category, filters.category));
if (filters.minPrice)
conditions.push(gte(products.price, filters.minPrice));
return this.db
.select()
.from(products)
.where(conditions.length ? and(...conditions) : undefined)
.orderBy(desc(products.createdAt))
.limit(filters.limit || 20)
.offset(filters.offset || 0);
}
}
کثیر کرایہ داری
SaaS ایپلیکیشنز کے لیے، ہر سوال کو آرگنائزیشن آئی ڈی کے ذریعے فلٹر کرنا چاہیے۔ ایک بیس سروس یا مڈل ویئر بنائیں جو تمام ڈیٹا بیس آپریشنز پر کرایہ داروں کی تنہائی کو یقینی بنائے۔ کلائنٹ کی فراہم کردہ تنظیم کی شناخت پر کبھی بھروسہ نہ کریں -- تصدیق شدہ سیشن کے خلاف توثیق کریں۔
پیرامیٹرائزڈ سوالات
بوندا باندی ایس کیو ایل انجیکشن کو روکتے ہوئے ڈیفالٹ کے ذریعے پیرامیٹرائزڈ سوالات کا استعمال کرتی ہے۔ sql.raw() کو صارف کے ان پٹ کے ساتھ کبھی استعمال نہ کریں۔ اس کے بجائے، sql ٹیمپلیٹ لفظی استعمال کریں جو خود بخود انٹرپولیٹڈ اقدار کو پیرامیٹرائز کرتا ہے۔
کارکردگی کے بہترین طریقے
- صرف مطلوبہ کالم منتخب کریں: تمام کالم منتخب کرنے کے بجائے .select(\\\\\\\\{ id: users.id، name: users.name \\\\\\\\}) استعمال کریں۔
- اشاریہ جات کا استعمال کریں: یقینی بنائیں کہ کثرت سے فلٹر کیے گئے کالموں میں ڈیٹا بیس کے اشاریہ جات ہیں
- نتائج کو محدود کریں: فہرست کے سوالات پر ہمیشہ .limit() کا استعمال کریں۔
- بیچ انسرٹس: لوپس کے بجائے بلک انسرٹس کے لیے .values([...array]) کا استعمال کریں
- کنکشن پولنگ: اپنے کام کے بوجھ کے لیے مناسب پول کے سائز کو ترتیب دیں۔
- سست کنکشن: پہلی استفسار تک کنکشن موخر کرنے کے لیے پراکسی پیٹرن کا استعمال کریں۔
اکثر پوچھے گئے سوالات
س: بوندا باندی کا موازنہ NestJS کے لیے Prisma سے کیسے ہوتا ہے؟
بوندا باندی زیادہ SQL پر مبنی ہے اور اس میں صفر رن ٹائم اوور ہیڈ ہے (کوئی کوئری انجن نہیں)۔ Prisma اپنی استفسار کی زبان استعمال کرتی ہے اور اس کے لیے تیار کردہ کلائنٹ کی ضرورت ہوتی ہے۔ بوندا باندی میں بنڈل کا سائز چھوٹا ہوتا ہے اور سردی کا آغاز تیز ہوتا ہے، جبکہ پریزما میں ایک بڑا ماحولیاتی نظام اور زیادہ ٹولنگ ہوتی ہے۔
س: کیا بوندا باندی پیچیدہ خام SQL کو سنبھال سکتی ہے؟
جی ہاں sql ٹیمپلیٹ لٹریل پیرامیٹرائزڈ حفاظت کو برقرار رکھتے ہوئے خام سوالات کی حمایت کرتا ہے۔ بوندا باندی کبھی بھی استفسارات کے لیے سٹرنگ کنکیٹنیشن کا استعمال نہیں کرتی، SQL انجیکشن کو روکتی ہے۔
س: پیداوار میں کنکشن پولنگ کے بارے میں کیا خیال ہے؟
ایپلیکیشن کے لیے بیرونی PgBouncer استعمال کریں یا postgres.js ڈرائیور کو زیادہ سے زیادہ کنکشن کی حد کے ساتھ کنفیگر کریں۔ سرور لیس ماحول کے لیے، بلٹ ان پولنگ کے ساتھ سرور لیس-آپٹمائزڈ ڈرائیور استعمال کریں۔
سوال: ہم بغیر ٹائم ٹائم کے اسکیما تبدیلیوں کو کیسے ہینڈل کرتے ہیں؟
منتقلی کی فائلیں بنائیں، SQL کا جائزہ لیں، اسٹیجنگ میں ٹیسٹ کریں، پھر پروڈکشن میں درخواست دیں۔ PostgreSQL میں زیادہ تر ALTER TABLE بیانات خصوصی تالے کے بغیر عمل میں آتے ہیں۔ ایسے کاموں سے پرہیز کریں جن میں چوٹی کے اوقات میں ٹیبل کو دوبارہ لکھنے کی ضرورت ہو۔
آگے کیا ہے۔
NestJS کے ساتھ Drizzle ORM پروڈکشن APIs کی تعمیر کے لیے ایک قسم کے لیے محفوظ، پرفارمنٹ فاؤنڈیشن فراہم کرتا ہے۔ ایس کیو ایل جیسا API تجریدی فرق کو کم کرتا ہے جبکہ ٹائپ اسکرپٹ کا اندازہ رن ٹائم کی قسم کی غلطیوں کو ختم کرتا ہے۔
API ڈیولپمنٹ مدد کے لیے ECOSIRE سے رابطہ کریں، یا اپنی ERP کے ساتھ حسب ضرورت APIs کو مربوط کرنے کے لیے ہماری Odoo انٹیگریشن سروسز کو دریافت کریں۔
ECOSIRE کے ذریعہ شائع کیا گیا -- انٹرپرائز سوفٹ ویئر کے حل کے ساتھ کاروبار کو پیمانے میں مدد کرنا۔
تحریر
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
ECOSIRE کے ساتھ اپنا کاروبار بڑھائیں
ERP، ای کامرس، AI، تجزیات، اور آٹومیشن میں انٹرپرائز حل۔
متعلقہ مضامین
Odoo Hosting Requirements in 2026: Server Sizing by User Count (With Real Configs)
Odoo hosting requirements by user count: vCPU, RAM, storage, and worker settings for 5 to 250+ users, plus PostgreSQL tuning values from real deployments.
Drizzle ORM + Postgres Row-Level Security for Multi-Tenancy 2026
Implement multi-tenant SaaS with Drizzle ORM and Postgres Row-Level Security: schema, policies, session variables, NestJS integration, real production patterns.
Drizzle ORM vs Prisma 2026: Schema, Performance, DX Comparison
Balanced Drizzle vs Prisma comparison for TypeScript: schema design, performance, migrations, query DX, edge runtimes. Real production benchmarks.