25
Kad imaš PostgreSQL ne treba ti NoSQL Stjepan Zlodi, Styria medijski servisi

Kad imaš PostgreSQL ne treba ti NoSQL

  • Upload
    ylodi

  • View
    53

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Kad imaš PostgreSQL ne treba ti NoSQL

Kad imaš PostgreSQL ne trebati NoSQL

Stjepan Zlodi, Styria medijski servisi

Page 2: Kad imaš PostgreSQL ne treba ti NoSQL

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

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

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

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

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

Trebamo li koristiti NoSQL?• Naravno, ali...

7

Page 8: Kad imaš PostgreSQL ne treba ti NoSQL

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

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

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

A PostgreSQL?

Page 12: Kad imaš PostgreSQL ne treba ti NoSQL

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

PostgreSQL je sporiji

13

Page 14: Kad imaš PostgreSQL ne treba ti NoSQL

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

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

JSON primjer

SELECT podaci->>'twitter'

FROM profili

WHERE podaci->>'name' == 'Stjepan Zlodi'

16

Page 17: Kad imaš PostgreSQL ne treba ti NoSQL

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

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

Kombinacija ANSI SQL i JSON upita• SELECT, čak i JOIN

• ROW_TO_JSON funkcija

19

Page 20: Kad imaš PostgreSQL ne treba ti NoSQL

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

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

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

Još nekoliko stvari• Full text search

• Geo podaci, upiti - MongoDB vs. PostGIS

23

Page 24: Kad imaš PostgreSQL ne treba ti NoSQL

Kako mi koristimo NoSQL?• Memorija je još uvijek brža od diska

• Redis

• Možda RethinkDB - optimiziran za SSD

24

Page 25: Kad imaš PostgreSQL ne treba ti NoSQL

Pitanja?• e-mail: [email protected]

• twitter: https://twitter.com/Ylodi

25