kad imaš postgresql ne treba ti nosql
TRANSCRIPT
![Page 1: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/1.jpg)
Kad imaš PostgreSQL ne trebati NoSQL
Stjepan Zlodi, Styria medijski servisi
![Page 2: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/2.jpg)
Tko sam ja?• 21 godina iskustva s bazama, aplikacijama...
• 6 godina rada na najvećim .hr portalima (24sata.hr, vecernji.hr,
poslovni.hr)
• korisnik i promotor otvorenog koda
• Linux na desktopu 18 godina
• bloger: http://wolfwoodscrowd.info
2
![Page 3: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/3.jpg)
Zašto ljudi koriste NoSQL• Nema zadane šeme, bez potrebe za migracijom
• Nema skupih JOIN-a
• Brzi razvoj/brži rad
• Lako skaliranje
• Velike baze, BigData
• Analitika (MapReduce)
3
![Page 4: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/4.jpg)
Zašto se to pretvori u horror?• Hrpa podataka, nered, neočekivana iznenađenja
• Nepovezani podaci
• Brže greške
• Većina koristi samo jedan server
• Najveće baze na svijetu su RDBMS (2 Gb podataka u sekundi)
• MapReduce je spor
4
![Page 5: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/5.jpg)
MongoDB announced 10,000,000downloads! Or, as their other two partitionsreported, 9,999,323 and 10,001,403downloads.via Twitter
5
![Page 6: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/6.jpg)
Students find 40k unprotected MongoDBdatabases, 8 million telco customer recordsexposedThree students from University of Saarland in Germany at the Centre for
IT Security – Kai Greshake, Eric Petryka and Jens Heyens – discovered that
MongoDB databases running at TCP port 27017 as a service on several
thousands of commercial web servers are easily accessible on the
Internet.
6
![Page 7: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/7.jpg)
Trebamo li koristiti NoSQL?• Naravno, ali...
7
![Page 8: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/8.jpg)
Use case: dodaj još jedno polje• korisnik.my_space, korisnik.orkut
• ...još twitter, facebook
• ...još google+, linkedin
• ...još instagram, pinterest, tumblr, vk, flickr, bika
• Neka korisnici sami dodaju profile s društvenih mreža!!!
8
![Page 9: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/9.jpg)
Use case: dodaj još jedno polje - rješenje• Tablica drustvene_mreze
• Tablica korisnicki_profili AS kp
• kp.drustvene_mreze (fk)
• kp.profil
• http://en.wikipedia.org/wiki/Entity–attribute–value_model
9
![Page 10: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/10.jpg)
Use case: opravdani razlog za spremanjeJSON-a
• Django primjer: JSONField
• Ispod haube: TextField (PostgreSQL: text)
• Spremanje u bazu: json.encode
• Vraćanje iz baze: json.decode
10
![Page 11: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/11.jpg)
A PostgreSQL?
![Page 12: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/12.jpg)
Spora autentifikacija?• Najveći dio vremena kod upita troši se na autentifikaciju
• Koristite connection pool
• Django u zadnjim verzijama ima svoje rješenje
• pgpool, PgBouncer
12
![Page 13: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/13.jpg)
PostgreSQL je sporiji
13
![Page 14: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/14.jpg)
Native JSON podrška• PostgreSQL 9.2 JSON
• JSON tip polja
• validacija, spremanje
• funkcije za dohvat elemenata
• upiti na JSON
14
![Page 15: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/15.jpg)
JSON primjer
CREATE TABLE profili (podaci JSONB);
INSERT INTO profili (podaci) VALUES ('
"name": "Stjepan Zlodi",
"google+": "https://plus.google.com/u/0/+StjepanZlodi",
"twitter": "https://twitter.com/ylodi"
')
15
![Page 16: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/16.jpg)
JSON primjer
SELECT podaci->>'twitter'
FROM profili
WHERE podaci->>'name' == 'Stjepan Zlodi'
16
![Page 17: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/17.jpg)
PostgresSQL 9.3• Dodan JSON parser i dodatne funkcije
• Direktno slanje JSON podataka u bazu i iz baze
17
![Page 18: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/18.jpg)
PostgresSQL 9.4• BSON - binary format za spremanje JSON-a
• Ne podržava 64-bitne brojeve s pomičnim zarezom
• Nema veze s MongoDB stvari istog imena
18
![Page 19: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/19.jpg)
Kombinacija ANSI SQL i JSON upita• SELECT, čak i JOIN
• ROW_TO_JSON funkcija
19
![Page 20: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/20.jpg)
Test• 50m JSON dokumenata, 60% random tekst, import, 50m unosa, random
upiti
• Import 2.1x brži u Postgresu
• MongoDB zauzima 33% više mjesta na disku
• Insert 3x duže u MongoDB-u
• Upiti 2.5x duži u MongoDB-u
20
![Page 21: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/21.jpg)
HSTORE - key - value• PostgreSQL 8.2 (2006)
• indeksiranje podataka
• Podrška u Djangu tek od 1.8 (HStoreField)
21
![Page 22: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/22.jpg)
HSTORE primjer
CREATE TABLE profili (podaci HSTORE);
INSERT INTO profili (podaci) VALUES ('
"name": "Stjepan Zlodi",
"google+": "https://plus.google.com/u/0/+StjepanZlodi",
"twitter": "https://twitter.com/ylodi"
');
SELECT hstore_to_json(podaci) FROM profili;
22
![Page 23: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/23.jpg)
Još nekoliko stvari• Full text search
• Geo podaci, upiti - MongoDB vs. PostGIS
23
![Page 24: Kad imaš PostgreSQL ne treba ti NoSQL](https://reader030.vdocuments.net/reader030/viewer/2022020123/55bed22abb61eb183d8b457e/html5/thumbnails/24.jpg)
Kako mi koristimo NoSQL?• Memorija je još uvijek brža od diska
• Redis
• Možda RethinkDB - optimiziran za SSD
24