Деректердің абстрактілі қабаты
Деректердің абстрактілі қабаты, бірыңғай жүйелік деректер моделі, жабдықты абстракциялау және қолданбаларды физикалық сақтаудан ажырататын деректерді нормалау.
Деректердің абстрактілі қабаты деректердің физикалық сақталуы мен оларды пайдаланатын қолданбалардың арасында орналасады. Ол физикалық іске асырылуы мен аппараттық ерекшеліктерін абстракциялап, деректермен жұмыс істеудің бірыңғай интерфейсін ұсынады. Ол мынаны қамтамасыз етеді:
- Аппараттық тәуелсіздік: Деректер әртүрлі құрылғыларда (серверлерде, бұлтта, 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 | Оқиға уақыты (мысалы, timestamp). |
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
}
]Жабдықты абстракциялаудың артықшылықтары
- Аппараттық тәуелсіздік: Қолданбалар деректердің физикалық тұрғыда қайда орналасқанын білместен олармен жұмыс істейді.
- Икемділік: Жаңа құрылғыларды оңай қосу немесе бар құрылғыларды өзгерту.
- Әзірлеуді жеңілдету: Әзірлеушілер аппараттық егжей-тегжейге алаңдамай, абстрактілі нысандармен жұмыс істейді.
- Ауқымдылық: Деректерді әртүрлі құрылғыларда сақтауға болады, бірақ жүйе біркелкі түрде жұмыс істей береді.
Деректерді нормалау
Деректерді нормалау — дерекқордағы деректерді артықтықты барынша азайтатын және деректердің тұтастығын жақсартатын тәсілмен ұйымдастыру процесі. Деректердің абстрактілі қабаты контекстінде нормалау әртүрлі жабдық түрлері мен дереккөздерді өңдеу үшін пайдалануға болатын бірыңғай, тиімді деректер моделін құруда негізгі рөл атқарады.
Деректерді нормалау деректерді логикалық кестелерге бөліп, олардың арасында байланыстар орнатады, бұл мынаған бағытталған:
- Қайталанатын деректерді жою.
- Деректерді сүйемелдеу мен жаңартуды жеңілдету.
- Деректердің тұтастығын қамтамасыз ету.
- Сұраныстардың өнімділігін арттыру.
Жүйенің бірыңғай деректер моделі атомдық (скалярлық) мәндер тұрғысынан (үшінші) қалыпты Бойс-Кодд пішініне келтірілген. Деректер моделінің кейбір нысандары сирек кездесетін, стандартты емес атрибуттарды өңдеуді оңтайландыру үшін құрама құрылымдарды пайдаланады.
Нормалаудың артықшылықтары
- Артықтықты жояды: Деректер бір жерде сақталады, бұл артықтықты азайтады.
- Деректердің тұрақтылығы: Деректердің тұрақтылығын сақтау жеңілдейді.
- Икемділік: Деректер құрылымына өзгерістер енгізу оңай.
- Өнімділік: Сұраныстардың өнімділігі артады (көп жағдайда).
Деректердің абстрактілі қабаты контекстіндегі нормалау
Деректерді нормалау — деректердің абстрактілі қабатын жобалаудағы маңызды қадам.
Ол мынаған мүмкіндік береді:
- Әртүрлі жабдық түрлерін өңдеу үшін пайдалануға болатын бірыңғай деректер моделін құру.
- Деректердің артықтығы мен қайталануын жою.
- Дереккөзіне қарамастан деректердің тұтастығы мен тұрақтылығын қамтамасыз ету.
- Жаңа құрылғылар мен жүйелерді интеграциялауды жеңілдету.
Қатысты тақырыптар
Бұл бет пайдалы болды ма?
Пікіріңіз үшін рақмет!