كمطورين، نستخدم غالبًا قواعد بيانات مثل 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 وأخبرنا برأيك!


