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

Kad imaš PostgreSQL ne treba ti NoSQL

Aug 03, 2015

Download

Software

Ylodi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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