Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded: erinevus redaktsioonide vahel
| (ei näidata sama kasutaja 28 vahepealset redaktsiooni) | |||
| 4. rida: | 4. rida: | ||
* <b>Distributed databases</b> teema: andmebaas on liiga suur ja/või liiga palju kasutajaid, et üks masin välja veaks, vaja jagada töö hulga masinate vahel | * <b>Distributed databases</b> teema: andmebaas on liiga suur ja/või liiga palju kasutajaid, et üks masin välja veaks, vaja jagada töö hulga masinate vahel | ||
== Data warehouse teema: kuidas eri andmebaase integreerida == | == Data warehouse teema: kuidas eri andmebaase integreerida == | ||
| 29. rida: | 28. rida: | ||
Veidi sarnane või seotud teema on <b>Linked data</b>, mis on teine suund/eesmärk integreerimiseks: andmete scrapemine webist ja kogumine apidest ehk machine-readable web. | Veidi sarnane või seotud teema on <b>Linked data</b>, mis on teine suund/eesmärk integreerimiseks: andmete scrapemine webist ja kogumine apidest ehk machine-readable web. | ||
Selle ideoloogiline fookus läks "semantic web" projekti, mis muutus akadeemiliseks ja ebapraktiliseks. Põhiefekt oli push kasutada rdf-i universaalse dataformaadina. Tim Berners-Lee rebrandis ja refokuseeris oma tegevuse ses suunas hiljem kui "Linked Data" . | |||
<b>Detaile lisaks</b> | |||
* Kalle Tominga loengumaterjalid: [https://www.dropbox.com/scl/fi/wl80qlk26ngw9dih3gzwz/Information-Systems-Integration-and-Governance-public.pdf?rlkey=tdlje3vsqzh4due83re897ixl&st=6x52kjej&dl=0 presentatsioon]. | |||
* [https://www.guru99.com/data-warehousing-tutorial.html Põhjalik tutorial]: loe läbi esimesed osad, kuni (kaasa arvatud) ETL (Extract, Transform, and Load) Process. Kui sul tekib huvi teema vastu, siis vaata täiendavalt järgmisi osi. | |||
* [https://digi.lib.ttu.ee/i/?9926 Kalle Tominga doktoritöö]. Kui sul tekkis huvi teema vastu, siis siin kiireks tutvumiseks, et mis küsimused näiteks tekivad ja kuidas neid lahendada. Põhifookus töös on spetsiifilisel küsimusel, et kuidas uurida, kust andmed jõuavad erinevatesse päringutesse/raportitetesse ja milliseid tabeleid/välju rohkem kasutakse. Loomulikult ei jõua sa seda tööd süvenemisega lugeda. | |||
== Distributed databases teema: kuidas jagada ühe baasi töökoormus mitme masina vahel == | == Distributed databases teema: kuidas jagada ühe baasi töökoormus mitme masina vahel == | ||
| 49. rida: | 54. rida: | ||
=== Olulised (näite)süsteemid: Memcached ja Redis === | === Olulised (näite)süsteemid: Memcached ja Redis === | ||
<b>Memcached</b> is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering. | <b>[https://memcached.org/ Memcached]</b> is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering. | ||
Oluline ja võimsam ja rohkem kasutatav analoogiline süsteem on <b> | Oluline ja võimsam ja rohkem kasutatav analoogiline süsteem on <b>[https://redis.io/ redis]</b>. | ||
Mõlemid on key-value baasid: | Mõlemid on key-value baasid: | ||
| 81. rida: | 86. rida: | ||
** jagad serverite arvuga, saad jäägi: see on serveri nr | ** jagad serverite arvuga, saad jäägi: see on serveri nr | ||
Redise kaks põhierinevust memcachedist: | |||
* Salvestatud väärtused saavad olla keerulisemad andmestruktuurid. | |||
* Redises toimub hajutamine toimub hierarhiliselt master-slave põhimõttel, memcachedis on see lihtsam hashipõhine, nagu ülal kirjeldatud. | |||
Vt ka [https://medium.com/@abhiruchigupta16/redis-and-memcached-explained-ce8d722c50b7 ok võrdlus]. | |||
<!-- | |||
Päris head võrdlused on: [https://www.imaginarycloud.com/blog/redis-vs-memcached/ võrdlus 1] ning sarnane [https://www.linkedin.com/pulse/memcached-vs-redis-which-one-pick-ranjeet-vimal/ võrdlus 2]. Viimases on hea pilt [https://media-exp1.licdn.com/dms/image/C4E12AQH9HIqtqBnQTw/article-inline_image-shrink_1000_1488/0/1520231065014?e=1625097600&v=beta&t=eB85jqWH_qENQ-8Xx3TjvmXW60xyU4qQIHRQs2BP9eM nende arhitektuuride põhierinevusest] | |||
--> | |||
=== Tükkideks jagamine ning replikeerimine andmebaasides === | |||
Tükkideks jagamise põhiststsenaariumid: | |||
* data ei mahu ära või | * data ei mahu ära või | ||
| 93. rida: | 108. rida: | ||
Mis põhimõtte järgi? Variandid: | Mis põhimõtte järgi? Variandid: | ||
* Variant 1: jagame väga suured tabelid a la memcachedi moodi ridade kaupa, näiteks kasutajanime esitähe järgi: | * Variant 1 (<b>horisontaalne</b>): jagame väga suured tabelid a la memcachedi moodi ridade kaupa, näiteks kasutajanime esitähe järgi: | ||
**a-c: server 1 | **a-c: server 1 | ||
**d-k: server 2. | **d-k: server 2. | ||
**... | **... | ||
**x-z: server N | **x-z: server N | ||
* Variant 2: osa tabeleid serverisse 1, osa serverisse 2, jne. | |||
* Variant 3 <b>vertikaalne</b>: osa tulpasid suurest tabelist server 1, osa server 2, | |||
Arusaadavalt on neid kolme varianti võimalik kombineerida. | |||
Lühikese ülevaate annab [https://en.wikipedia.org/wiki/Partition_(database) wikipedia partitioning artikkel] | |||
Küllalt sarnane asi on <b>replikeerimine</b>: koopiate hoidmine mitmes baasis. Eesmärk võib olla sama, mis ennist kirjeldatud (suured mahud) või töökindluse tõstmine (kui mõni masin rikki läheb). | |||
Detaile lisaks: | |||
* [http://momjian.us/main/writings/pgsql/replication.pdf Postgres replication intro] | |||
* [http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling Postgres clustering and replication] | |||
* [https://www.postgresql.org/docs/13/high-availability.html Postgresi enda dokud teemal] | |||
<!-- | |||
= Materjalid lugemiseks ja vaatamiseks = | = Materjalid lugemiseks ja vaatamiseks = | ||
* [https://echo360.org.uk/section/d74163c0-4a46-4522-bc95-333e51b6819d/home Kalle loeng], otsi "October 7, 2019" video ja <b>vaata läbi</b>. Sinna kõrvale [https://www.dropbox.com/s/i7vxux4vz7f4wxd/Information%20Systems%20Integration%20and%20Governance%20%28public%29.pdf?dl=0 presentatsioon]. | <b>Data warehouse teemal</b> | ||
* [https://www.guru99.com/data-warehousing-tutorial.html Põhjalik tutorial]: | |||
* [https://digi.lib.ttu.ee/i/?9926 Kalle Tominga doktoritöö]. | * Kalle Tominga loeng ja materjalid: sa oled võibolla neid varem näinud IT sissejuhatuse aines, nüüd oleks sobiv nad uuesti üle vaadata: [https://echo360.org.uk/section/d74163c0-4a46-4522-bc95-333e51b6819d/home Kalle loeng], otsi "October 7, 2019" video ja <b>vaata läbi</b> vähemalt esimene pool. Sinna kõrvale [https://www.dropbox.com/s/i7vxux4vz7f4wxd/Information%20Systems%20Integration%20and%20Governance%20%28public%29.pdf?dl=0 presentatsioon]. | ||
* [https://www.guru99.com/data-warehousing-tutorial.html Põhjalik tutorial]: <b>Kindlasti loe läbi esimesed osad</b>, kuni (kaasa arvatud) ETL (Extract, Transform, and Load) Process. Kui sul tekib huvi teema vastu, siis vaata täiendavalt järgmisi osi. | |||
Täiendavalt on soovitav tutvuda: | |||
* [https://digi.lib.ttu.ee/i/?9926 Kalle Tominga doktoritöö]. Kui sul tekkis huvi teema vastu, siis siin kiireks tutvumiseks, et mis küsimused näiteks tekivad ja kuidas neid lahendada. Põhifookus töös on spetsiifilisel küsimusel, et kuidas uurida, kust andmed jõuavad erinevatesse päringutesse/raportitetesse ja milliseid tabeleid/välju rohkem kasutakse. Loomulikult ei jõua sa seda tööd süvenemisega lugeda. | |||
Hajutatud andmebaasid: | <b>Hajutatud andmebaasid</b>: | ||
* [https://www.studocu.com/en-au/document/university-of-new-south-wales/enterprise-database-management/lecture-notes/chapter-12-distributed-database-management-systems/4296792/view põhjalik ülevaade teemast]: Chapter 12 Distributed Database Management Systems. <b>Loe see süvenemisega läbi</b>. | * [https://www.studocu.com/en-au/document/university-of-new-south-wales/enterprise-database-management/lecture-notes/chapter-12-distributed-database-management-systems/4296792/view põhjalik ülevaade teemast]: Chapter 12 Distributed Database Management Systems. <b>Loe see süvenemisega läbi</b>. | ||
* [https://memcached.org/ memcached]. Tutvuda lühidalt, eeskätt [https://github.com/memcached/memcached/wiki nende materjalidega] | * [https://memcached.org/ memcached]. Tutvuda lühidalt, eeskätt [https://github.com/memcached/memcached/wiki nende materjalidega] | ||
* [https://redis.io/ redis]. Tutvuda lühidalt, konkreetselt [https://redis.io/documentation dokumentatsiooni] ja [https://redis.io/topics/replication hajutamise osaga]. | * [https://redis.io/ redis]. Tutvuda lühidalt, konkreetselt [https://redis.io/documentation dokumentatsiooni] ja [https://redis.io/topics/replication hajutamise osaga]. | ||
Täiendavalt on soovitav tutvuda: | |||
* [https://www.slideshare.net/alokeparnachoudhury/semi-joins semi-join] on spetsiaalne põhimeetod joinide optimeerimiseks andmebaaside osadest eri masinates. See väike presentatsioon tasub läbi lugeda. | |||
* [https://medium.com/@harshityadav95/notes-distributed-database-management-system-advanced-database-management-systems-655036ab4c77 alternatiivne hea ülevaade] Siin antakse eelmise põhjaliku tutorialiga sarnane ülevaade, aga lühem ja lihtsam ja veidi teise vaatega. Kui sulle eelmine põhjalik tutorial jäi segaseks, siis tasub korra täiendavalt vaadata siia. | |||
Täiendavalt on soovitav tutvuda teemaga Postgresi näitel: | Täiendavalt on soovitav tutvuda teemaga Postgresi näitel: | ||
| 119. rida: | 160. rida: | ||
* [http://momjian.us/main/writings/pgsql/replication.pdf Postgres replication intro]. Pdf presentatsioon sissejuhatusega Postgresi põhiautorilt: mis probleemid ja mis on varem olnud lahendusi Postgresi jaoks. | * [http://momjian.us/main/writings/pgsql/replication.pdf Postgres replication intro]. Pdf presentatsioon sissejuhatusega Postgresi põhiautorilt: mis probleemid ja mis on varem olnud lahendusi Postgresi jaoks. | ||
* [https://www.postgresql.eu/events/pgconfeu2017/sessions/session/1596/slides/29/Distributed%20Computing%20on%20PostgreSQL.pdf presentatsioon hajutamisest postgresi vahenditega]: täiendab eelmist sissejuhatavat materjali. | * [https://www.postgresql.eu/events/pgconfeu2017/sessions/session/1596/slides/29/Distributed%20Computing%20on%20PostgreSQL.pdf presentatsioon hajutamisest postgresi vahenditega]: täiendab eelmist sissejuhatavat materjali. | ||
* [https://www.postgresql.org/docs/12/high-availability.html Postgres high availability]: kõige põhjalikum materjal, kindlasti loe läbi algus, kaasa arvatud ptk 26.1. Comparison of Different Solutions: edaspidiste peatükkide osas tutvu kiiresti, et saada mingi ettekujutus, mis toimub (põhjalikult seda lugeda ei jõua ja ei ole ka vaja). | * [https://www.postgresql.org/docs/12/high-availability.html Postgres high availability]: kõige põhjalikum materjal, kindlasti loe läbi algus, kaasa arvatud ptk 26.1. Comparison of Different Solutions: edaspidiste peatükkide osas tutvu kiiresti, et saada mingi ettekujutus, mis toimub (põhjalikult seda lugeda ei jõua ja ei ole ka vaja). --> | ||
<!-- | <!-- | ||
* [http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling Postgres clustering and replication]. Lugeda. | * [http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling Postgres clustering and replication]. Lugeda. | ||
--> | --> | ||
Viimane redaktsioon: 1. aprill 2025, kell 14:59
Kõige lihtsamal juhul on meie andmed ühes konkreetses andmebaasis ühes arvutis. See on selgelt kõige kergemini hallatav viis ja enamasti võimaldab ka päringuid kõige kiiremini teha. Miks aga vahel niimoodi mitte teha? Üldiselt on kaks peamist põhjust, mis tekitavad hoopis erinevaid probleeme ja ülesandeid:
- Data warehouse teema: vaja integreerida palju päris erinevaid infosüsteeme/andmebaase.
- Distributed databases teema: andmebaas on liiga suur ja/või liiga palju kasutajaid, et üks masin välja veaks, vaja jagada töö hulga masinate vahel
Data warehouse teema: kuidas eri andmebaase integreerida
Olukord: ettevõttes või organisatsioonis on palju eri osakondi oma infosüsteemide ja andmebaasidega. Näiteks, eraldi tootmisüksused, eraldi laoarvestuse, personali, finantsteenistuse üksused. Riigi mastaabis eraldi ministeeriumid ja ametid, näiteks politsei andmebaasid, kinnisvara andmebaasid jne. Sellised andmebaasid tekivad ja neid hallatakse üksteisest suhteliselt sõltumatult.
Seejuures on
- hea, et iga andmebaas jõuab tüüpiliselt ühes masinas kenasti töötada
- halb, et on väga keeruline teha süsteemi, mis teeks päringuid üle paljude eri andmebaaside korraga (a la päringus oleks korraga vaja infot laoarvestuse ja finantsteenistuse andmebaasidest).
Siin valdkonnas lahendatakse seda viimast, "halb" muret, reeglina sel viisil, et tehakse eraldi infot koondav andmebaas mida nimetatakse andmelaoks (data warehouse): sinna tõmmatakse regulaarselt infot kokku eraldi andmebaasidest. Selleks teeme iga baasi külge proge, mis ööseti pumpab päeva data kesksesse baasi ühisesse schemasse:
- sellelt saab teha joine
- tekivad päevased snapshotid
Et data warehouse tekiks, on vaja teha nn ETL proged:
- Extract proged
- Transform proged: teisendab data ühise schema jaoks
- Load: pumpad transformituddata warehouse andmebaasi
Põhieesmärk data warehousel: regulaarne ülevaateraportite tegemine.
Veidi sarnane või seotud teema on Linked data, mis on teine suund/eesmärk integreerimiseks: andmete scrapemine webist ja kogumine apidest ehk machine-readable web. Selle ideoloogiline fookus läks "semantic web" projekti, mis muutus akadeemiliseks ja ebapraktiliseks. Põhiefekt oli push kasutada rdf-i universaalse dataformaadina. Tim Berners-Lee rebrandis ja refokuseeris oma tegevuse ses suunas hiljem kui "Linked Data" .
Detaile lisaks
- Kalle Tominga loengumaterjalid: presentatsioon.
- Põhjalik tutorial: loe läbi esimesed osad, kuni (kaasa arvatud) ETL (Extract, Transform, and Load) Process. Kui sul tekib huvi teema vastu, siis vaata täiendavalt järgmisi osi.
- Kalle Tominga doktoritöö. Kui sul tekkis huvi teema vastu, siis siin kiireks tutvumiseks, et mis küsimused näiteks tekivad ja kuidas neid lahendada. Põhifookus töös on spetsiifilisel küsimusel, et kuidas uurida, kust andmed jõuavad erinevatesse päringutesse/raportitetesse ja milliseid tabeleid/välju rohkem kasutakse. Loomulikult ei jõua sa seda tööd süvenemisega lugeda.
Distributed databases teema: kuidas jagada ühe baasi töökoormus mitme masina vahel
Võimalikud olukorrad:
- üks konkreetne suur andmebaas (näiteks Skype kõned, kliendid jne või Google ülemaailmsed andmebaasid jms) on liiga suur selleks, et üks masin jõuaks temaga hakkama saada, st piisava kiirusega päringuid teha, andmeid lisada jne,
- või tahame lisaks, et ülemaailmse maailmabaasi osad oleks mingi piirkonna klientidele lähemal, et optimeerida võrguliiklust (CDN teema)
- või on meil vaja töökindlust tõsta, tehes andmebaasist klooni, millele kohe üle minna, kui põhiandmebaasi masin miskipärast rikkis või temaga ei ole ühendust.
Seejuures on kaks suurt küsimust:
- Kuidas infot andmebaasis eri masinate vahel jagada ja sünkroniseerida
- Kuidas teha päringuid kiiresti, kui info on eri masinate vahel jagatud
Näiteks, skypes läks kohe alguses vaja kasutajate ja nende tegevuste andmebaasi jagamist mitme masina vahel. Väikese süsteemi puhul ei juhtu neid asju kunagi.
Olulised (näite)süsteemid: Memcached ja Redis
Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.
Oluline ja võimsam ja rohkem kasutatav analoogiline süsteem on redis.
Mõlemid on key-value baasid:
{"http://xx.com/api/people":23,
"bsesd": "dfsdfsdf",
...
}
Nend põhirakendus: päringute cachimine.
Tüüpilised API päringud:
- keyd
- aeg, millal salvestati
- data
Memcachedit on lihtne panna korraga mitme masina peale. Variandid mis oleks:
- (memcached ei tee seda) iga server sisaldab kogu datat
- (seda memcached teeb) iga server sisaldab osa datat
Mis juhtub, kui uus data tuleb mingi keyga "k1":
- peame otsustama mis serverisse panna
- päring otsib "k1"-te: peame teadma mis serveris ta on ja sealt küsima. Selleks:
- arvutad key hashi
- hash("k1") oleks ntx 192202
- jagad serverite arvuga, saad jäägi: see on serveri nr
Redise kaks põhierinevust memcachedist:
- Salvestatud väärtused saavad olla keerulisemad andmestruktuurid.
- Redises toimub hajutamine toimub hierarhiliselt master-slave põhimõttel, memcachedis on see lihtsam hashipõhine, nagu ülal kirjeldatud.
Vt ka ok võrdlus.
Tükkideks jagamine ning replikeerimine andmebaasides
Tükkideks jagamise põhiststsenaariumid:
- data ei mahu ära või
- server ei jaksa vastata päringutele
Jagame osa datat ühte serverisse teise osa teise, kolmanda kolmandasse jne
Mis põhimõtte järgi? Variandid:
- Variant 1 (horisontaalne): jagame väga suured tabelid a la memcachedi moodi ridade kaupa, näiteks kasutajanime esitähe järgi:
- a-c: server 1
- d-k: server 2.
- ...
- x-z: server N
- Variant 2: osa tabeleid serverisse 1, osa serverisse 2, jne.
- Variant 3 vertikaalne: osa tulpasid suurest tabelist server 1, osa server 2,
Arusaadavalt on neid kolme varianti võimalik kombineerida.
Lühikese ülevaate annab wikipedia partitioning artikkel
Küllalt sarnane asi on replikeerimine: koopiate hoidmine mitmes baasis. Eesmärk võib olla sama, mis ennist kirjeldatud (suured mahud) või töökindluse tõstmine (kui mõni masin rikki läheb).
Detaile lisaks: