فاينفرفاينفر
EN
برمجة 3 min read

لقد أنشأنا NestJs DuckDB: تكامل بسيط لـ DuckDB مع NestJS

Aysha Farha

Aysha Farha

July 23, 2026

كمطورين، نستخدم غالبًا قواعد بيانات مثل PostgreSQL أو MySQL أو MongoDB عند بناء تطبيقات الواجهة الخلفية باستخدام NestJS. ولكن ليست كل مشكلة بيانات تتطلب إعداد قاعدة بيانات تقليدية.

# nestjs-duckdb: دمج DuckDB مع NestJS بطريقة بسيطة وسلسة

كيفطور، غالباً ما نستخدم قواعد بيانات مثل PostgreSQL أو MySQL أو MongoDB عند بناء تطبيقات الخلفية (backend) بإطار NestJS. لكن ليست كل مشكلة بيانات تتطلب إعداد قاعدة بيانات تقليدية.

مؤخراً، بدأنا في استكشاف **DuckDB** لأحمال العمل التحليلية ومعالجة البيانات. DuckDB هي قاعدة بيانات تحليلية تعمل داخل التطبيق (in-process)، وهي خفيفة الوزن، سريعة، وسهلة الاستخدام.

أثناء استخدام DuckDB مع تطبيق NestJS، أردنا تكاملاً بسيطاً يشعر بأنه جزء طبيعي من نظام NestJS البيئي.

لذلك، قمنا بإنشاء **[nestjs-duckdb](https://github.com/finepher/nestjs-duckdb)**

## ما هي DuckDB؟

DuckDB هي قاعدة بيانات تحليلية مصممة للعمل مباشرة داخل تطبيقك. على عكس قواعد البيانات التقليدية التي تتطلب خادم قاعدة بيانات منفصلاً، يمكن تشغيل DuckDB داخل عملية التطبيق نفسه.

هذا يجعلها خياراً مثيراً للاهتمام في حالات استخدام مثل:

- التحليلات (Data Analytics)
- إعداد التقارير (Reporting)
- معالجة البيانات (Data Processing)
- استكشاف البيانات محلياً (Local Data Exploration)
- سير عمل ETL
- أحمال العمل التحليلية (Analytical Workloads)

كما تدعم DuckDB كلاً من قواعد البيانات في الذاكرة (in-memory) وملفات قواعد البيانات، مما يمنح المطورين مرونة حسب حالة الاستخدام.

## لماذا أنشأنا nestjs-duckdb؟

عند العمل مع DuckDB في تطبيق NestJS، أردنا أن نبقى التكامل بسيطاً.

لم نرد أن يضطر المطورون للتعامل مع إعدادات غير ضرورية أو كتابة كود تهيئة قاعدة بيانات متكرر.

أردنا شيئاً يتبع أنماط NestJS المألوفة في الوحدات (modules) وحقن التبعيات (dependency injection):

```typescript
DuckDbModule.forRoot({
  database: ':memory:',
});

ثم، أينما نحتاج DuckDB، يمكننا ببساطة حقن الخدمة:

constructor(
  private readonly duckDb: DuckDbService,
) {}

من هناك، يمكنك تنفيذ استعلاماتك والعمل مع DuckDB مباشرة من خدمات NestJS الخاصة بك.

هذه هي الفكرة الرئيسية وراء nestjs-duckdb.

اجعل الأمر بسيطاً. قم بالتهيئة مرة واحدة. واحقن الخدمة أينما احتجتها.

ماذا توفر الحزمة؟

توفر الحزمة طبقة تكامل بسيطة بين NestJS و DuckDB.

تدعم:

  • تهيئة DuckDB بسهولة باستخدام forRoot()

  • تهيئة غير متزامنة باستخدام forRootAsync()

  • حقن التبعيات عبر DuckDbService

  • تنفيذ استعلامات SQL

  • تنفيذ عبارات SQL

  • الوصول إلى اتصال DuckDB الأساسي

  • الوصول إلى قاعدة بيانات DuckDB الخام

  • حقن قاعدة البيانات مباشرة عندما تحتاج إلى وصول على مستوى أدنى

واجهة برمجة التطبيقات (API) صغيرة عمداً. الهدف ليس إخفاء DuckDB خلف طبقة تجريد معقدة، بل تسهيل استخدامها داخل تطبيق NestJS.

مثال سريع

بعد تثبيت الحزمة:

npm install nestjs-duckdb

يمكنك تهيئتها في وحدة NestJS الخاصة بك:

import { Module } from '@nestjs/common';
import { DuckDbModule } from 'nestjs-duckdb';

@Module({
  imports: [
    DuckDbModule.forRoot({
      database: ':memory:',
    }),
  ],
})
export class AppModule {}

ثم قم بحقن DuckDbService في خدمات تطبيقك وابدأ العمل مع بياناتك.

لمزيد من التفاصيل حول الاستخدام، وخيارات التهيئة، والأمثلة، راجع التوثيق وملف README الخاص بالحزمة.

لمن هذه الحزمة؟

يمكن أن تكون nestjs-duckdb مفيدة للمطورين الذين يبنون تطبيقات NestJS وتحتاج إلى العمل مع DuckDB لحالات استخدام تحليلية أو معالجة بيانات.

على سبيل المثال، قد تكون بصدد بناء:

  • خدمة تحليلات داخلية

  • تطبيق تقارير

  • أداة معالجة بيانات

  • خط أنابيب ETL

  • خدمة تحتاج إلى معالجة مجموعات بيانات محلية

  • خلفية تحليلية خفيفة الوزن

بالطبع، يعتمد ما إذا كانت DuckDB هي الخيار المناسب على بنيتك وحمل العمل الخاص بك. لكن إذا كنت تستخدم NestJS بالفعل وتريد استكشاف DuckDB، نأمل أن تجعل هذه الحزمة التجربة أسهل قليلاً.

صُنعت لمجتمع NestJS

أنشأنا nestjs-duckdb لأننا أردنا طريقة مباشرة لإحضار DuckDB إلى مشاريع NestJS.

إنها حزمة صغيرة بهدف بسيط: اجعل DuckDB تشعر وكأنها في بيتها داخل تطبيق NestJS.

إذا كنت مهتماً بتجربتها، اطلع على التوثيق والأمثلة في مستودع الحزمة.

يسعدنا سماع ملاحظاتك، اقتراحاتك، وأفكارك لتحسين الحزمة.

هل لديك مشروع NestJS يستخدم DuckDB؟ جرّب nestjs-duckdb وأخبرنا برأيك!

Related Blogs

Related Blogs

هل ما زلت تستخدم Bcrypt في 2026؟ إليك لماذا (ومتى) تتحول إلى Argon2
الأمن السيبراني
August 21, 2026

هل ما زلت تستخدم Bcrypt في 2026؟ إليك لماذا (ومتى) تتحول إلى Argon2

إذا كان تطبيقك يخزّن كلمات المرور، فإن هذا القرار أهم من أي شيء آخر تقريبًا في قاعدة شيفرتك البرمجية. إن أصبْتَ فيه، فاختراق قاعدة البيانات سيكون مجرد إزعاج. وإن أخطأْتَ، فستكون كارثة على الصفحة الأولى للصحف.

مخاطر SVG الخفية: لماذا يمكن لصيغة الصور «الآمنة» أن تخترق موقعك
الأمن السيبراني
June 19, 2026

مخاطر SVG الخفية: لماذا يمكن لصيغة الصور «الآمنة» أن تخترق موقعك

فهم ملف .env في Node.js
ديفوبس
May 17, 2026

فهم ملف .env في Node.js

عند بناء تطبيق Node.js، سترى غالباً ملفاً اسمه .env. قد يبدو مربكاً في البداية، لكنه في الواقع من أهم أجزاء إدارة تطبيقك بشكل صحيح.