Predavanje se bavi osnovnim konceptima MemSQL-a, njegovim prednostima u odnosu na MySQL i pitanjima kompatibilnosti i skalabilnosti.
Održano 29. novembra 2016. godine u okviru Sysadmin Day-a Startit Centra.
2. 2
Šta je MemSQL?
● Relational Database Management System
(RDBMS):
– Koristi SQL jezik. ANSI SQL kompatibilan.
● Bazu primarno drži u memoriji.
● Klasterski je orjentisan uz linearnu skalabilnost.
● Kompatibilan sa MySQL protokolom:
– Svi MySQL klijenti nativno rade sa njim.
3. 3
Ko stoji iza MemSQL-a?
● Kompanija MemSQL, osnovana 2011. godine.
● Osnivači su dva bivša inženjera iz Facebook-a i
Microsoft-a, jedini zaposleni u to vreme.
● Prva verzija MemSQL-a objavljena je aprila 2013.
godine.
● Danas kompanija broji preko 100 zaposlenih.
● Veliki klijenti: Comcast, Akamai, Pinterest,
Zynga...
4. 4
Problem skalabilnosti baza podataka
● Primer 1: jedan DB server
– Vremenom broj upita u bazu
raste.
– Klasične web aplikacije više
čitaju iz baze nego što upisuju
u nju.
– DB server obično prvo
postane usko grlo za čitanje.
– Šta raditi u tom slučaju?
READ
WRITE
5. 5
Problem skalabilnosti baza podataka
● Primer 2: replikacija
– Uvesti veći broj slave
servera.
– Mogućnost paralelnog
čitanja uz load
balancing.
– Upis samo na master
server.
– Kako se izboriti sa
porastom broja upisa?
READ
WRIT
E
REPLICATION
6. 6
Sharding?
● Horizontalno particionisanje baze.
● Podaci u bazi često ispoljavaju neki oblik lokalnosti.
● Upiti često uzimaju u obzir samo određenu grupu
redova u tabeli. Retko sve redove.
● Ideja: razbiti tabele na više kraćih tabela na osnovu
nekog kriterijuma.
● Kratke tabele mogu da se smeste u odvojene baze na
odvojenim serverima.
7. 7
Primer sharding-a
id klijent grad
01 Klijent 1 Beograd
02 Klijent 2 Beograd
03 Klijent 3 Novi Sad
04 Klijent 4 Novi Sad
05 Klijent 5 Niš
06 Klijent 6 Niš
07 Klijent 7 Niš
id klijent grad
01 Klijent 1 Beograd
02 Klijent 2 Beograd
id klijent grad
03 Klijent 3 Novi Sad
04 Klijent 4 Novi Sad
id klijent grad
05 Klijent 5 Niš
06 Klijent 6 Niš
07 Klijent 7 Niš
DB1
DB2
DB3
8. 8
Problem skalabilnosti baza podataka
● Primer 3: sharding
– Razbiti bazu na više
manjih particija.
– Particije rasporediti na
više servera.
– Skalabilnost?
– Ogroman broj upisa?
– Real-time analitika?
– MemSQL?
READ
WRIT
E
REPLICATION
SHARDING
9. 9
●
Bazu podataka primarno drži u memoriji:
– Brzo izvršavanje upita, nisko vreme odziva.
– Visok nivo paralelizma.
– Pogodno za odradu velike količine podataka u
real-time-u.
●
Tabele u memoriji se drže u tzv. rowstore
obliku:
– Pogodan za kratke insert, update i delete upite.
Šta nudi MemSQL?
10. 10
Šta nudi MemSQL?
● Tabele mogu eksplicitno da se drže i na disku u tzv.
columnstore obliku:
– Koristi se za tabele koje su prevelike da stanu u
memoriju ili za koje nema smisla da budu u memoriji.
– Pogodan za kompleksne select upite obično vezane za
analitičku obradu podataka.
– Pri kreiranju tabele specificira se da tabela treba da
bude smeštena na disku (columnstore), inače se tabela
smešta u memoriju (rowstore).
11. 11
Perzistencija baze?
● Mada je baza primarno smeštena u memoriji,
obezbeđena je perzistencija:
– Snapshot baze u memoriji se u regularnim
vremenskim intervalima upisuje na disk.
– Sve transakcije između dva snapshot-a se upisuju u
transaction log na disku.
– Nakon restarta servera, baza se u memoriju učitava
iz snapshot-a + izvršavaju se transakcije iz
transaction log-a.
12. 12
Da li je zadovoljen ACID?
● Autori tvrde da su ACID zahtevi u potpunosti
zadovoljeni:
– Atomicity ✓
– Consistency ✓
– Isolation ✓
– Durability ?
13. 13
Da li je zadovoljen ACID?
● U opštem slučaju za transakcije koje su commit-
ovane u memoriji ne znači automatski da su
upisane i na disk.
● MemSQL može da se konfiguriše da u
potpunosti zadovolji durability zahtev uz
značajno lošije performanse.
14. 14
Šta još nudi MemSQL?
● Automatski sharding uz izbor sharding ključa.
● Automatsku redistribuciju particija baze na sve
servere u klasteru.
● Praktično linearnu skalabilnost dodavanjem
novih servera u klaster.
● Serveri u klasteru mogu biti skromnih
performansi (npr. instance u Cloud-u).
15. 15
Kako MemSQL koristi sharding?
● Nad sharding ključem se primenjuje hash
funkcija čime se određuje particija.
● U opštem slučaju se za sharding ključ koristi
primarni ključ tabele.
● Korišćenjem primarnog ključa za sharding,
obezbeđuje se ravnomerno particionisanje.
● Sharding kjuč može i eksplicitno da se
specificira.
16. 16
Šta još nudi MemSQL?
● Lock-free strukture podataka (MVCC).
● Upite kompajlira u mašinski kod radi bržeg izvršavanja
(plancache).
● Distribuirane JOIN operacije.
● Podržava JSON i Geospatial tipove podataka.
● Laku integraciju sa Apache Kafka i Apache Spark kroz koncept
pipeline-a (CREATE PIPELINE).
● Alat za lak deployment i upravljanje klasterom – MemSQL Ops
● Dolazi u Community i Enterprise ediciji...
18. 18
MemSQL čvorovi
● Čvorovi u MemSQL klasteru se dele na:
– Agregatore
Prihvataju upite od klijenta i distribuiraju listovima.
Prihvataju rezultate upita sa listova i vraćaju
klijentu.
– Listove
Drže particije baze i izvršavaju upite. Rezultate
upita šalju agregatorima.
19. 19
Agregatori
● Agregatori u MemSQL klasteru mogu da budu:
– Master agregator
Jedan agregator se imenuje kao master. Upravlja klasterom.
Svi SQL upiti DDL tipa (CREATE/DROP DATABASE,
CREATE/DROP/ALTER TABLE itd.) izvršavaju se na njemu.
– Child agregator
Svi ostali agregatori u klasteru su child agregatori. SQL upiti
DML tipa (SELECT, UPDATE, INSERT, DELETE itd.) šalju se
bilo kom agregatoru u klasteru.
20. 20
Dodatne mogućnosti?
● Samo u komercijalnoj, Enterprise, ediciji:
– High availability.
– Replikacija između dva MemSQL klastera za
povećanu redundansu.
– Enkripcija saobraćaja između čvorova.
– Role-Based Access Control.
21. 21
High availability
● MemSQL podržava koncept availability grupa koje
obezbeđuju redundansu unutar klastera.
● Podržane su do dve availability grupe.
● Listovi se dele na dve grupe.
● Svaki list ima svog parnjaka u drugoj grupi.
● Parovi listova, master i slave, drže istovetnu kopiju
particije baze.
● Jedan list u paru može da otkaže.
22. 22
MemSQL Ops
● Deployment klastera, upravljanje klasterom i
monitoring.
● Dodatni čvorovi se na trivijalan način dodaju u
klaster.
● Web i CLI baziran interfejs.
● Podržava i automatizovan deployment Apache
Spark-a i njegovo povezivanje sa MemSQL
klasterom.