Siklame ngempumelelo ukwakheka kwesizindalwazi sethu se-PostgreSQL ukuze sigcine izincwadi, unyaka usudlulile, abasebenzisi bayawugcwalisa ngenkuthalo, futhi manje usuqukethe. izigidi zamarekhodi, futhi... into yaqala ukwehla.
Ingxenye 1: ukuklama uhlaka oluyisisekelo - Ingxenye 2: isigaba "senzuzo"
Point wukuthi Njengoba ubukhulu betafula bukhula, kanjalo "nokujula" kwezinkomba. - nakuba i-logarithmically. Kodwa ngokuhamba kwesikhathi lokhu kuphoqa iseva ukuthi yenze imisebenzi efanayo yokufunda/ukubhala cubungula amakhasi edatha aphindwe kaningikunasekuqaleni.
Yilapho esiza khona ukuhlenga ukwahlukanisa.
Ake ngiphawule ukuthi asikhulumi ngokushadi, okungukuthi, ukusabalalisa idatha phakathi kwedatha ehlukene noma amaseva. Ngoba ngisho nokuhlukanisa idatha phakathi eziningana amaseva, ngeke ususe inkinga yezinkomba "zokuvuvukala" ngokuhamba kwesikhathi. Kuyacaca ukuthi uma ungakwazi ukukhokhela ukufaka iseva entsha ukusebenza nsuku zonke, izinkinga zakho ngeke zisalala nhlobo endizeni yedatha ethile.
Ngeke sicabangele izikripthi ezithile zokuqalisa ukwahlukanisa "ku-hardware", kodwa indlela ngokwayo - ukuthi yini futhi kanjani okufanele "inqunywe zibe izingcezu", nokuthi isifiso esinjalo siholelaphi.
Umqondo
Ake siphinde sichaze umgomo wethu: sifuna ukwenza isiqiniseko sokuthi namuhla, kusasa, futhi ngonyaka, inani ledatha elifundwe yi-PostgreSQL ngesikhathi sanoma yikuphi ukusebenza kokufunda/ukubhala lihlala lifana.
Noma yikuphi idatha eqoqwe ngokulandelana kwesikhathi (imiyalezo, imibhalo, izingodo, izingobo zomlando, ...) ukukhetha okungokwemvelo njengokhiye wokuhlukanisa usuku/isikhathi somcimbi. Esimweni sethu, umcimbi onjalo isikhathi sokuthumela umlayezo.
Qaphela ukuthi abasebenzisi cishe njalo sebenza kuphela nalezo "zakamuva". idatha enjalo - bafunda imilayezo yakamuva, bahlaziye izingodo zakamuva,... Cha, kunjalo, bangakwazi ukupheqa baphindele emuva ngesikhathi, kodwa lokhu bakwenza kuyaqabukela.
Kusukela kulezi zingqinamba kuyacaca ukuthi isixazululo esilungile somlayezo sizoba izigaba "zansuku zonke". - Phela, umsebenzisi wethu cishe uzofunda njalo lokho okufike kuye "namuhla" noma "izolo".
Uma sibhala futhi sifunde cishe esigabeni esisodwa kuphela phakathi nosuku, khona-ke lokhu kusinika nathi ukusetshenziswa ngokuphumelelayo kwememori nediski - njengoba zonke izinkomba zezigaba zingena kalula ku-RAM, ngokungafani nalezo "ezinkulu nezinamafutha" kulo lonke ithebula.
Igxathu emvakwe gxathu
Ngokuvamile, konke okushiwo ngenhla kuzwakala njengenzuzo eyodwa eqhubekayo. Futhi kungenzeka, kodwa kulokhu kuzodingeka sizame kanzima - ngoba isinqumo sokuhlukanisa enye yamabhizinisi siholela esidingweni "sokubona" okuhlobene.
Umlayezo, izakhiwo zawo kanye nokuqagela
Njengoba sinqume ukunqamula imilayezo ngamadethi, kunengqondo ukuphinda sihlukanise izinhlangano-izakhiwo ezincike kuzo (amafayela anamathiselwe, uhlu lwabamukeli), kanye futhi ngosuku lomlayezo.
Njengoba omunye wemisebenzi yethu evamile uwukubuka ngokunembile amarejista emilayezo (engafundiwe, engenayo, yonke), kunengqondo futhi “ukuyidwebela” ekuhlukaniseni ngezinsuku zemiyalezo.
Sengeza ukhiye wokuhlukanisa (usuku lomlayezo) kuwo wonke amatafula: abamukeli, ifayela, okubhaliswa. Awudingi ukuyengeza kumlayezo ngokwawo, kodwa sebenzisa i-DateTime ekhona.
Izindikimba
Njengoba kunesihloko esisodwa kuphela semilayezo embalwa, ayikho indlela "yokusisika" ngemodeli efanayo; kufanele uthembele kokunye. Esimeni sethu kuhle usuku lomlayezo wokuqala obhalwe ngawo - okungukuthi, umzuzu wokudala, empeleni, wesihloko.
Engeza ukhiye wokuhlukanisa (idethi yesihloko) kuwo wonke amathebula: isihloko, umhlanganyeli.
Kodwa manje sinezinkinga ezimbili ngesikhathi esisodwa:
- Kukusiphi isigaba okufanele ngibheke imilayezo ngesihloko?
- Kukusiphi isigaba okufanele ngibheke isihloko esivela kumlayezo?
Yebo, singaqhubeka nokusesha kuzo zonke izigaba, kodwa lokhu kuzodabukisa kakhulu futhi kuzokuphikisa konke ukuwina kwethu. Ngakho-ke, ukuze sazi ukuthi kufanele sibheke kuphi ngempela, sizokwenza izixhumanisi/izinkomba ezinengqondo ezigabeni:
- sizokwengeza emlayezo inkambu yedethi yesihloko
- ake sengeze esihlokweni idethi yomlayezo isethiwe lokhu kubhalelana (kungaba itafula elihlukile, noma uxhaxha lwezinsuku)
Njengoba kuzoba nezinguquko ezimbalwa ohlwini lwezinsuku zemiyalezo zombhalo ngamunye (ngemuva kwakho konke, cishe yonke imilayezo iwela ezinsukwini ezi-1-2 eziseduze), ngizogxila kule nketho.
Sekukonke, ukwakheka kwesizindalwazi sethu kuthathe ngale ndlela elandelayo, kucatshangelwa ukwahlukanisa:
Amathebula: RU, uma unenzondo kuzinhlamvu zamagama zesiCyrillic emagameni amatafula/izinkambu, kungcono ukungabheki
-- секции по дате сообщения
CREATE TABLE "Сообщение_YYYYMMDD"(
"Сообщение"
uuid
PRIMARY KEY
, "Тема"
uuid
, "ДатаТемы"
date
, "Автор"
uuid
, "ДатаВремя" -- используем как дату
timestamp
, "Текст"
text
);
CREATE TABLE "Адресат_YYYYMMDD"(
"ДатаСообщения"
date
, "Сообщение"
uuid
, "Персона"
uuid
, PRIMARY KEY("Сообщение", "Персона")
);
CREATE TABLE "Файл_YYYYMMDD"(
"ДатаСообщения"
date
, "Файл"
uuid
PRIMARY KEY
, "Сообщение"
uuid
, "BLOB"
uuid
, "Имя"
text
);
CREATE TABLE "РеестрСообщений_YYYYMMDD"(
"ДатаСообщения"
date
, "Владелец"
uuid
, "ТипРеестра"
smallint
, "ДатаВремя"
timestamp
, "Сообщение"
uuid
, PRIMARY KEY("Владелец", "ТипРеестра", "Сообщение")
);
CREATE INDEX ON "РеестрСообщений_YYYYMMDD"("Владелец", "ТипРеестра", "ДатаВремя" DESC);
-- секции по дате темы
CREATE TABLE "Тема_YYYYMMDD"(
"ДатаТемы"
date
, "Тема"
uuid
PRIMARY KEY
, "Документ"
uuid
, "Название"
text
);
CREATE TABLE "УчастникТемы_YYYYMMDD"(
"ДатаТемы"
date
, "Тема"
uuid
, "Персона"
uuid
, PRIMARY KEY("Тема", "Персона")
);
CREATE TABLE "ДатыСообщенийТемы_YYYYMMDD"(
"ДатаТемы"
date
, "Тема"
uuid
PRIMARY KEY
, "Дата"
date
);
Yonga isenti elihle
Hhayi-ke, kuthiwani uma singasebenzisi
Ngakho uma unjalo Ingabe ukhathazeke kakhulu ngenani ledatha egcinwe?, khona-ke ungakwazi ukususa lezi zinkambu "ezengeziwe" futhi ukhulume namathebula athile. Yiqiniso, zonke izinketho ezivela ezigabeni eziningana kuleli cala kuzodingeka zidluliselwe ohlangothini lwesicelo.
Source: www.habr.com