Você está na página 1de 56

MySQL Spatial

Airton Lastori
airton.lastori@oracle.com

10-abr-2013
1

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

@MySQLBR

facebook.com/MySQLBR

meetup.com/MySQL-BR

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

MySQLBR

Alguns clientes MySQL

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Alguns clientes MySQL

fonte: alexa.com/topsites 30-jan-2013


4

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Alguns clientes MySQL

mysql.com/customers
5

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Alguns clientes MySQL

mysql.com/customers
6

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

MySQL: casos de sucesso


+ de 20 indstrias
mysql.com/customers

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Evoluo da escalabilidade do MySQL

2008

2009

2010

2013

at 4 CPU
MySQL 5.0

at 16 CPU
MySQL 5.1

at 32 CPU
MySQL 5.5

at 48 CPU
MySQL 5.6

MySQL AB

Sun

Oracle

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Compromisso Oracle com MySQL Community


Portflio disponvel para download e uso sob GPL

MySQL Database Community Server


MySQL Cluster
MySQL Workbench
MySQL Connectors
MySQL Proxy
Documentao no GPL
Forums, Lists, Bugs, Blogs
10

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Conectores: amplo suporte a vrias linguagens


Oracle

Connector/ODBC
Connector/Net (ADO.NET)
Connector/Python
Connector/J (JDBC)
Connector/C (C API)
Connector/C++ (C++ API)

Comunidade

PHP
Perl
Ruby
TCL
Eiffel

dev.mysql.com/doc/refman/5.5/en/connectors-apis.html
11

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

MySQL Enterprise Edition


Maior produtividade e mitigao de riscos
Oracle Premier
Lifetime Support
MySQL Enterprise
Security

Oracle Product
Certifications/Integrations

MySQL Enterprise
Audit

MySQL Enterprise
Backup

MySQL Enterprise
Scalability
MySQL Enterprise
High Availability
12

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

MySQL Enterprise
Monitor/Query Analyzer

MySQL Workbench

Insert Information Protection Policy Classification from Slide 12

Arquitetura MySQL Database


Suporte s mais
conhecidas
plataformas/linguagens
de desenvolvimento

Gerenciamento
eficiente e multithread de sesses

Parsing completo
DML+DDL,
otimizador,
baseado em custo,
caching de queries
e resultados
Vrias opes de
Storage Engine
para necessidades
especficas das
aplicaes
13

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Opes flexveis de
logging e
armazenamento
fsico
Insert Information Protection Policy Classification from Slide 12

Qual Storage Engine usar?


MyISAM

InnoDB

Archive

NDB Cluster

Tabela

Linha

Tabela

Linha

Assncrona ou
Semi-sncrona

Assncrona ou
Semi-sncrona

Assncrona ou
Semi-sncrona

Sncrona, Multimaster

Foreign Keys

a partir da v7.3

Full-text indexes

a partir da v5.6

Compresso de dados

somente Leitura

Caches

somente ndices

Dados e ndices

Dados e ndices

Suporte Geospacial

Tipos de Dados e
ndices

somente Tipos de
Dados

somente Tipos de
Dados

somente Tipos de
Dados

256TB

64TB

Ilimitado

384EB

Transaes
Nvel de Lock
Replicao

Limite de
armazenamento

dev.mysql.com/doc/refman/5.5/en/storage-engines.html
14

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

MySQL Spatial Extensions

Suporte gerao,
armazenamento e anlise de
informaes geogrficas.

15

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

OpenGIS
Simple Features Specification for SQL

Modelo conceitual para dados espaciais / geogrficos


prope extenses para SGBDs SQL
padronizado pelo Open Geospatial Consortium
inclui SQL with Geometry Types, estendendo a linguagem
MySQL aderente ao OpenGIS
implementa um subconjunto dos SQL with Geometry Types
colunas podem possuir os Tipos Geomtricos do OpenGIS
tambm esto disponveis funes geomtricas para anlise
www.opengis.org/docs/99-049.pdf
16

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Terminologia
OpenGIS Simple Features Specification for SQL

geographic feature ou geospatial feature ou geometry


algo com uma localizao no mundo
definido e representado por um ponto ou agregado de pontos
pode ser uma entity, space, definable location
entity
uma montanha, um lago, uma cidade etc
space
um distrito municipal, os trpicos etc
definable location
um cruzamento entre ruas, etc
17

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

OpenGIS Geometry Model


Tipos de Dados propostos no SQL with Geometry Types

*apenas tipos em negrito podem ser instanciados

18

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

OpenGIS Geometry Model


Exemplos de utilizao dos Tipos de Dados instanciveis

19

Point

Em um mapa mundi, cada Point poderia representar uma cidade.


Em um mapa municipal, Points representariam paradas de nibus.

Linestring

Em um mapa mundi, poderia representar rios.


Em um mapa municipal, poderia representar ruas.

Polygon

Em um mapa nacional, poderia representar florestas, estados etc.

MultiPoint

Em um mapa mundi, poderia representar uma cadeia de pequenas ilhas


que formam um arquiplogo.
Em um mapa municipal, poderia representar pontos de paradas de uma
linha de nibus.

MultiLineString

Em um mapa nacional, poderia representar rodovias federais ou rios


conectados.

MultiPolygon

Em um mapa nacional, poderia representar lagos pertencentes ao mesmo


sistema hdrico.

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

OpenGIS Geometry Model


Hierarquia das Propriedades Geometry e Point
Geometry
type
SRID
coordinates
interior
boundary
exterior
MBR //envelope
simple
closed
empty
dimension
20

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Point
x-coordinate
y-coordinate
dimension = 0
boundary = EMPTY

OpenGIS Geometry Model


Formatos de Armazenamento
WKT (Well-Known Text Format)
projetado para transportar dados em ASCII, fcil leitura, por exemplo:
POINT(15 20)
LINESTRING(0 0, 10 10, 20 25, 50 60)
POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))

WKB (Well-Known Binary Format) OpenGIS e ISO SQL/MM Part 3 Spatial


BLOBs contendo dados binrios de informaes geomtricas WKB
POINT(1 1) = 0101000000000000000000F03F000000000000F03F
1 byte (unsigned) para endianess
4 bytes (unsigned) para Tipo de Dado de 1 a 7
8 bytes (double-precision IEEE 754) para coordenadas X e Y
21

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Tipos de Dados disponveis

22

GEOMETRY pode armazenar geometrias de qualquer tipo


POINT
LINESTRING
POLYGON

GEOMETRYCOLLECTION pode armazenar colees de todos tipos


MULTIPOINT
MULTILINESTRING
MULTIPOLYGON

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Exemplo: criando uma tabela

mapamundi
cidade

CREATE TABLE mapamundi (


cidade POINT
) ENGINE=MyISAM;

23

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Exemplo: alterando uma tabela, adicionar coluna

mapamundi
cidade

ALTER TABLE mapamundi


ADD rio LINESTRING;

24

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

rio

Criando um BD MySQL Spatial


Exemplo: alterando uma tabela, remover colunas

mapamundi
geometria

ALTER TABLE mapamundi DROP rio;


ALTER TABLE mapamundi
ADD geometria GEOMETRY;
ALTER TABLE mapamundi DROP cidade;

25

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Criando objetos com funes WKT
GeomFromText() ou
funes especficas para cada Tipo, ex: PointFromText()
Criando objetos com funes WKB
GeomFromWKB() ou
funes especficas para cada Tipo, ex: PointFromWKB()

Criando objetos com funes especficas do MySQL


Point(), LineString(), Polygon()
GeometryCollection(), MultiPoint(), MultiLineString(), MultiPolygon()
26

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Exemplo: inserindo um Point via WKT
mapamundi

geometria
1

POINT(1 1)

INSERT INTO mapamundi VALUES (


GeomFromText('POINT(1 1)')
);

ou tambm

...ou ainda

SET @g = 'POINT(1 1)';


INSERT INTO mapamundi VALUES (
GeomFromText(@g)
);
27

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

INSERT INTO mapamundi VALUES(


Point(1,1)
);

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Exemplo: removendo um Point

mapamundi
geometria

DELETE FROM mapamundi


WHERE geometria = GeomFromText('POINT(1 1)');

28

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Exemplo: inserindo um Point via WKB

mapamundi
geometria
1

POINT(1 1)

INSERT INTO mapamundi VALUES (


GeomFromWKB(0x0101000000000000000000F03F000000000000F03F)
);

29

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Exemplo: inserindo um LineString
mapamundi
geometria
1

POINT(1 1)

LINESTRING(0 0,1 1,2 2)

SET @g = 'LINESTRING(0 0,1 1,2 2)';


INSERT INTO mapamundi VALUES (
GeomFromText(@g)
);

30

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

ou tambm
SET @g = LINESTRING(0 0,1 1,2 2)';
INSERT INTO mapamundi VALUES (
LineStringFromText(@g)
);

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Exemplo: inserindo um Polygon
mapamundi
geometria
1

POINT(1 1)

LINESTRING(0 0,1 1,2 2)

POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))

SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))';
INSERT INTO mapamundi VALUES (GeomFromText(@g));

31

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Exemplo: consultando registros
mapamundi
geometria
1

POINT(1 1)

LINESTRING(0 0,1 1,2 2)

POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))

SELECT AsText(geometria) FROM mapamundi;


SELECT AsBinary(geometria) FROM mapamundi;

32

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Anlise de dados com MySQL Spatial


Funes Disponveis 1/2
Converso
AsBinary(), AsText(), GeomFromText(), GeomFromWKB()
Propriedades
Dimension(), Envelope(), GeometryType(), IsSimple(), SRID()
X(), Y()
EndPoint(), GLenght(), NumPoints(), PointN(), StartPoint()
IsClosed()
Area(), ExteriorRing(), InteriorRingN(), NumInteriorRings()
Centroid()
GeometryN(), NumGeometries()
33

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Anlise de dados com MySQL Spatial


Funes Disponveis 2/2
Relaes
MBRContains(), MBRDisjoint(), MBREqual(), MBRIntersects(),
MBROverlaps(), MBRTouches(), MBRWithin()
Contains(), Crosses(), Disjoint(), Equals(), Intersects(), Overlaps(),
Touches(), Within()
ST_Contains(), ST_Crosses(), ST_Disjoint(), ST_Equals(),
ST_Intersects(), ST_Overlaps(), ST_Touches, ST_Within()
Clonagem
Buffer()

34

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Otimizaes nos dados do MySQL Spatial


ndices SPATIAL para Range Scans
Criando ndices Spatial
ALTER TABLE mapamundi CHANGE geometria geometria GEOMETRY NOT NULL;
CREATE SPATIAL INDEX sp_index ON mapamundi(geometria);

Usando ndices Spatial em Range Scans


SET @g = 'POLYGON((0 0,9 0,9 9,0 9,0 0),(5 5,7 5,7 7,5 7, 5 5))';
SELECT AsText(geometria) FROM mapamundi
WHERE MBRContains(GeomFromText(@g),geometria);

apenas deixe o trabalho de selecionar o ndice para o Optimizer!


Use o comando EXPLAIN para confirmar se o ndice utilizado.
35

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Nvel de Conformidade do MySQL Spatial com


OpenGIS
Funcionalidades no-padronizadas
Lenght() implementada com o nome GLenght()
Funcionalidades adicionais
prximos slides
Funcionalidades no-implementadas
prximos slides

36

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Funcionalidades Adicionais do MySQL Spatial no


definidas pelo OpenGIS
GeometryCollection(g1,g2,...)
LineString(pt1,pt2,...)
MultiLineString(ls1,ls2,...)
MultiPoint(pt1,pt2,...)
MultiPolygon(poly1,poly2,...)
Point(x,y)
Polygon(ls1,ls2,...)

37

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Funcionalidades definidas pelo OpenGIS e no


implementadas pelo MySQL
BdPolyFromText() e BdMPolyFromText()
BdPolyFromWKB() e BdMPolyFromWKB()
Boundary()
Buffer() implementada a partir do MySQL 5.6
ConvexHull()
Difference()
Intersection()
IsEmpty() e IsRing()
IsSimple() implementada a partir do MySQL 5.6
PointOnSurface()
SymDifference()
Union
Metadata Views como GEOMETRY_COLUMNS
38

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Como comear

Instalao bsica, ambiente de


desenvolvimento
...em 15 minutos, ou menos!

39

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

40

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

No Linux ou Mac, prefira os binrios

mysql.com/downloads/mysql
41

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Cliente-Servidor

Client
mysql / mysql.exe

Server
mysqld / mysqld.exe

42

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Iniciar ou Parar o servidor MySQL no Windows

ou via MySQL Notifier

43

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Iniciar ou Parar o servidor MySQL no Linux


Iniciar:
/usr/local/mysql/bin> mysqld_safe --defaults-file=/etc/my.cnf &

Parar:
/usr/local/mysql/bin> mysqladmin shutdown

dev.mysql.com/doc/refman/5.5/en/mysqld-safe.html
44

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Primeira conexo
C:\Program Files\MySQL\MySQL Server 5.5\bin>mysql -uroot -p
Enter password: ****
Welcome to the MySQL monitor.

Commands end with ; or \g.

Your MySQL connection id is 8


Server version: 5.6.11 MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective


owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

45

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Teste via MySQL Workbench 1/2

46

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Teste via MySQL Workbench 2/2

47

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Cliente-Servidor

App + Connector
JDBC, ODBC, .Net, PHP, Python, Perl, Ruby, Native C API

Server
mysqld / mysqld.exe

48

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Mos obra!

Hello World
...em Java

49

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Adicione o driver MySQL ao CLASSPATH


caminho completo do .jar

Confira:
C:\>set CLASSPATH
CLASSPATH=.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip;C:\Program
Files\MySQL\mysql-connector-java-5.1.22\mysql-connector-java-5.1.22-bin.jar

50

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

HelloMysql.java 1/2
import java.sql.*;

public class HelloMysql {


public static void main(String args[]){
System.out.println("Tentando conectar ao MySQL...");

try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mysql";
String usuario = "root";
String senha = "root";
Connection con = DriverManager.getConnection(url, usuario, senha);
System.out.println("URL: " + url);
System.out.println("Connection: " + con);

Continua
51

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

HelloMysql.java 2/2
Statement stmt = con.createStatement();
ResultSet rs;

//objeto Statement

//objeto ResultSet

rs = stmt.executeQuery("SELECT * FROM world.country");


System.out.println("Ola mundo!");
while(rs.next()){
String nomePais = rs.getString("Name");
System.out.print(nomePais + ", ");

}//end while
con.close();
} catch( Exception e ) {

e.printStackTrace();
}//end catch
}//end main

}//end class HelloMysql


52

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

PRONTO!

java HelloMysql
C:\tutorial>javac HelloMysql.java

C:\tutorial>java HelloMysql
Tentando conectar ao MySQL...
URL: jdbc:mysql://localhost:3306/mysql
Connection: com.mysql.jdbc.JDBC4Connection@ed07f45

Ola mundo!
Aruba, Afghanistan, Angola, Anguilla, Albania, Andorra, Netherlands Antilles, Un
ited Arab Emirates, Argentina, Armenia, American Samoa, Antarctica, French South
ern territories, Antigua and Barbuda, Australia, Austria, Azerbaijan, Burundi, B
elgium, Benin, Burkina Faso, Bangladesh, Bulgaria, Bahrain, Bahamas, Bosnia and
Herzegovina, Belarus, Belize, Bermuda, Bolivia, Brazil, Barbados, Brunei, Bhutan

ietnam, Vanuatu, Wallis and Futuna, Samoa, Yemen, Yugoslavia, South Africa, Zamb
ia, Zimbabwe,

53

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Prximo passo: documentao


Reference Manual
1. Tutorial
2. SQL Syntax
3. Connectors & APIs, Memcached
4. MySQL Spatial Extensions

5. Functions, Views, Stored Programs


6. Optimization
dev.mysql.com/doc/refman/5.5/en/index.html
54

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Sumrio

55

O MySQL o banco de dados open source mais popular do


mundo, usado em grandes sites, aplicaes mobile, embarcadas
e sistemas de informaes geogrficas.

Possui amplo suporte ao modelo OpenGIS, principalmente no


Storage Engine MyISAM.

Instale e comece a usar em menos de 15min. Use e abuse da


documentao!

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

@MySQLBR

facebook.com/MySQLBR

meetup.com/MySQL-BR

56

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Obrigado!

MySQL Spatial
Perguntas?

57

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Insert Information Protection Policy Classification from Slide 12

Você também pode gostar