MongoDB Academy · درس

إنشاء مجموعة سلاسل زمنية

سينشئ المتعلمون مجموعة سلاسل زمنية، مع تحديد خيارات timeField وmetaField وgranularity.

الدرس 1 من 413 خطوة

إنشاء مجموعة سلاسل زمنية درس مجاني في MongoDB Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في MongoDB Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة MongoDB Academy 4 دروس في المجموع.

مقدمة إلى مجموعات السلاسل الزمنية

قدّم MongoDB 5.0 مجموعات السلاسل الزمنية الأصلية — وهي نوع متخصص من المجموعات مُحسّن لتخزين القياسات التي تتغير بمرور الوقت والاستعلام عنها. تشمل حالات الاستخدام الشائعة قراءات مستشعرات إنترنت الأشياء، ومقاييس التطبيقات، والبيانات المالية المتتابعة، وبيانات مراقبة الخوادم. بخلاف المجموعات العادية، تستخدم مجموعات السلاسل الزمنية تنسيق تخزين عموديًا داخليًا، ما يقلل مساحة التخزين بدرجة كبيرة ويحسّن أداء الاستعلامات التي تعتمد على مرشحات النطاق الزمني.

الحقول الأساسية: timeField وmetaField وgranularity

تتطلب كل مجموعة سلاسل زمنية ثلاثة خيارات أساسية عند إنشائها. يمثّل timeField حقل المستند الذي يحتوي على الطابع الزمني (ويجب أن يكون BSON Date). ويحدّد metaField السلسلة — مثل معرّف مستشعر أو اسم جهاز. أما تلميح granularity ('seconds' أو 'minutes' أو 'hours') فيُخبر MongoDB بمعدل وصول القياسات، ما يتيح له تحسين حجم الحاويات داخليًا.

الإنشاء باستخدام أمر createCollection

استخدم db.createCollection() مع كائن خيارات يتضمن timeseries لإنشاء مجموعة سلاسل زمنية. لا يمكنك تحويل مجموعة عادية موجودة إلى مجموعة سلاسل زمنية — بل يجب إنشاؤها من جديد. ستظهر المجموعة في show collections مع مؤشر نوع خاص هو timeseries.

db.createCollection('sensorReadings', {
  timeseries: {
    timeField: 'timestamp',
    metaField: 'sensorId',
    granularity: 'seconds'
  }
})

تؤثر granularity في حجم الحاويات

يتحكم الخيار granularity في كيفية تجميع MongoDB للقياسات في مستندات الحاويات الداخلية. عند استخدام 'seconds'، تمتد الحاويات ساعة واحدة (3,600 قياس لكل حاوية). وعند استخدام 'minutes'، تمتد الحاويات 24 ساعة. أما عند استخدام 'hours'، فتمتد 30 يومًا. يؤدي اختيار مستوى دقة غير مناسب إلى زيادة عدد مستندات الحاويات وسوء الضغط — لذا طابق دائمًا مستوى الدقة مع معدل وصول بياناتك الفعلي.

// Sensor sends data every second — use 'seconds'
db.createCollection('iotData', {
  timeseries: {
    timeField: 'ts',
    metaField: 'device',
    granularity: 'seconds'
  }
})

// Aggregated hourly metric — use 'hours'
db.createCollection('hourlyMetrics', {
  timeseries: {
    timeField: 'ts',
    metaField: 'service',
    granularity: 'hours'
  }
})

بنية المستندات عند الإدراج في السلاسل الزمنية

يجب أن تتضمن المستندات المُدرجة في مجموعة سلاسل زمنية timeField على هيئة BSON Date صالح. وتحدّد قيمة metaField السلسلة التي ينتمي إليها هذا القياس (مثل معرّف الجهاز). تُسمّى جميع الحقول الأخرى حقول القياس، ويمكنها احتواء أي قيمة BSON. سيرفض MongoDB المستندات التي يَغيب عنها timeField أو التي لا يكون فيها من نوع Date.

// Valid time series document
{
  timestamp: new Date(),   // timeField — must be a Date
  sensorId: 'sensor-42',  // metaField — identifies the series
  temperature: 23.7,       // measurement field
  humidity: 55.2,          // measurement field
  pressure: 1013.4         // measurement field
}

إدراج قياس واحد وعدة قياسات

أدرج البيانات في مجموعة السلاسل الزمنية بالطريقة نفسها تمامًا التي تستخدمها مع مجموعة عادية — باستخدام insertOne() أو insertMany(). يتولى MongoDB إدارة التجميع في الحاويات داخليًا تلقائيًا. ومن أفضل الممارسات تجميع عمليات الإدراج باستخدام insertMany() عند تحميل البيانات التاريخية، إذ يوزّع ذلك تكلفة إنشاء الحاويات على عدد كبير من القياسات.

// Insert a single measurement
db.sensorReadings.insertOne({
  timestamp: new Date('2024-06-01T10:00:00Z'),
  sensorId: 'sensor-42',
  temperature: 22.5,
  humidity: 60.1
})

// Bulk insert historical data
db.sensorReadings.insertMany([
  { timestamp: new Date('2024-06-01T10:01:00Z'), sensorId: 'sensor-42', temperature: 22.6, humidity: 60.0 },
  { timestamp: new Date('2024-06-01T10:02:00Z'), sensorId: 'sensor-42', temperature: 22.4, humidity: 60.3 }
])

إضافة انتهاء صلاحية تلقائي باستخدام expireAfterSeconds

تدعم مجموعات السلاسل الزمنية انتهاء صلاحية البيانات تلقائيًا عبر الخيار expireAfterSeconds. بعد ضبطه، يحذف مؤشر TTL الخلفي في MongoDB الحاويات بأكملها عندما تصبح جميع القياسات الموجودة فيها أقدم من الحد المحدد. وهذا أكثر كفاءة من فهرس TTL عادي، لأن مستندات الحاويات الداخلية تُحذف دفعة واحدة بدلًا من حذف مستندات القياسات الفردية.

// Create with 90-day TTL
db.createCollection('sensorReadings', {
  timeseries: {
    timeField: 'timestamp',
    metaField: 'sensorId',
    granularity: 'minutes'
  },
  expireAfterSeconds: 60 * 60 * 24 * 90  // 90 days
})

الاستعلام عن مجموعات السلاسل الزمنية

تبدو الاستعلامات على مجموعات السلاسل الزمنية مطابقة لاستعلامات find() العادية. ويستخدم MongoDB بنية الحاويات الداخلية تلقائيًا لتجاوز الحاويات غير ذات الصلة عند التصفية حسب النطاق الزمني. كما أن التصفية حسب metaField فعّالة جدًا. تجنّب الاستعلام باستخدام حقول القياس فقط من دون مرشح زمني أو مرشح meta، لأن ذلك يفرض فحصًا كاملًا للمجموعة عبر جميع الحاويات.

// Query last 24 hours for a specific sensor
const since = new Date(Date.now() - 24 * 60 * 60 * 1000)

db.sensorReadings.find({
  sensorId: 'sensor-42',
  timestamp: { $gte: since }
}).sort({ timestamp: 1 })

تحديث granularity بعد الإنشاء

يمكنك زيادة مستوى دقة مجموعة سلاسل زمنية موجودة (مثل الانتقال من 'seconds' إلى 'minutes') باستخدام الأمر collMod. لكن لا يمكنك تقليله — إذ سيُرجع MongoDB خطأً إذا حاولت الانتقال من 'minutes' إلى 'seconds'. ويمكن أيضًا تحديث إعداد expireAfterSeconds باستخدام collMod من دون إعادة إنشاء المجموعة.

// Increase granularity from seconds to minutes
db.runCommand({
  collMod: 'sensorReadings',
  timeseries: { granularity: 'minutes' }
})

// Update expireAfterSeconds to 30 days
db.runCommand({
  collMod: 'sensorReadings',
  expireAfterSeconds: 60 * 60 * 24 * 30
})

القيود والتقييدات

تخضع مجموعات السلاسل الزمنية لبعض القيود المهمة مقارنة بالمجموعات العادية. لا يمكنك تقسيم مجموعة سلاسل زمنية إلى أجزاء باستخدام timeField وحده — إذ يلزم مكوّن metaField مُجزّأ بالتجزئة. كما أن عمليات التحديث والحذف محدودة: قبل MongoDB 5.1، لم يكن مدعومًا سوى الحذف حسب metaField أو النطاق الزمني. إضافة إلى ذلك، لا تدعم مجموعات السلاسل الزمنية الفهارس الفريدة أو الفهارس المتناثرة أو المجموعات محدودة الحجم.

التحقق من نوع المجموعة وخياراتها

بعد إنشاء مجموعة سلاسل زمنية، افحصها باستخدام db.getCollectionInfos() للتأكد من تخزين خيارات timeseries بشكل صحيح. ويمكنك أيضًا تشغيل db.sensorReadings.stats() لعرض إحصاءات التخزين، بما في ذلك عدد مستندات الحاويات الداخلية التي يديرها MongoDB خلف الكواليس.

// Inspect time series collection metadata
db.getCollectionInfos({ name: 'sensorReadings' })

// Check storage stats
db.sensorReadings.stats()

تحقّق سريع

اختبر مدى فهمك لمفاهيم MongoDB وقواعد بيانات NoSQL التي تناولها هذا الدرس.

مراجعة الدرس

تعلّمت في هذا الدرس أن مجموعات السلاسل الزمنية تستخدم تنسيق حاويات عموديًا لأحمال العمل التي تتطلب ضغطًا عاليًا وإلحاقًا كثيفًا، وأن الخيارات الأساسية الثلاثة (timeField وmetaField وgranularity) تتحكم في طريقة تنظيم القياسات وتجميعها في الحاويات، وأن expireAfterSeconds يتيح التخلص التلقائي الفعّال من البيانات القديمة على مستوى الحاوية. في الخطوة التالية، سنستكشف إدراج بيانات السلاسل الزمنية والاستعلام عنها بعمق.

البدء مجانًا

تعلم JavaScript مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «إنشاء مجموعة سلاسل زمنية» مجاني؟

نعم — نص درس «إنشاء مجموعة سلاسل زمنية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة MongoDB Academy، انتقل إلى CoddyKit PRO. تتضمن دورة MongoDB Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنشاء مجموعة سلاسل زمنية»؟

سينشئ المتعلمون مجموعة سلاسل زمنية، مع تحديد خيارات timeField وmetaField وgranularity. تتمرن على MongoDB Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ MongoDB Academy؟

لا تُشترط خبرة سابقة. MongoDB Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «إنشاء مجموعة سلاسل زمنية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس MongoDB Academy هذا؟

نعم. كل درس في MongoDB Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء مجموعة سلاسل زمنية
  2. إدراج بيانات السلاسل الزمنية والاستعلام عنها
  3. تجميعات النوافذ على السلاسل الزمنية
  4. انتهاء صلاحية البيانات تلقائيًا باستخدام expireAfterSeconds
← العودة إلى MongoDB Academy