MySQL 5.7: JSON und GIS

Ähnliche Dokumente
MySQL 5.7 JSON und GIS

Edutainment auf dem Smartphone

Sicherheitsrelevante Änderungen (und einige andere) in MySQL 5.7

MySQL Performance Tuning für Entwickler

MySQL Replikation - Die Eier legende Wollmilchsau?

MySQL Backup und Restore

MySQL Replikation Neue Features in 5.5 und 5.6

3 Arbeiten mit geographischen Daten

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

5.8 Bibliotheken für PostgreSQL

Need for Speed: Indexierung unter MySQL

SQL und MySQL. Kristian Köhntopp

Datenbanken für Online Untersuchungen

NoSQL mit Postgres 15. Juni 2015

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

SQL Tipps und Tricks Part II

Tag 2 Inhaltsverzeichnis

Object Relational Mapping Layer

MySQL New Features 5.6

MySQL: Einfaches Rechnen.

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

PHP + MySQL. Die MySQL-Datenbank. Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing.

Installation MySQL Replikationsserver

Datenbank und Tabelle mit SQL erstellen

ids-system GmbH Tipp #3 Leer-Strings in SQL oder die Frage nach CHAR oder VARCHAR

MySQL, phpmyadmin & SQL. Kurzübersicht

MySQL Performance Tuning für Entwickler

Web-basierte Anwendungssysteme PHP Teil 3

MySQL 5.1. Kristian Köhntopp

Multimedia im Netz Wintersemester 2013/14. Übung 03 (Nebenfach)

MySQL Queries on "Nmap Results"

PHP Schulung Beginner. Newthinking Store GmbH Manuel Blechschmidt

mobile GIS Open Source Geodatenbanken Benjamin Winter

Untersuchungen zum Einsatz von Apache CouchDB als Geodatenbank

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Oracle native json Support. Erste Schritte

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

MySQL: Einfache Aggrega3unk6onen. (= Funk6onen, die etwas zusammenfassen)

SQL Tipps und Tricks Part III

Web Technologien Klassische Datenbanken am Beispiel von MySQL

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Übersicht der wichtigsten MySQL-Befehle

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

Garten - Daten Bank. - survival pack -

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Fachhochschule Kaiserslautern Labor Datenbanken mit MySQL SS2006 Versuch 1

Backup und PiTR mit MySQL

Datenbanksysteme 2013

MySQL: Einfaches Rechnen.

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Datumsangaben, enthält mindestens Jahr, Monat, Tag

MySQL Cluster mit Galera

Multimedia im Netz. Übung zur Vorlesung. Ludwig-Maximilians-Universität Wintersemester 2010/2011

1 Hartmann Anna Cäcilienstr Köln (0221) Behrens-Hoffmeister Heidi Lindenweg Köln (0221)

PostgreSQL Ein Überblick

Folien php/mysql Kurs der Informatikdienste

MySQL 101 Wie man einen MySQL-Server am besten absichert

Willkommen. Datenbanken und Anbindung

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Metadaten

Datenbanken Einführung Seite 1 von 7

Synchrone multi-master Replikation für MySQL

Übungsblatt 8- Lösungsvorschlag

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

Oracle Database 12c Was Sie immer schon über Indexe wissen wollten

Cassandra Query Language (CQL)

Geodaten und Karten in APEX

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

Begleitskript. zum PHP/MySQL. Kurs

Foreign Keys. MySQL 4, 5. Kapitel 16: Fremdschlüssel. Marcel Noe

Datenbanken: Datenintegrität.

PHP und MySQL. Integration von MySQL in PHP. Zellescher Weg 12 Willers-Bau A109 Tel Michael Kluge (michael.kluge@tu-dresden.

Einstieg in das SQL- und Datenbanktuning Loblied auf den Tabellen-Index!

MySQL kann auch NoSQL DOAG 2011

Labor 3 - Datenbank mit MySQL

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Chancen und Wachstumsfelder für PostgreSQL

Übung PL/SQL Trigger Lösungen

DB2 SQL, der Systemkatalog & Aktive Datenbanken

SQL-Befehlsliste. Vereinbarung über die Schreibweise

Datenbanken. 5 Tabellen. Karl Meier karl.meier@kasec.ch Inhalt. Domänen verwenden Tabellen anzeigen, ändern, löschen Übung

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

Grundlagen der Informatik

Advanced SQL verstehen und einsetzen SQL-Implementierungen kennen und bewerten

Oracle 10g Einführung

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

Übung Datenbanken in der Praxis. Datenmodifikation mit SQL

Im Folgenden möchten wir Ihnen einige Beispiele aufzeigen, wie ALTER TABLE gemäß SQL92 verwendet wird:

Management of Information Systems. Tutorat: Session 3 Einführung in SQL

Prof. Stefan Keller, HSR Vortrag vom an FOSSGIS 2013 Rapperswil

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

Übungen. DI (FH) Levent Öztürk

6. Sichten, Integrität und Zugriffskontrolle. Vorlesung "Informa=onssysteme" Sommersemester 2015

PostgreSQL unter Debian Linux

Transkript:

MySQL 5.7: JSON und GIS DOAG 2016, Nürnberg Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 1 / 34

Über FromDual GmbH Support Beratung remote-dba Schulung 2 / 34

Über mich Cédric Bruderer Ausbildung 2010 2014: Lehre zum Informatiker Teilnahme an den Schweizer Berufsmeisterschaften Junior Engineer In einem international tätigen Unternehmen. MySQL Support Engineer bei FromDual seit Oktober 2015 3 / 34

Inhalt JSON Eintragen und Auslesen Generierte Spalten Indexierung GIS Spatial Index Datentypen GIS Funktionen GeoJSON Real-Life Anwendungen 4 / 34

Was ist JSON? JavaScript Object Notation Kann mit XML verglichen werden Ist aber leichter zu lesen Seit dem Jahr 2000, Standard seit 2013 Unabhängig von einer Sprache PHP, Perl, Python, C, {"employees":[ {"firstname":"john", "lastname":"doe"}, {"firstname":"anna", "lastname":"smith"}, {"firstname":"peter", "lastname":"jones"} ]} 5 / 34

JSON vs XML {"employees":[ {"firstname":"john", "lastname":"doe"}, {"firstname":"anna", "lastname":"smith"}, {"firstname":"peter", "lastname":"jones"} ]} <employees> <employee> <firstname>john</firstname> <lastname>doe</lastname> </employee> <employee> <firstname>anna</firstname> <lastname>smith</lastname> </employee> <employee> <firstname>peter</firstname> <lastname>jones</lastname> </employee> </employees> http://www.w3schools.com/json/ 6 / 34

JSON in MySQL Wie bekomme ich das in die/aus der DB? mysql> CREATE TABLE json_test (jdoc JSON); mysql> INSERT INTO json_test VALUES ('{"key1": "value1", "key2": "value2"}'); mysql> SELECT * FROM json_test; +--------------------------------------+ jdoc +--------------------------------------+ {"key1": "value1", "key2": "value2"} +--------------------------------------+ mysql> SELECT JSON_EXTRACT(jdoc, "$.key1") FROM json_test; +------------------------------+ JSON_EXTRACT(jdoc, "$.key1") +------------------------------+ "value1" +------------------------------+ 7 / 34

JSON in MySQL Oder so... mysql> SELECT address_details->"$.service_type" FROM address_list; +-----------------------------------+ address_details->"$.service_type" +-----------------------------------+ "fire brigade" "police station" +-----------------------------------+ 8 / 34

JSON indexieren Nur über generierte Spalten: mysql> CREATE TABLE address_list ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, jdoc JSON, lastname VARCHAR(50) AS (JSON_UNQUOTE(JSON_EXTRACT(jdoc, "$.lastname")), PRIMARY KEY (id), KEY lastname (lastname) ) ENGINE=InnoDB; JSON_UNQUOTE entfernt Anführungszeichen JSON_EXTRACT liest den Wert aus dem Feld 9 / 34

Dynamisches Schema Dank JSON, kein fixes Schema nötig Tabelle kann alles beinhalten mysql> CREATE TABLE json_test ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, jdoc JSON )ENGINE=InnoDB; Informationen zu einem Objekt Öffnungszeiten eines Geschäfts Haltestellen einer Buslinie 10 / 34

GIS Geographic Information System Dient dem Speichern von Koordinaten Längen- und Breitengrade GPS Ermöglicht verschiedene Berechnungen basierend auf Koordinaten Distanzen Anzahl Objekte in einem Ort 11 / 34

Spatial Indexes Indexieren von GIS Seit MySQL 5.7 auch InnoDB GIS konnte schon vorher eingetragen werden, aber Index ging nur für MyISAM! mysql> ALTER TABLE geo_data ADD SPATIAL INDEX(coordniates); http://dev.mysql.com/doc/refman/5.7/en/creating-spatial-indexes.html 12 / 34

Datentypen POINT(X, Y) X und Y, Längen- und Breitengrad Adresse, Ort LINESTRING(X Y, X Y) Linie, Strecke Strasse, Fluss,... POLYGON(X Y, X Y, X Y, X Y) Form Ortschaft, Grenzen, Gebiet,... 13 / 34

ST oder MBR Funktionen MBR Minimum Bounding Rectangle (Kleinstmögliches Rechteck) Neigt zur Ungenauigkeit ST Genauer wie MBR, weil korrekte form verwendet wird 14 / 34

GIS Funktionen ST_X(POINT), ST_Y(POINT) Gibt X oder Y Koordinate eines Punkts zurück mysql> SELECT ST_X(POINT(56.7, 53.34)); +--------------------------+ ST_X(POINT(56.7, 53.34)) +--------------------------+ 56.7 +--------------------------+ mysql> SELECT ST_Y(POINT(56.7, 53.34)); +--------------------------+ ST_Y(POINT(56.7, 53.34)) +--------------------------+ 53.34 +--------------------------+ X(POINT) und Y(POINT) sind seit MySQL 5.7.6 deprecated 15 / 34

GIS Funktionen ST_Touches(g1, g2) Prüft ob sich zwei Geometrien berühren. mysql> SET @g1 = ST_GEOMFROMTEXT('POINT(2 0)'); mysql> SET @g2 = ST_GEOMFROMTEXT('LINESTRING(2 0, 0 2)'); mysql> SELECT ST_TOUCHES(@g1,@g2); +---------------------+ ST_TOUCHES(@g1,@g2) +---------------------+ 1 +---------------------+ 16 / 34

GIS Funktionen ST_Within(g1, g2) Prüft ob eine Geometrie innerhalb einer anderen ist. mysql> SET @g1 = ST_GEOMFROMTEXT('POLYGON((174 149, 20 40, 50 60, 125 100, 174 149))'); mysql> SET @g2 = ST_GEOMFROMTEXT('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'); mysql> SELECT ST_WITHIN(@g1,@g2); +--------------------+ ST_WITHIN(@g1,@g2) +--------------------+ 1 +--------------------+ ST_Contains(g1, g2) prüft, ob eine Form komplett in einer anderen Form ist. 17 / 34

GIS Funktionen ST_Area(Polygon) Berechnet die Fläche einer Form und gibt diese zurück. mysql> SET @poly = 'Polygon((0 0,0 3,3 0,0 0))'; mysql> SELECT ST_Area(ST_GeomFromText(@poly)); +---------------------------------+ ST_Area(ST_GeomFromText(@poly)) +---------------------------------+ 4.5 +---------------------------------+ 18 / 34

GIS Funktionen ST_Intersection(g1, g2) Gibt Schnittpunkte zurück. mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)'); mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)'); mysql> SELECT ST_AsText(ST_Intersection(@g1, @g2)); +--------------------------------------+ ST_AsText(ST_Intersection(@g1, @g2)) +--------------------------------------+ POINT(2 2) +--------------------------------------+ 19 / 34

GIS Funktionen ST_Intersects(g1, g2) Prüft ob sich zwei Geometrien schneiden. mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)'); mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)'); mysql> SELECT ST_Intersects(@g1, @g2); +-------------------------+ ST_Intersects(@g1, @g2) +-------------------------+ 1 +-------------------------+ 20 / 34

GIS Funktionen ST_Distance(g1, g2) Berechnet die Distanz zwischen zwei Punkten und gibt diese zurück. mysql> SET @g1 = POINT(1,1); mysql> SET @g2 = POINT(2,2); mysql> SELECT ST_Distance(@g1, @g2); +-----------------------+ ST_Distance(@g1, @g2) +-----------------------+ 1.4142135623730951 +-----------------------+ 21 / 34

ACHTUNG! Vorsicht beim SELECT: root@localhost [test]> SELECT address_id, address_position FROM address_list; +------------+---------------------------+ address_id address_position +------------+---------------------------+ 1 $@?? 2?? "@ +------------+---------------------------+ 2 rows in set (0.00 sec) POINT Werte werden nur mit der richtigen Funktion (ST_X, ST_Y) Lesbar dargestellt! Die Welt ist (noch) flach Höhenangaben (z.b.: Meter über Meer) müssten von Hand angegeben werden. 22 / 34

GeoJSON Verbindung von JSON und GIS GIS für die Position JSON für die Information 23 / 34

GeoJSON Beispiel: Einer Position können Detail-Informationen zugewiesen werden. CREATE TABLE `geo_json` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `position` point NOT NULL, `jdoc` json DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; 24 / 34

GeoJSON Einträge hinzufügen: INSERT INTO geo_json ( position, jdoc ) VALUES ( POINT(47.6951103,8.6385015), '{ "type":"bar", "name":"the Mule" }' ); 25 / 34

GeoJSON Einträge auslesen: mysql> SELECT -> ST_X(position) as x, -> ST_Y(position) as y, -> JSON_UNQUOTE(JSON_EXTRACT(jdoc, "$.type")) as type, -> JSON_UNQUOTE(JSON_EXTRACT(jdoc, "$.name")) as name -> FROM geo_json; +------------+-----------+----------------+-------------------------------+ x y type name +------------+-----------+----------------+-------------------------------+ 47.6951103 8.6385015 Bar The Mule 47.699331 8.6322252 Restaurant Restaurant M?hlental 47.6997696 8.638405 Public Service Feuerwehrzentrum Schaffhausen 47.698033 8.6346874 Restaurant Gasthaus Adler 47.698033 8.6346874 Bank Schaffhauser Kantonalbank +------------+-----------+----------------+-------------------------------+ 26 / 34

GeoJSON Einträge editieren: mysql> UPDATE geo_json -> SET jdoc = '{"name": "Restaurant Muehlental", "type": "Restaurant"}' -> WHERE id=2; mysql> SELECT -> ST_X(position) as x, -> ST_Y(position) as y, -> JSON_UNQUOTE(JSON_EXTRACT(jdoc, "$.type")) as type, -> JSON_UNQUOTE(JSON_EXTRACT(jdoc, "$.name")) as name -> FROM geo_json; +------------+-----------+----------------+-------------------------------+ x y type name +------------+-----------+----------------+-------------------------------+ 47.6951103 8.6385015 Bar The Mule 47.699331 8.6322252 Restaurant Restaurant Muehlental 47.6997696 8.638405 Public Service Feuerwehrzentrum Schaffhausen 47.698033 8.6346874 Restaurant Gasthaus Adler 47.698033 8.6346874 Bank Schaffhauser Kantonalbank +------------+-----------+----------------+-------------------------------+ 27 / 34

GeoJSON UPDATE geo_json SET jdoc = ' { "name": "Restaurant Muehlental", "type": "Restaurant", "open": "Mon: Closed, Tue - Sun: 11:30-14:00 / 17:30-23:30" }' WHERE id=2; mysql> SELECT -> ST_X(position) as x, -> ST_Y(position) as y, -> JSON_UNQUOTE(JSON_EXTRACT(jdoc, "$.type")) as type, -> JSON_UNQUOTE(JSON_EXTRACT(jdoc, "$.name")) as name, -> JSON_UNQUOTE(JSON_EXTRACT(jdoc, "$.open")) as open -> FROM geo_json -> WHERE id=2\g *************************** 1. row *************************** x: 47.699331 y: 8.6322252 type: Restaurant name: Restaurant Muehlental open: Mon: Closed, Tue - Sun: 11:30-14:00 / 17:30-23:30 1 row in set (0.00 sec) 28 / 34

Real-Life Anwendungen Stadtkarte Ort wird über GIS identifiziert Informationen zum Ort Feuerwehrzentrum Schaffhausen werden in JSON abgelegt mit Informationen zum öffentlichen Verkehr, den Strassen und dem Gebäude. http://fwsh.ch/beta/index.php/organisation/feuerwehrzentrum https://www.openstreetmap.org/#map=18/47.70111/8.63591 29 / 34

Real-Life Anwendungen Karten mit Informationen zu Geschäften 30 / 34

Real-Life Anwendungen Wo ist der nächste Briefkasten? Wo ist die nächste Pizzeria? ÖPNV Strecken Haltestellen Fahrzeiten? 31 / 34

Real-Life Anwendungen Lokalisierung Apple: Find Friends Facebook: Nearby Friends Google: Timeline Event-Tracking Einbrüche Diebstähle Wasserrohrbrüche Feuer 32 / 34

Lesenswert MySQL JSON Funktionen https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html JSON Tuning https://www.percona.com/blog/2016/03/07/json-document-fast-lookup-with-mysql-5-7/ MySQL GIS Funktionen http://dev.mysql.com/doc/refman/5.7/en/spatial-function-reference.html How To für GIS https://www.percona.com/blog/2016/02/03/new-gis-features-in-mysql-5-7/ http://mysqlserverteam.com/mysql-5-7-and-gis-an-example/ 33 / 34

Q&A Fragen? Diskussion? Wir haben Zeit für ein persönliches Gespräch... FromDual bietet neutral und unabhängig: Beratung Remote-DBA Support für MySQL, Galera, Percona Server und MariaDB Schulung /presentations 34 / 34