Sunteți pe pagina 1din 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

MySQLBR

meetup.com/MySQL-BR

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

Insert Information Protection Policy Classification from Slide 12

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 MySQL AB

at 16 CPU MySQL 5.1 Sun

at 32 CPU MySQL 5.5 Oracle

at 48 CPU MySQL 5.6

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 MySQL Enterprise Audit MySQL Enterprise Scalability MySQL Enterprise High Availability
12 Copyright 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 12

Oracle Product Certifications/Integrations MySQL Enterprise Monitor/Query Analyzer MySQL Enterprise Backup

MySQL Workbench

Arquitetura MySQL Database


Suporte s mais conhecidas plataformas/linguagens de desenvolvimento 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. Insert Information Protection Policy Classification from Slide 12

Gerenciamento eficiente e multithread de sesses

Opes flexveis de logging e armazenamento fsico

Qual Storage Engine usar?


MyISAM
Transaes Nvel de Lock Replicao Foreign Keys Full-text indexes Compresso de dados Caches Suporte Geospacial Limite de armazenamento Tabela Assncrona ou Semi-sncrona somente Leitura somente ndices Tipos de Dados e ndices 256TB

InnoDB
Linha Assncrona ou Semi-sncrona a partir da v5.6 Dados e ndices somente Tipos de Dados 64TB

Archive
Tabela Assncrona ou Semi-sncrona somente Tipos de Dados Ilimitado

NDB Cluster
Linha Sncrona, Multimaster a partir da v7.3 Dados e ndices somente Tipos de Dados 384EB

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
Point Linestring Polygon
Em um mapa mundi, cada Point poderia representar uma cidade. Em um mapa municipal, Points representariam paradas de nibus. Em um mapa mundi, poderia representar rios. Em um mapa municipal, poderia representar ruas. 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. Em um mapa nacional, poderia representar rodovias federais ou rios conectados.
Em um mapa nacional, poderia representar lagos pertencentes ao mesmo sistema hdrico.

MultiLineString
MultiPolygon

19

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
Insert Information Protection Policy Classification from Slide 12

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

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 rio

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

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
SET @g = 'POINT(1 1)'; INSERT INTO mapamundi VALUES ( GeomFromText(@g) );
27 Copyright 2012, Oracle and/or its affiliates. All rights reserved.

...ou ainda
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 2 POINT(1 1) LINESTRING(0 0,1 1,2 2)
ou tambm
SET @g = LINESTRING(0 0,1 1,2 2)'; INSERT INTO mapamundi VALUES ( LineStringFromText(@g) );

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.

Insert Information Protection Policy Classification from Slide 12

Criando um BD MySQL Spatial


Exemplo: inserindo um Polygon
mapamundi geometria 1 2 3 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 2 3 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. 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 Commands end with ; or \g.

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 ResultSet //objeto Statement 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

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!

55

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

Insert Information Protection Policy Classification from Slide 12

@MySQLBR

facebook.com/MySQLBR

Obrigado!

meetup.com/MySQL-BR

56

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

Insert Information Protection Policy Classification from Slide 12

MySQL Spatial
Perguntas?

57

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

Insert Information Protection Policy Classification from Slide 12

S-ar putea să vă placă și