طبقة البيانات المجرّدة

طبقة البيانات المجرّدة، ونموذج بيانات النظام الموحّد، وتجريد المعدّات، وتطبيع البيانات التي تفصل التطبيقات عن التخزين الفيزيائي.

تقع طبقة البيانات المجرّدة بين التخزين الفيزيائي للبيانات والتطبيقات التي تستخدمها. وهي تُجرّد التنفيذ الفيزيائي وخصائص العتاد، فتوفّر واجهة موحّدة للتعامل مع البيانات. وتقدّم ما يلي:

  • الاستقلال عن العتاد: تُخزَّن البيانات على أجهزة مختلفة (الخوادم، السحابة، أجهزة IoT)، لكن التطبيق يتعامل معها عبر واجهة موحّدة.
  • تبسيط التطوير: يعمل المطوّرون مع كيانات مجرّدة دون القلق بشأن تفاصيل التخزين الفيزيائي.
  • المرونة: لا تؤثّر التغييرات في البنية الفيزيائية للبيانات (على سبيل المثال، الانتقال إلى السحابة) في التطبيقات.

نموذج البيانات الموحّد

يستخدم النظام نموذج بيانات موحّداً مُكيَّفاً مع أنواع مختلفة من المعدّات، ويتيح لك التعامل معها بطريقة متجانسة بصرف النظر عن مصدرها أو نوع المعدّات. ويشمل بِنى بيانات مشتركة، وقواعد معالجة موحّدة، واتساقاً دلالياً للبيانات عبر جميع الأنظمة والأنظمة الفرعية.

على سبيل المثال، يشمل نموذج بيانات النظام الموحّد ما يلي:

  • الكيانات: المعدّات، والقنوات، والجلسات، والوحدات، والمعاملات المرجعية.
  • العلاقات: للمعدّات قنوات، والقنوات مرتبطة بالبيانات، والبيانات مرتبطة بالجلسات.
  • السمات: تُعرَّف سمات لكل كيان (على سبيل المثال، equipment.serial_number وchannel_data.value).

بنية نموذج بيانات النظام الموحّد

نموذج بيانات النظام الموحّد هو بنية لتخزين وإدارة البيانات المتعلّقة بالمعدّات والقنوات والجلسات والقياسات. لننظر في كل جدول والغرض منه، وكذلك العلاقات بينها.

الجدول channel_data

يخزّن هذا الجدول البيانات الواردة من قنوات المعدّات ضمن جلسات محدّدة.

الحقلالنوعالوصف
idbigintمعرّف فريد للسجلّ (المفتاح الأساسي).
equipment_idbigintمرجع إلى المعدّات (equipment.id).
seance_idbigintمرجع إلى الجلسة (seances.id).
channel_idbigintمرجع إلى القناة (channels.id).
unit_idbigintمرجع إلى وحدة القياس (units.id).
archive_type_idintegerمرجع إلى نوع الأرشيف (referenceparameters.id).
event_timeintegerوقت الحدث (مثل الطابع الزمني).
valuecharacter varying(100)القيمة الواردة من القناة.
created_attimestamp(6) without time zoneوقت إنشاء السجلّ.
updated_attimestamp(6) without time zoneوقت آخر تحديث للسجلّ.

العلاقات:

  • يشير المفتاح الخارجي unit_id إلى الجدول units.
  • يشير المفتاح الخارجي archive_type_id إلى الجدول referenceparameters.
  • يشير المفتاح الخارجي equipment_id إلى الجدول equipment.
  • يشير المفتاح الخارجي channel_id إلى الجدول channels.
  • يشير المفتاح الخارجي seance_id إلى الجدول seances.

الجدول units

يخزّن هذا الجدول وحدات القياس المستخدمة لبيانات القنوات.

الحقلالنوعالوصف
idbigintمعرّف فريد للسجلّ (المفتاح الأساسي).
namecharacter varying(30)اسم وحدة القياس.
varnamecharacter varying(30)اسم متغيّر مختصر لوحدة القياس.
descriptioncharacter varying(100)وصف وحدة القياس.
conversion_factordouble precisionمعامل التحويل لوحدة القياس.
roundingsmallintعدد المنازل العشرية للتقريب إليها.
synonymscharacter varying[]مصفوفة المرادفات لوحدة القياس.
created_attimestamp(6) without time zoneوقت إنشاء السجلّ.
updated_attimestamp(6) without time zoneوقت آخر تحديث للسجلّ.

الجدول referenceparameters

يخزّن هذا الجدول المعاملات المرجعية مثل أنواع الأرشيف أو مُحدِّدات أخرى.

الحقلالنوعالوصف
idbigintمعرّف فريد للسجلّ (المفتاح الأساسي).
namecharacter varying(30)اسم وحدة القياس.
varnamecharacter varying(30)اسم متغيّر مختصر لوحدة القياس.
descriptioncharacter varying(100)وصف وحدة القياس.
parent_idintegerمرجع إلى المعامل الأب (التسلسل الهرمي).
referencemodel_idintegerمرجع إلى نموذج الدليل.
created_attimestamp(6) without time zoneوقت إنشاء السجلّ.
updated_attimestamp(6) without time zoneوقت آخر تحديث للسجلّ.
deleted_attimestamp(6) without time zoneوقت حذف السجلّ (حذف ناعم).

العلاقات:

  • يشير المفتاح الخارجي parent_id إلى الجدول نفسه (referenceparameters.id)، ما يتيح بناء تسلسلات هرمية.

الجدول equipment

الحقلالنوعالوصف
idbigintمعرّف فريد للسجلّ (المفتاح الأساسي).
equipment_type_idbigintمرجع إلى نوع المعدّات.
serial_numbercharacter varying(25)الرقم التسلسلي للمعدّات.
manufacture_datetimestamp(6) without time zoneتاريخ تصنيع المعدّات.
installation_datetimestamp(6) without time zoneتاريخ تركيب المعدّات.
program_versioncharacter varying(100)إصدار برمجيات المعدّات.
created_attimestamp(6) without time zoneوقت إنشاء السجلّ.
updated_attimestamp(6) without time zoneوقت آخر تحديث للسجلّ.

الجدول channels

يخزّن هذا الجدول معلومات عن قنوات المعدّات.

الحقلالنوعالوصف
idbigintمعرّف فريد للسجلّ (المفتاح الأساسي).
equipment_type_idbigintمرجع إلى نوع المعدّات (equipment_type.id).
unit_idbigintمرجع إلى وحدة القياس (units.id).
namecharacter varying(100)اسم القناة.
varnamecharacter varying(20)اسم متغيّر مختصر للقناة.
created_attimestamp(6) without time zoneوقت إنشاء السجلّ.
updated_attimestamp(6) without time zoneوقت آخر تحديث للسجلّ.

العلاقات:

  • يشير المفتاح الخارجي equipment_type_id إلى الجدول equipment_type.
  • يشير المفتاح الخارجي unit_id إلى الجدول units.

الجدول seances

يخزّن هذا الجدول معلومات عن جلسات اتصال المعدّات.

الحقلالنوعالوصف
idbigintمعرّف فريد للسجلّ (المفتاح الأساسي).
telemetry_idbigintمرجع إلى القياس عن بُعد (telemetry.id).
event_timeintegerوقت الحدث.
evtidsmallintمعرّف الحدث.
trycntsmallintعدد المحاولات.
tryflcharacter varying(12)علم المحاولة.
statesmallintحالة الجلسة.
btmintegerشحنة البطارية.
rssiintegerقوة الإشارة (إن استُخدمت).
created_attimestamp(6) without time zoneوقت إنشاء السجلّ.
updated_attimestamp(6) without time zoneوقت آخر تحديث للسجلّ.

البنية العامة والعلاقات

الجدول الرئيسيchannel_data، الذي يربط بيانات القنوات بالمعدّات والجلسات والوحدات.

جداول العلاقات:

  • units — وحدات القياس.
  • referenceparameters — أنواع الأرشيف ومُحدِّدات أخرى.

جداول المعدّات:

  • equipment — معلومات المعدّات.
  • channels — قنوات المعدّات.

جدول الجلساتseances، الذي يخزّن معلومات عن جلسات الاتصال.

مثال على الاستخدام:

  • تَرِد بيانات القنوات (channel_data) من المعدّات (equipment) ضمن جلسات محدّدة (seances).
  • لكل قناة (channels) وحدة القياس الخاصة بها (units).
  • يحدّد نوع الأرشيف (referenceparameters) كيفية تخزين البيانات أو معالجتها.

مزايا النموذج الموحّد

يوفّر نموذج البيانات هذا المرونة وقابلية التوسّع لتخزين وتحليل البيانات الواردة من معدّات مختلفة.

من مزايا نموذج البيانات الموحّد:

  • الاتساق: للبيانات البنية والدلالة نفسها عبر جميع الأنظمة.
  • قابلية التوسّع: من السهل إضافة مصادر بيانات أو أنواع معدّات جديدة.
  • حماية البيانات: آليات موحّدة للمصادقة والتفويض والتشفير.
  • تبسيط التحليل: يمكن تحليل البيانات بأدوات موحّدة.

تجريد المعدّات

تجريد المعدّات مبدأ أساسي في تصميم النظام يفصل منطق التعامل مع البيانات عن الخصائص الفيزيائية للمعدّات. وهذا مهم على نحو خاص في الأنظمة التي تستخدم أجهزة غير متجانسة.

يعني تجريد المعدّات أن النظام يتعامل مع البيانات على مستوى منطقي مستقل عن الأجهزة الفيزيائية التي تُخزَّن البيانات أو تُعالَج عليها. ويتحقّق ذلك عبر ما يلي:

  • توحيد الواجهات: طريقة واحدة للوصول إلى البيانات بصرف النظر عن المعدّات.
  • إخفاء تفاصيل التنفيذ: يُخفى عن التطبيقات الموقع الفيزيائي للبيانات وبروتوكولات النقل وغيرها من الجوانب التقنية.
  • المهايئات: تحويل البيانات من صيغة خاصة بالمعدّات إلى صيغة موحّدة.

تنفيذ تجريد المعدّات

يوضّح المثال التالي كيفية تنفيذ هذا النهج في نظامنا. وهو يتتبّع البيانات من جهاز IoT عبر مهايئ، إلى نموذج البيانات الموحّد، ثم خروجاً عبر الـ API.

لِنأخذ في الحسبان جهاز IoT يرسل بيانات استهلاك الغاز. تتيح لنا الخوارزميات المُنفّذة ما يلي:

  • تلقّي البيانات من الجهاز عبر مهايئ.
  • تحويلها إلى بنية channel_data.
  • تخزينها في قاعدة بيانات.
  • توفير الوصول إلى البيانات عبر الـ API.

لكل نوع من المعدّات تُنشأ مهايئات تتعامل مع البروتوكولات الخاصة بالجهاز وتحوّل البيانات إلى صيغة موحّدة.

مثال: تحويل البيانات

بالنسبة إلى جهاز IoT، يمكن أن تَرِد البيانات بصيغة JSON:

example.json
{
  "device_id": "sensor-123",
  "timestamp": 1739950861,
  "value": 42.5
}

يحوّل المهايئ البيانات إلى بنية channel_data:

example.sql
INSERT INTO channel_data (equipment_id, seance_id, channel_id,
 archive_type_id, value, event_time)
VALUES (1, 2, 3, 4, '42.5', 1739950861);

طلب البيانات:

Request example
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3

الاستجابة:

Response example
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]

مزايا تجريد المعدّات

  • الاستقلال عن العتاد: تعمل التطبيقات مع البيانات دون معرفة موقعها الفيزيائي.
  • المرونة: إضافة أجهزة جديدة أو تعديل الموجودة بسهولة.
  • تبسيط التطوير: يعمل المطوّرون مع كيانات مجرّدة دون القلق بشأن تفاصيل العتاد.
  • قابلية التوسّع: يمكن تخزين البيانات على أجهزة مختلفة، لكن النظام يستمر في العمل بطريقة متجانسة.

تطبيع البيانات

تطبيع البيانات هو عملية تنظيم البيانات في قاعدة بيانات بطريقة تقلّل التكرار وتحسّن سلامة البيانات. وفي سياق طبقة البيانات المجرّدة، يؤدّي التطبيع دوراً أساسياً في إنشاء نموذج بيانات موحّد وفعّال يمكن استخدامه للتعامل مع أنواع مختلفة من المعدّات ومصادر البيانات.

يقسّم تطبيع البيانات البياناتِ إلى جداول منطقية ويُنشئ علاقات بينها بهدف:

  • إزالة البيانات المكرّرة.
  • تبسيط صيانة البيانات وتحديثها.
  • ضمان سلامة البيانات.
  • تحسين أداء الاستعلامات.

يُختزل نموذج بيانات النظام الموحّد إلى صيغة بويس-كود الطبيعية (الثالثة) من حيث القيم الذرّية (القياسية). وتستخدم بعض كيانات نموذج البيانات بِنى مركّبة لتحسين التعامل مع السمات النادرة وغير المعيارية.

مزايا التطبيع

  • إزالة التكرار: تُخزَّن البيانات في مكان واحد، ما يقلّل التكرار.
  • اتساق البيانات: يُبسَّط الحفاظ على اتساق البيانات.
  • المرونة: من السهل إجراء تغييرات على بنية البيانات.
  • الأداء: يتحسّن أداء الاستعلامات (في معظم الحالات).

التطبيع في سياق طبقة البيانات المجرّدة

تطبيع البيانات خطوة مهمة في تصميم طبقة البيانات المجرّدة.

وهو يتيح لك ما يلي:

  • إنشاء نموذج بيانات موحّد يمكن استخدامه للتعامل مع أنواع مختلفة من المعدّات.
  • إزالة التكرار وازدواجية البيانات.
  • ضمان سلامة البيانات واتساقها بصرف النظر عن مصدرها.
  • تبسيط دمج الأجهزة والأنظمة الجديدة.

مواضيع ذات صلة

آخر تحديث في

هل كانت هذه الصفحة مفيدة؟