GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in...

35
GIS features in MariaDB and MySQL What has happened in recent years? Hartmut Holzgraefe Principal Support Engineer at MariaDB Inc. [email protected] August 20, 2016 Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 1 / 35

Transcript of GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in...

Page 1: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

GIS features in MariaDB and MySQLWhat has happened in recent years?

Hartmut Holzgraefe

Principal Support Engineer at MariaDB Inc.

[email protected]

August 20, 2016

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 1 / 35

Page 2: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Overview

1 GIS Introduction

2 MySQL GIS History

3 Other Open Source GIS Databases

4 Performance

5 The End ...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 2 / 35

Page 3: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

GIS Introduction

1 GIS IntroductionExamples

2 MySQL GIS History

3 Other Open Source GIS Databases

4 Performance

5 The End ...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 3 / 35

Page 4: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

GIS Data Types

Geospatial Information System (GIS) data types describe geometries in a(usually) two-dimensional space. There are several different geometricsubtypes:

Simple types: POINT, LINESTRING, POLYGON, GEOMETRY

Collection types: MULTIPOINT, MULTILINESTRING, MULTIPOLYGON,GEOMETRYCOLLECTION

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 4 / 35

Page 5: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Spatial Properties

Spatial properties of a geometry can be:

Coordinates

Length

Area

Is Closed

Bounding Rectangle

...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 5 / 35

Page 6: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Spatial Relationships

The most important spatial relationships between two geometries:

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 6 / 35

Page 7: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Examples

1 GIS IntroductionExamples

2 MySQL GIS History

3 Other Open Source GIS Databases

4 Performance

5 The End ...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 7 / 35

Page 8: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Creating GIS columns

CREATE TABLE test.t1 (

id INT PRIMARY KEY,

shape GEOMETRY,

poi POINT,

SPATIAL INDEX (shape)

);

CREATE TABLE test.t2 (

id INT PRIMARY KEY,

}

CALL AddGeometryColumn(’catalog’, ’test’, ’t2’, ’shape’, 0);

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 8 / 35

Page 9: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Adding data

INSRET INTO gis_table (geom)

VALUES( ST_GeomFromText(’Point(51.9 8.4)’));

INSRET INTO gis_table (geom)

VALUES( ST_GeomFromText(’Line(51.9 8.4,

52.1 8.4,

52.1 8.6,

51.9 8.6)’));

INSRET INTO gis_table (geom)

VALUES( ST_GeomFromText(’Polygon((51.9 8.4,

52.1 8.4,

52.1 8.6,

51.9 8.6,

51.9 8.4))’));

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 9 / 35

Page 10: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Points in a specific rectangle

SELECT COUNT(*)

FROM germany_points

WHERE ST_CONTAINS(ST_GeomFromText(’Polygon((51.9 8.4,

52.1 8.4,

52.1 8.6,

51.9 8.6,

51.9 8.4))’,

point);

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 10 / 35

Page 11: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Points within another geometry

SELECT COUNT(*)

FROM germany_point pt

JOIN germany_polygon pl

WHERE ST_CONTAINS(pl.area, pt.point)

AND pl.name = ’Bielefeld’

AND pt.type = ’post_box’;

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 11 / 35

Page 12: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

MySQL GIS History

1 GIS Introduction

2 MySQL GIS HistoryHow it began

3 Other Open Source GIS Databases

4 Performance

5 The End ...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 12 / 35

Page 13: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

How it began

GIS support first appeared in MySQL 4.1 (2004)

Supports MBR (“Minimum Bounding Rectangle”) spatial relationsonly for now, true spatial relationships planned to be added later

Supports spatial indexes, but only with MyISAM storage engine

not much adoption, original developers get assigned to other featuresfor a while

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 13 / 35

Page 14: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Why MBR is not enough

MBR CONTAINS() True ST CONTAINS()

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 14 / 35

Page 15: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Finally things get moving again

In 2011 MariaDB 5.3 GA finally introduces true spatial relationshipsupport in a production release

In 2013 Oracle catches up with true spatial relationships in MySQL5.6 GA

adoption still stays low though (too little, too late?)

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 15 / 35

Page 16: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Things start to move into different directions

In 2015 MariaDB 10.1 GA becomes fully OpenGIS compliant (in a way)

Adds GIS related views like GEOMETRY COLUMNS toINFORMATION SCHEMA

Provides AddGeometryColumn() / DropGeometryColumn()

procedures as alternatives to its native DDL syntax

Columns can be given a default SRIDs (Spatial ReferenceIDentificatior)

and some more ...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 16 / 35

Page 17: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Meanwhile on the other side ...

MySQL 5.7 also introduces some important, but different, changes:

begins to use Boost.Geometry instead of homegrown GISimplementation

InnoDB now supports spatial indexes, too

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 17 / 35

Page 18: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

What’s up next?

MariaDB will get InnoDB spatial indexes as soon as it merges XtraDB 5.7Other features currently in the MariaDB queue (but low priority):

3rd coordinate, e.g. for altitude

high precision coordinates

client side support for GIS transformations

Oracle, as usual, has not made public any further plans yet ...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 18 / 35

Page 19: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Other Open Source GIS Databases

1 GIS Introduction

2 MySQL GIS History

3 Other Open Source GIS DatabasesAdvantages / Disadvantages

4 Performance

5 The End ...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 19 / 35

Page 20: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

PostgreSQL + PostGIS

GIS support for PostgreSQL comes via the PostGIS extension:

provides many additional features beyond the basic OpenGISrequirements

extension is licensed under GPL, not BSD like PostgreSQL itself

installation used to be a little bit tricky ...

... but with CREATE EXTENSION it no longer is

largest user base by far (and rightfully so)

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 20 / 35

Page 21: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

SQLite + SpatiaLite

GIS support for SQLite comes via the SpatiaLite extension

provides a subset of OpenGIS features

has spatial index support, but only via a special API, not plain SQL

not very often seen in the wild (AFAICT)

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35

Page 22: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

MariaDB and MySQL

With MariaDB and MySQL GIS features are part of the server itself.GIS support can be excluded at compile time, but is enabled by default.

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 22 / 35

Page 23: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Advantages

no need to install / activate extra components

mostly (MySQL 5.6+ / MariaDB 5.3+) or fully OpenGIS compliant(MariaDB 10.1)

GIS data types and functions are ’first class citizens’

GIS columns and indexes can be created like any other column orindex

... no special AddGeometryColumn() procedure calls needed for this

... but is now available as an alternative in MariaDB 10.1 forOpenGIS compatibility

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 23 / 35

Page 24: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Disadvantages

not much functionality beyond OpenGIS

so far strictly 2D only

no support for projections / coordinate transformations yet(“the world is flat”)

data types available in all storage engines ...

...but spatial indexes only in a few (MyISAM, Aria, InnoDB startingwith 5.7)

optimizer not yet too clever about combining spatial and regularindexes

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 24 / 35

Page 25: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Performance

1 GIS Introduction

2 MySQL GIS History

3 Other Open Source GIS Databases

4 Performance

5 The End ...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 25 / 35

Page 26: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Test Data Set

To do some real world testing I have extended osm2pgsql, the mainOpenStreetMap database import tool, with an alternative MySQL APIbackend and imported all German OSM data.

This provides us with a test data set of:

8 048 015 standalone Points

11 834 798 Lines

28 206 359 Polygons

a total of 17GB of table data

Test data will be uploaded as mysqldump, MyISAM files and as InnoDBtransportable table space export onhttp://php-groupies.de/gis-data/ later

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 26 / 35

Page 27: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Query performance 1

SELECT COUNT(*)

FROM planet_osm_point

WHERE ST_CONTAINS(ST_GeomFromText(’Polygon((945000 6780000,

955000 6780000,

955000 6820000,

945000 6820000,

945000 6780000)

)’), way);

MariaDB 10.1 MySQL 5.7 PostGIS SpatiaLite

0.08 0.08 0.03 ?

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 27 / 35

Page 28: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Query performance 2

SELECT COUNT(*)

FROM planet_osm_point n

JOIN planet_osm_polygon p

ON ST_CONTAINS(p.way, n.way)

WHERE p.name = ’Bielefeld’

AND n.amenity = ’post_box’;

Data Set MariaDB 10.1 MySQL 5.7 PostGIS SpatiaLite

With spatial index only 15.7s 15.8s — ?With extra indexes 0.95s 0.92s 0.18s ?

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 28 / 35

Page 29: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Performance summary 1 - MariaDB vs. MySQL

MariaDB and MySQL don’t differ significantly when using MyISAM

INSERTing and index creation are faster on MyISAM than on InnoDB

SELECT performance is only very slightly better on MyISAM ( 1

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 29 / 35

Page 30: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Performance summary 2 - compared to others

INSERTs on MyISAM and SpatiaLite perform roughly equally

INSERTs on InnoDB and PostGIS also perform roughly equally well

PostGIS has a big advantage when bulk loading with COPY though

simple SELECTs on indexed GIS data perform equally well onMySQL/MariaDB and PostGIS

with more complex queries the PostgreSQL optimizer takes the lead

SpatiaLite not really comparable as index access requires spetial API

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 30 / 35

Page 31: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

The End ...

1 GIS Introduction

2 MySQL GIS History

3 Other Open Source GIS Databases

4 Performance

5 The End ...

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 31 / 35

Page 32: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Summary and Conclusions

all the basic OpenGIS features are there now

performance could be better in some situations, but is acceptable

integrating GIS data into a MySQL ecosystem is a valid option

if GIS is your primary focus you’d still better off with PostGIS though

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 32 / 35

Page 33: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

Questions!

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 33 / 35

Page 34: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

References

Contact [email protected]

MariaDB GIS https://mariadb.com/kb/en/gis-functionality/

MySQL GIS http://dev.mysql.com/doc/refman/5.6/en/spatial-extensions.html

PostGIS http://postgis.net/

SpatiaLite https://www.gaia-gis.it/fossil/libspatialite/index

Table Files http://php-groupies.de/gis-data/ (soon)

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 34 / 35

Page 35: GIS features in MariaDB and MySQL - FrOSCon · Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 21 / 35 MariaDB and MySQL With MariaDB and MySQL

The End?Or just the beginning?

Hartmut Holzgraefe (MariaDB Inc.) GIS features in MariaDB and MySQL August 20, 2016 35 / 35