wiki:AdvancedTopics

Version 6 (modified by 231105, 5 days ago) ( diff )

--

Напредна тема

Зошто се одлучивме за темата Партиционирање ?

Во овој проект се одлучивме да примениме партиционирање на табели (table partitioning) со цел да се подобрат перформансите, скалабилноста и одржливоста на базата на податоци. Системот претставува железничка платформа каде што се генерира голем обем на податоци, особено за патувања, билети и плаќања, кои со тек на време значително се зголемуваат. Поради тоа, класичен пристап со една голема табела би довел до намалени перформанси и побавно извршување на SQL барања.

За решавање на овој проблем користевме RANGE партиционирање базирано на временски атрибути, бидејќи податоците во системот се природно временски ориентирани, освен за билетите за нив користевме HASH партиционирање.

## 1. Train Trip табела – партиционирање по departure_time

Табелата Train_Trip претставува централна табела во системот, бидејќи ги содржи сите информации за железничките патувања, како што се времето на поаѓање и пристигнување, статусот на патувањето, поврзаниот воз, како и вработените кои се вклучени во неговото извршување.

---

### Причини за партиционирање

#### • Висока фреквенција на податоци Секојдневно се генерираат голем број нови патувања. Со тек на време, оваа табела станува една од најголемите во целиот систем, што може да доведе до намалување на перформансите при пребарување и обработка на податоци.

---

#### • Природна временска структура Секое патување има точно дефиниран атрибут departure_time. Овој атрибут е идеален за RANGE партиционирање, бидејќи податоците природно се групираат по временски интервали (месеци/години).

---

#### • Типични прашања во системот Во реални услови, најчестите барања за оваа табела се од типот:

  • „Сите патувања во одреден месец“
  • „Патувања во 2026 година“
  • „Доцнења во последната недела“

Овие барања бараат ефикасно временско филтрирање, кое со партиционирање се извршува значително побрзо, бидејќи се пребарува само релевантната партиција, а не целата табела.

---

### Како помага партиционирањето

Со примена на месечни партиции, PostgreSQL работи само со мал дел од податоците (приближно 1/12 од годишните податоци), наместо да ја скенира целата табела. Ова значително ја подобрува брзината на:

  • SELECT операции
  • UPDATE операции
  • DELETE операции

---

#### • DEFAULT партиција Дополнително, се користи и DEFAULT партиција, која обезбедува стабилност на системот. Таа ги прифаќа сите записи кои не спаѓаат во дефинираните временски интервали и спречува грешки при внесување на податоци.

Attachments (22)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.