طبقة البيانات المجرّدة
طبقة البيانات المجرّدة، ونموذج بيانات النظام الموحّد، وتجريد المعدّات، وتطبيع البيانات التي تفصل التطبيقات عن التخزين الفيزيائي.
تقع طبقة البيانات المجرّدة بين التخزين الفيزيائي للبيانات والتطبيقات التي تستخدمها. وهي تُجرّد التنفيذ الفيزيائي وخصائص العتاد، فتوفّر واجهة موحّدة للتعامل مع البيانات. وتقدّم ما يلي:
- الاستقلال عن العتاد: تُخزَّن البيانات على أجهزة مختلفة (الخوادم، السحابة، أجهزة IoT)، لكن التطبيق يتعامل معها عبر واجهة موحّدة.
- تبسيط التطوير: يعمل المطوّرون مع كيانات مجرّدة دون القلق بشأن تفاصيل التخزين الفيزيائي.
- المرونة: لا تؤثّر التغييرات في البنية الفيزيائية للبيانات (على سبيل المثال، الانتقال إلى السحابة) في التطبيقات.
نموذج البيانات الموحّد
يستخدم النظام نموذج بيانات موحّداً مُكيَّفاً مع أنواع مختلفة من المعدّات، ويتيح لك التعامل معها بطريقة متجانسة بصرف النظر عن مصدرها أو نوع المعدّات. ويشمل بِنى بيانات مشتركة، وقواعد معالجة موحّدة، واتساقاً دلالياً للبيانات عبر جميع الأنظمة والأنظمة الفرعية.
على سبيل المثال، يشمل نموذج بيانات النظام الموحّد ما يلي:
- الكيانات: المعدّات، والقنوات، والجلسات، والوحدات، والمعاملات المرجعية.
- العلاقات: للمعدّات قنوات، والقنوات مرتبطة بالبيانات، والبيانات مرتبطة بالجلسات.
- السمات: تُعرَّف سمات لكل كيان (على سبيل المثال،
equipment.serial_numberوchannel_data.value).
بنية نموذج بيانات النظام الموحّد
نموذج بيانات النظام الموحّد هو بنية لتخزين وإدارة البيانات المتعلّقة بالمعدّات والقنوات والجلسات والقياسات. لننظر في كل جدول والغرض منه، وكذلك العلاقات بينها.
الجدول channel_data
يخزّن هذا الجدول البيانات الواردة من قنوات المعدّات ضمن جلسات محدّدة.
| الحقل | النوع | الوصف |
|---|---|---|
id | bigint | معرّف فريد للسجلّ (المفتاح الأساسي). |
equipment_id | bigint | مرجع إلى المعدّات (equipment.id). |
seance_id | bigint | مرجع إلى الجلسة (seances.id). |
channel_id | bigint | مرجع إلى القناة (channels.id). |
unit_id | bigint | مرجع إلى وحدة القياس (units.id). |
archive_type_id | integer | مرجع إلى نوع الأرشيف (referenceparameters.id). |
event_time | integer | وقت الحدث (مثل الطابع الزمني). |
value | character varying(100) | القيمة الواردة من القناة. |
created_at | timestamp(6) without time zone | وقت إنشاء السجلّ. |
updated_at | timestamp(6) without time zone | وقت آخر تحديث للسجلّ. |
العلاقات:
- يشير المفتاح الخارجي
unit_idإلى الجدولunits. - يشير المفتاح الخارجي
archive_type_idإلى الجدولreferenceparameters. - يشير المفتاح الخارجي
equipment_idإلى الجدولequipment. - يشير المفتاح الخارجي
channel_idإلى الجدولchannels. - يشير المفتاح الخارجي
seance_idإلى الجدولseances.
الجدول units
يخزّن هذا الجدول وحدات القياس المستخدمة لبيانات القنوات.
| الحقل | النوع | الوصف |
|---|---|---|
id | bigint | معرّف فريد للسجلّ (المفتاح الأساسي). |
name | character varying(30) | اسم وحدة القياس. |
varname | character varying(30) | اسم متغيّر مختصر لوحدة القياس. |
description | character varying(100) | وصف وحدة القياس. |
conversion_factor | double precision | معامل التحويل لوحدة القياس. |
rounding | smallint | عدد المنازل العشرية للتقريب إليها. |
synonyms | character varying[] | مصفوفة المرادفات لوحدة القياس. |
created_at | timestamp(6) without time zone | وقت إنشاء السجلّ. |
updated_at | timestamp(6) without time zone | وقت آخر تحديث للسجلّ. |
الجدول referenceparameters
يخزّن هذا الجدول المعاملات المرجعية مثل أنواع الأرشيف أو مُحدِّدات أخرى.
| الحقل | النوع | الوصف |
|---|---|---|
id | bigint | معرّف فريد للسجلّ (المفتاح الأساسي). |
name | character varying(30) | اسم وحدة القياس. |
varname | character varying(30) | اسم متغيّر مختصر لوحدة القياس. |
description | character varying(100) | وصف وحدة القياس. |
parent_id | integer | مرجع إلى المعامل الأب (التسلسل الهرمي). |
referencemodel_id | integer | مرجع إلى نموذج الدليل. |
created_at | timestamp(6) without time zone | وقت إنشاء السجلّ. |
updated_at | timestamp(6) without time zone | وقت آخر تحديث للسجلّ. |
deleted_at | timestamp(6) without time zone | وقت حذف السجلّ (حذف ناعم). |
العلاقات:
- يشير المفتاح الخارجي
parent_idإلى الجدول نفسه (referenceparameters.id)، ما يتيح بناء تسلسلات هرمية.
الجدول equipment
| الحقل | النوع | الوصف |
|---|---|---|
id | bigint | معرّف فريد للسجلّ (المفتاح الأساسي). |
equipment_type_id | bigint | مرجع إلى نوع المعدّات. |
serial_number | character varying(25) | الرقم التسلسلي للمعدّات. |
manufacture_date | timestamp(6) without time zone | تاريخ تصنيع المعدّات. |
installation_date | timestamp(6) without time zone | تاريخ تركيب المعدّات. |
program_version | character varying(100) | إصدار برمجيات المعدّات. |
created_at | timestamp(6) without time zone | وقت إنشاء السجلّ. |
updated_at | timestamp(6) without time zone | وقت آخر تحديث للسجلّ. |
الجدول channels
يخزّن هذا الجدول معلومات عن قنوات المعدّات.
| الحقل | النوع | الوصف |
|---|---|---|
id | bigint | معرّف فريد للسجلّ (المفتاح الأساسي). |
equipment_type_id | bigint | مرجع إلى نوع المعدّات (equipment_type.id). |
unit_id | bigint | مرجع إلى وحدة القياس (units.id). |
name | character varying(100) | اسم القناة. |
varname | character varying(20) | اسم متغيّر مختصر للقناة. |
created_at | timestamp(6) without time zone | وقت إنشاء السجلّ. |
updated_at | timestamp(6) without time zone | وقت آخر تحديث للسجلّ. |
العلاقات:
- يشير المفتاح الخارجي
equipment_type_idإلى الجدولequipment_type. - يشير المفتاح الخارجي
unit_idإلى الجدولunits.
الجدول seances
يخزّن هذا الجدول معلومات عن جلسات اتصال المعدّات.
| الحقل | النوع | الوصف |
|---|---|---|
id | bigint | معرّف فريد للسجلّ (المفتاح الأساسي). |
telemetry_id | bigint | مرجع إلى القياس عن بُعد (telemetry.id). |
event_time | integer | وقت الحدث. |
evtid | smallint | معرّف الحدث. |
trycnt | smallint | عدد المحاولات. |
tryfl | character varying(12) | علم المحاولة. |
state | smallint | حالة الجلسة. |
btm | integer | شحنة البطارية. |
rssi | integer | قوة الإشارة (إن استُخدمت). |
created_at | timestamp(6) without time zone | وقت إنشاء السجلّ. |
updated_at | timestamp(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:
{
"device_id": "sensor-123",
"timestamp": 1739950861,
"value": 42.5
}يحوّل المهايئ البيانات إلى بنية channel_data:
INSERT INTO channel_data (equipment_id, seance_id, channel_id,
archive_type_id, value, event_time)
VALUES (1, 2, 3, 4, '42.5', 1739950861);طلب البيانات:
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3الاستجابة:
[
{
"id": 123,
"equipment_id": 1,
"seance_id": 2,
"channel_id": 3,
"archive_type_id": 4,
"value": 42.5,
"event_time": 1739950861
}
]مزايا تجريد المعدّات
- الاستقلال عن العتاد: تعمل التطبيقات مع البيانات دون معرفة موقعها الفيزيائي.
- المرونة: إضافة أجهزة جديدة أو تعديل الموجودة بسهولة.
- تبسيط التطوير: يعمل المطوّرون مع كيانات مجرّدة دون القلق بشأن تفاصيل العتاد.
- قابلية التوسّع: يمكن تخزين البيانات على أجهزة مختلفة، لكن النظام يستمر في العمل بطريقة متجانسة.
تطبيع البيانات
تطبيع البيانات هو عملية تنظيم البيانات في قاعدة بيانات بطريقة تقلّل التكرار وتحسّن سلامة البيانات. وفي سياق طبقة البيانات المجرّدة، يؤدّي التطبيع دوراً أساسياً في إنشاء نموذج بيانات موحّد وفعّال يمكن استخدامه للتعامل مع أنواع مختلفة من المعدّات ومصادر البيانات.
يقسّم تطبيع البيانات البياناتِ إلى جداول منطقية ويُنشئ علاقات بينها بهدف:
- إزالة البيانات المكرّرة.
- تبسيط صيانة البيانات وتحديثها.
- ضمان سلامة البيانات.
- تحسين أداء الاستعلامات.
يُختزل نموذج بيانات النظام الموحّد إلى صيغة بويس-كود الطبيعية (الثالثة) من حيث القيم الذرّية (القياسية). وتستخدم بعض كيانات نموذج البيانات بِنى مركّبة لتحسين التعامل مع السمات النادرة وغير المعيارية.
مزايا التطبيع
- إزالة التكرار: تُخزَّن البيانات في مكان واحد، ما يقلّل التكرار.
- اتساق البيانات: يُبسَّط الحفاظ على اتساق البيانات.
- المرونة: من السهل إجراء تغييرات على بنية البيانات.
- الأداء: يتحسّن أداء الاستعلامات (في معظم الحالات).
التطبيع في سياق طبقة البيانات المجرّدة
تطبيع البيانات خطوة مهمة في تصميم طبقة البيانات المجرّدة.
وهو يتيح لك ما يلي:
- إنشاء نموذج بيانات موحّد يمكن استخدامه للتعامل مع أنواع مختلفة من المعدّات.
- إزالة التكرار وازدواجية البيانات.
- ضمان سلامة البيانات واتساقها بصرف النظر عن مصدرها.
- تبسيط دمج الأجهزة والأنظمة الجديدة.
مواضيع ذات صلة
هل كانت هذه الصفحة مفيدة؟
شكرًا على ملاحظاتك!