Деректердің абстрактілі қабаты

Деректердің абстрактілі қабаты, бірыңғай жүйелік деректер моделі, жабдықты абстракциялау және қолданбаларды физикалық сақтаудан ажырататын деректерді нормалау.

Деректердің абстрактілі қабаты деректердің физикалық сақталуы мен оларды пайдаланатын қолданбалардың арасында орналасады. Ол физикалық іске асырылуы мен аппараттық ерекшеліктерін абстракциялап, деректермен жұмыс істеудің бірыңғай интерфейсін ұсынады. Ол мынаны қамтамасыз етеді:

  • Аппараттық тәуелсіздік: Деректер әртүрлі құрылғыларда (серверлерде, бұлтта, 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Оқиға уақыты (мысалы, timestamp).
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
  }
]

Жабдықты абстракциялаудың артықшылықтары

  • Аппараттық тәуелсіздік: Қолданбалар деректердің физикалық тұрғыда қайда орналасқанын білместен олармен жұмыс істейді.
  • Икемділік: Жаңа құрылғыларды оңай қосу немесе бар құрылғыларды өзгерту.
  • Әзірлеуді жеңілдету: Әзірлеушілер аппараттық егжей-тегжейге алаңдамай, абстрактілі нысандармен жұмыс істейді.
  • Ауқымдылық: Деректерді әртүрлі құрылғыларда сақтауға болады, бірақ жүйе біркелкі түрде жұмыс істей береді.

Деректерді нормалау

Деректерді нормалау — дерекқордағы деректерді артықтықты барынша азайтатын және деректердің тұтастығын жақсартатын тәсілмен ұйымдастыру процесі. Деректердің абстрактілі қабаты контекстінде нормалау әртүрлі жабдық түрлері мен дереккөздерді өңдеу үшін пайдалануға болатын бірыңғай, тиімді деректер моделін құруда негізгі рөл атқарады.

Деректерді нормалау деректерді логикалық кестелерге бөліп, олардың арасында байланыстар орнатады, бұл мынаған бағытталған:

  • Қайталанатын деректерді жою.
  • Деректерді сүйемелдеу мен жаңартуды жеңілдету.
  • Деректердің тұтастығын қамтамасыз ету.
  • Сұраныстардың өнімділігін арттыру.

Жүйенің бірыңғай деректер моделі атомдық (скалярлық) мәндер тұрғысынан (үшінші) қалыпты Бойс-Кодд пішініне келтірілген. Деректер моделінің кейбір нысандары сирек кездесетін, стандартты емес атрибуттарды өңдеуді оңтайландыру үшін құрама құрылымдарды пайдаланады.

Нормалаудың артықшылықтары

  • Артықтықты жояды: Деректер бір жерде сақталады, бұл артықтықты азайтады.
  • Деректердің тұрақтылығы: Деректердің тұрақтылығын сақтау жеңілдейді.
  • Икемділік: Деректер құрылымына өзгерістер енгізу оңай.
  • Өнімділік: Сұраныстардың өнімділігі артады (көп жағдайда).

Деректердің абстрактілі қабаты контекстіндегі нормалау

Деректерді нормалау — деректердің абстрактілі қабатын жобалаудағы маңызды қадам.

Ол мынаған мүмкіндік береді:

  • Әртүрлі жабдық түрлерін өңдеу үшін пайдалануға болатын бірыңғай деректер моделін құру.
  • Деректердің артықтығы мен қайталануын жою.
  • Дереккөзіне қарамастан деректердің тұтастығы мен тұрақтылығын қамтамасыз ету.
  • Жаңа құрылғылар мен жүйелерді интеграциялауды жеңілдету.

Қатысты тақырыптар

Соңғы жаңарту

Бұл бет пайдалы болды ма?