Tag der Datenbanken NoSQL mit Postgres 15. Juni 2015 Damian Gawenda Dipl.-Wirt.-Inform. NoSQL mit Postgres Agenda l Vorstellung l Marktübersicht l Warum PostgreSQL? l Warum NoSQL? l Beispielanwendung Damian Gawenda 15.06.15 Seite: 2 NoSQL mit Postgres Vorstellung Damian Gawenda Dipl.-Wirt.-Inform. [1990] Erste Programmiererfahrung [seit 2004] Software Entwickler [seit 2007] Dozent für IT-Themen [seit 2009] Unternehmensberater [Feb.2015] Gründung City2Be GmbH www.city2be.net Damian Gawenda 15.06.15 Seite: 3 NoSQL mit Postgres Damian Gawenda 15.06.15 Seite: 4 NoSQL mit Postgres Marktübersicht – Top10 Ranking Methode nach „current popularity“ via l Google Trends, Bing, Stack Overflow, DBA Stack Exchange, Twitter, LinkedIn, Indeed u.a. l Quelle: http://db-engines.com/en/ranking Damian Gawenda 15.06.15 Seite: 5 NoSQL mit Postgres Trend – OpenSource vs. Commercial l Quelle: http://db-engines.com/en/ranking_osvsc Damian Gawenda 15.06.15 Seite: 6 NoSQL mit Postgres Warum PostgreSQL? l Free und Open-Source (ORDBMS) l Keine Lizenzkosten l Enterprise-Features, vergleichbar mit Oracle und DB2 l "Best Kept Enterprise Database Secret." l Zuverlässig, stabil und sehr performant l „companies report that PostgreSQL has never, ever crashed for them in several years“ l Cross platform l Läuft auf Linux, Windows, FreeBSD, Solaris und Mac OS l Custom Languages, Extensions und NoSQL-Features l Python, Ruby, R, PLV8 uva. Damian Gawenda 15.06.15 Seite: 7 NoSQL mit Postgres Warum NoSQL? l NoSQL bedeutet „Not-Only SQL“ Gemeint sind: cloud databases, non-relational databases, Big Data databases l Bestens geeignet für große, unstrukturierte Datenmengen l l l l Schnelles Design Wachsende Strukturen Sehr viele Clients Echtzeit-Verbindungen > > > > Fehlertoleranz horizontale u. Vertikale Skalierung Verfügbarkeit Performance l “If your data isn’t growing then neither is your business” Damian Gawenda 15.06.15 Seite: 8 NoSQL mit Postgres Wer nutzt NoSQL? Damian Gawenda 15.06.15 Seite: 9 NoSQL mit Postgres SQL vs. NoSQL Relationales SQL Not-Only SQL + Konsistenz + Skalierbarkeit + Sicherheit + Performance + Etabliert + Verfügbarkeit + Transaktionssicher + Fehlertoleranz Wir wollen alle Vorteile! Damian Gawenda 15.06.15 Seite: 10 NoSQL mit Postgres Lösung: Relationale DB + NoSQL Damian Gawenda 15.06.15 Seite: 11 NoSQL mit Postgres Postgres 9.4: JSON Datentyp l JavaScript Object Notation (JSON), also JavaScript Syntax l Data Interchange Format: RFC 7159 l Basic Elements: Object List {“key“: “value“, “key2“: “value2“ } [“string“, 5, 3.14, true, “noch eine Zeichenkette“] l Beispiel: [{ "id": 1, "name": "Peter" }, { "id": 2, "name": "Susi" }] Damian Gawenda 15.06.15 Seite: 12 NoSQL mit Postgres Relational + NoSQL (Implementierung) /* DDL EXAMPLE RELATIONAL TABLE */ CREATE TABLE my_REL_data ( company_id SERIAL CONSTRAINT myRELdata_pk PRIMARY KEY, company TEXT NOT NULL, street TEXT NOT NULL, zip TEXT NOT NULL, place TEXT NOT NULL, phone TEXT NOT NULL, email TEXT NOT NULL, homepage TEXT NOT NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); /* DDL EXAMPLE WITH JSON*/ CREATE TABLE my_API_data ( data_id INTEGER CONSTRAINT myAPIdata_pk PRIMARY KEY, raw_data JSON, /* or JSONB */ created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); Damian Gawenda 15.06.15 Seite: 13 NoSQL mit Postgres NoSQL Tabelle befüllen /* DML/DQL EXAMPLE WITH JSON*/ INSERT INTO my_API_data (data_id, raw_data) SELECT id, row_to_json(d) FROM ( SELECT company_id AS id, company, street, zip, place, phone, email, homepage FROM my_REL_data ) d ; Damian Gawenda 15.06.15 Seite: 14 NoSQL mit Postgres Befüllen automatisieren /* TRIGGER */ CREATE TRIGGER my_copy_TRG AFTER INSERT OR UPDATE ON my_REL_data FOR EACH ROW EXECUTE PROCEDURE my_copy_FUNC(); /* TRIGGER FUNCTION TO FILL TO API */ CREATE OR REPLACE FUNCTION my_copy_FUNC() RETURNS trigger AS $$ BEGIN IF (TG_OP = 'INSERT') THEN insert into my_API_data (data_id, raw_data) select id, row_to_json(d) From ( select company_id as id, company, street, zip, place, phone, email, homepage from my_REL_data where company_id = NEW.company_id) d ; ELSE /* UPDATE .. */ END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; Damian Gawenda 15.06.15 Seite: 15 NoSQL mit Postgres Zusammenfassung l PostgreSQL als die Alternative zu kommerziellen DBMS l Not-Only SQL als Lösung für das heutige u. zukünftige Daten-Zeitalter l Es lassen sich Vorteile aus beiden Welten (Relationale DB + NoSQL) vereinen. Damian Gawenda 15.06.15 Seite: 16 Vielen Dank für Ihre Aufmerksamkeit! Damian Gawenda Dipl.-Wirt.-Inform. City2Be GmbH Martinstr. 5a 51645 Gummersbach Tel. 02261-609 8008 [email protected] www.city2be.net