+ All Categories
Home > Documents > Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci...

Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci...

Date post: 07-Jul-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
51
Verzování a publikace dat na webu za pomoci PostgreSQL Jan Pěček Prague PostgreSQL Developers' Day 2013
Transcript
Page 1: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Jan Pěček

Prague PostgreSQL Developers' Day 2013

Page 2: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Kdo jsem?Jan Pěček

● Programátor● Jyxo, s.r.o. (Blog.cz)● MAFRA, a.s. - Internet Trading● PHP, Java ...

● PostgreSQL● pokladník CSPUG, o.s.● pokročilý uživatel

● Student

http://www.pecek.cz

http://linkedin.com/janpecekhttp://facebook.com/janpecekhttp://twitter.com/janpecek

Page 3: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Pár informací ...

Page 4: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Page 5: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Page 6: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Obsah● Proces schvalování

● Přihlášený uživatel

● Verzování údajů

● Publikace dat, evoluce

● Přechod na PostgreSQL

Page 7: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Agenda● Proces schvalování

● Přihlášený uživatel

● Verzování údajů

● Publikace dat, evoluce

● Přechod na PostgreSQL

Page 8: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Proces schvalování

ADMIT

Page 9: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Proces schvalování

ADMIT

Page 10: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Stavy záznamu

Firma, a.s.

Nový, klient - neschváleno

zakázáno

Import - schváleno

Úprava, klient - neschváleno

Úprava, klient - kontrola

Úprava, operátor - kontrola

Úprava, operátor - schváleno

Spuštěno - schváleno

Nový, operátor - neschváleno

Nový, operátor - schváleno

Page 11: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Nové stavy záznamu

Firma, a.s.

Čeká na schválení

Smazáno

Schváleno

Page 12: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Schvalování

● Hlídání změn

● Kontrola údajů

● Různá práva

● Rozdělení odpovědnosti

Page 13: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Agenda● Proces schvalování

● Přihlášený uživatel

● Verzování údajů

● Publikace dat, evoluce

● Přechod na PostgreSQL

Page 14: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Problém uživatele

ADMIT

DBuser / passwd

login / heslo

Page 15: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Problém uživatele

● DB User = login

● Temp tabulka

● PL/Perl

● custom_variable_classes

Page 16: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

DB User = login

● Jednotky uživatelů+ Jednoduše získaný uživatel

● Tisíce uživatelů– Uložení údajů

– Dvojí přihlašování do DB

– Bezpečnost

– Ošetření v aplikaci

– Přidávání uživatelů

Page 17: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Temp tabulka

CREATE TEMPORARY TABLE tmp_vars (name varchar(10) PRIMARY KEY,value varchar

);

INSERT INTO tmp_vars VALUES ('userId', 42);

DECLAREuserId int;

BEGINSELECT

value INTO userId FROM tmp_vars WHERE name = 'userId';

Page 18: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

PL/Perl – Global Values

http://www.postgresql.org/docs/9.2/static/plperl-global.html

CREATE FUNCTION set_var(name text, val text) RETURNS text AS $$if ($_SHARED{$_[0]} = $_[1]) {

return 'ok';} else {

return "cannot set shared variable $_[0] to $_[1]";}

$$ LANGUAGE plperl;

CREATE FUNCTION get_var(name text) RETURNS text AS $$return ($_SHARED{$_[0]};

$$ LANGUAGE plperl;

SELECT set_var('userId', 42);

SELECT get_var('userId');

Page 19: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

custom_variable_classes

SET myvar.userId = 42;

● postgresql.conf:custom_variable_classes = 'myvar'

DECLAREuserId int;

BEGINSELECT current_setting('myvar.userId') INTO userId;

http://postgres.cz/wiki/PostgreSQL_SQL_Tricks#Any_other_session_variables

PERFORM set_config('myvar.userId'::text, '42'::text, false);

Page 20: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Porovnání rychlosti

PL/Perl Session TEMP table0

10

20

30

40

50

60

52,99

26,42

31,24

48,95

3,34

33,29

Time per requestElapsed time

Tim

e [m

s]

SELECT TYPE_setvar('userId', '42');SELECT TYPE_getvar('userId')

Requests Number: 200Concurrency Level: 100$ ab -n 200 -c 100 'http://localhost/p2d2/TYPE.php'

$ php TYPE.php

Page 21: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Agenda● Proces schvalování

● Přihlášený uživatel

● Verzování údajů

● Publikace dat, evoluce

● Přechod na PostgreSQL

Page 22: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Verzování dat

● Kdo?

● Kdy?

● Původní hodnota

● Nová hodnota

● ID položky

#123

Page 23: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Schéma databáze

Page 24: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Revize

● Operace v tabulce = 1 revize

● Seskupování revizí

● Schválení / odmítnutí revize

● Kompletní historie

● Revertování změn

● Rekonstrukce stavu

#rev. 15

#rev. 14

#rev. 13

#rev. 12

#rev. 11

#rev. 10

#rev. 9

Page 25: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Tabulka změnCREATE TABLE journal (

firm_id integer,

revision integer DEFAULT 1,

tablename varchar NOT NULL,

changes changeset[] NOT NULL,

itemid integer,

create_user_id integer,

process_user_id varchar,

created timestamp NOT NULL,

processed timestamp,

confirmed boolean,

PRIMARY KEY(firm_id, revision)

);

Page 26: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Typ „changeset“CREATE TYPE changeset (

colname varchar,

oldvalue varchar,

newvalue varchar

);

CREATE OPERATOR = (PROCEDURE = changeset_op_eq,LEFTARG = changeset[],RIGHTARG = varchar,NEGATOR = !=

);

CREATE FUNCTION changeset_op_eq (changeset[], varchar) RETURNS boolean AS $$SELECT

count(*) > 0 FROM (SELECT unnest($1) AS col) x WHERE (col).colname = $2;

$$ LANGUAGE sql;

Page 27: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Záznam změn

add_revision(firm_id, changes)

AFTER INSERT

BEFORE DELETE

AFTER UPDATE

ADMIT

Page 28: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Uložená data

journal

firm_id 2910

revision 1

tablename firm_web

changes {"(url,,http://www.mafra.cz)","(position,,0)"}

itemid 123

create_user_id 42

process_user_id null

created 2013-04-01 01:22:53

processed null

confirmed null

Page 29: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Schválení změn

ADMIT

confirm_revision(firm_id, revision)

process_revision(firm_id, revision, true)

Page 30: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Zamítnutí změn

ADMIT

decline_revision(firm_id, revision)

process_revision(firm_id, revision, false)

revert_revision(firm_id, revision)

Page 31: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Revertovánífirm_phone

id firm_id phone type

1 2910 225061234 1

2 2910 737123456 2

3 1188 800123456 3

4 1188 222222222 1

journal

firm_id 1188

revision 2

tablename firm_phone

changes {"(phone,,222222222)","(type,,1)"}

itemid 4

INSERT

EXECUTE 'DELETE FROM ' || tableName || ' WHERE id = ' ||quote_literal(itemId);

Page 32: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Revertovánífirm_phone

id firm_id phone type

1 2910 225061234 1

2 2910 737123456 2

3 1188 800123456 3

journal

firm_id 1188

revision 2

tablename firm_phone

changes {"(phone,222222222,)","(type,1,)"}

itemid 4

DELETE

4 1188 222222222 14 1188 222222222 14 1188 222222222 1EXECUTE

'INSERT INTO ' ||tableName || '(id) ' ||'VALUES (' ||quote_literal(itemId) || ');'

EXECUTE 'UPDATE ' || tableName || ' SET ' ||array_to_string(

sqlData, ', ') ||' WHERE id = ' ||quote_literal(itemId);

Page 33: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Revertovánífirm_phone

id firm_id phone type

1 2910 225061234 1

2 2910 737123456 2

3 1188 800123456 3

4 1188 222111111 1

journal

firm_id 1188

revision 2

tablename firm_phone

changes {"(phone,222222222,222111111)"}

itemid 4

UPDATE

4 1188 222222222 1

EXECUTE 'UPDATE ' || tableName || ' SET ' ||array_to_string(

sqlData, ', ') ||' WHERE id = ' ||quote_literal(itemId);

sqlData := array_append( sqlData, format( '%I = %L', changes.colname, changes.oldvalue )

);

Page 34: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Úskalí revertování

● NOT NULL, UNIQUE, FOREIGN KEY

● Smazat? Vložit? Upravit?

● Item ID – název sloupce

● Výjimky z pravidel

● Konzistence

● Ťuk ťuk, rekurze

id

category_id

address_id

firm_id

tag_id

language_id

daynum

Page 35: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Agenda● Proces schvalování

● Přihlášený uživatel

● Verzování údajů

● Publikace dat, evoluce

● Přechod na PostgreSQL

Page 36: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Trocha historie

MySQL Firebird

MySQL

MySQL MySQL

Page 37: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Publikace dat

takeit

publish

topkontaktVIEWs

Page 38: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Publikace dat

ADMIT

events

publish

mem

cach

ed

Page 39: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Ve vývoji

PostgreSQL MySQL

PostgreSQL PostgreSQL

Page 40: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Publisher nyní

PublisherPHP

events

MySQLpublish

MySQLtakeit

MySQLtopkontakt

PostgreSQLtopkontakt

Page 41: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Publisher nově

events

confirm_revision(firm_id, revision)

ADMIT

Page 42: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Publisher nově

Publisherpython

publish_firm(firm_id)

MySQLpublish

PostgreSQLpublish

events

PostgreSQLtopkontakt

Page 43: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Databáze publish

● Spojení zdrojů dat

● Denormalizace

● Optimalizace pro čtení (indexy)

● Předzpracovaná data

● Zdroj pro fulltext (a další)

● Zdvojená data

● Rozdílnosti

SELECT *

FROM firm;

SELECT *

FROM category;

SELECT *

FROM product;

SELECT *

FROM firm_data;

Page 44: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Agenda● Proces schvalování

● Přihlášený uživatel

● Verzování údajů

● Publikace dat, evoluce

● Přechod na PostgreSQL

Page 45: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Přechod na PostgreSQL

● Přepis aplikací

● Nová struktura → nová technologie

● Návrat k Databázi

● Využít dostupné možnosti

● Normalizace, čištění

● Příprava pro další rozvoj

Page 46: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Technologie

ADMIT

haProxy

DB1

pgBouncer

DB2

pgBouncer

DB3

pgBouncer

Page 47: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Aplikace

● PHP >=5.3 & Nette 2

● Frameworky (dibi, Doctrine2)

● Úprava vrstvy v modelu

● Cache vrstva

● Optimalizace (EXPLAIN)

Page 48: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Agenda● Proces schvalování

● Přihlášený uživatel

● Verzování údajů

● Publikace dat, evoluce

● Přechod na PostgreSQL

Page 49: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Co říci závěrem

● DB může znát uživatele aplikace

● Verzování dat přímo uvnitř DB

● Rekonstrukce stavu dat

● Publikace uvnitř DB

… nožičky not směrem dolů

Page 50: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Otázky...

Page 51: Verzování a publikace dat na webu za pomoci …Verzování a publikace dat na webu za pomoci PostgreSQL Revertování firm_phone id firm_id phone type 1 2910 225061234 1 2 2910 737123456

Verzování a publikace dat na webu za pomoci PostgreSQL

Děkuji za pozornost

http://www.pecek.cz


Recommended