空间数据库实践


空间数据库实践 颜勋 yanxunyx@gmail.com 2010.09.11 • GIS 与 Spatial DB • MySQL Spatial • Spatial DB 开发 • 其他 GIS GIS • Service Based GIS – Google Maps API, Microsoft Virtual Earth, OpenStreetMap GIS • GIS的大众化 • 用户贡献 – VGI, Volunteered Geographic Information (GoodChild) – OpenMapStreet • 数据互操作 • 空间数据的普及→ 存储、管理分析地理数据? Geographical techniques and tools used for personal activities or for utilization by a non-expert group of users; not formal or analytical. --Andrew Turner 开源 GIS • Web Mapping – MapServer – GeoServer – MapGuide Open Source – OpenLayers • Desktop Applications – GRASS GIS – OSSIM – Quantum GIS (QGIS) – gvSIG – uDig • Geospatial Libraries – FDO – GDAL/OGR – GEOS – GeoTools – MetaCRS • Spatial Database – PostGIS – MySQL Spatial – SpatiaLite GIS 软件栈 商业 GIS 开源 GIS Data Model & Lib GDAL/OGR, OGDI, JTS/GEOS… Spatial Database/Image Database PostGIS, MySQL Spatial, SpatiaLite, Ingres Spatial, Terralib… Tools GRASS, QGIS, uDIG, SharpMap, OpenJUMP… Web Service/Mapping GeoServer, MapServer, MapGuide, pyWPS, OpenLayers… Standard OGC , ISO Data Model & Lib -- Spatial Database/Image Database Oracle Spatial, DB2 Spatial Extender, Informix DataBlader, SQLServer Spatial Tools ArcMap(ArcSDE), MapInfo Desktop Web Service/Mapping ArcGIS Server GIS 数据 • 大数据量,数据密集 – National Elevation Dataset (USGS) - 60G (30m sampling) • 非结构化 • 高维 • 计算密集 – 空间操作,空间拓扑分析,空间聚集 空间数据的存储 • File System • File System & DBMS • Middleware • Spatially Enabled DB GIS Spatial DB • 商业 – Oracle Spatial – SQL Server Spatial – IBM DB2 Spatial Extender – Informix DataBlader • 开源 – PostGIS – MySQL Spatial – SpatialLite (SQLite) MySQL Spatial • 数据模型 • 开放地理空间信息协会(OGC) SFASQL • 国际标准化组织 SQL/MM Spatial • MySQL - OpenGIS Geometry Model MySQL Spatial • 空间数据格式 – Well-Known Text (WKT) •– LINESTRING(10 10, 20 20, 30 40) •– POLYGON((10 10, 10 20, 20 20, 20 15, 10 10)) – Well-Known Binary (WKB) • POINT(1,1) is 0101000000000000000000F03F000000000000F03F • Byte order : 01 • WKB type : 01000000 • X : 000000000000F03F • Y : 000000000000F03F MySQL Spatial • MySQL 空间数据类型 • 构造空间数据 • 分析空间数据 • 优化空间分析 MySQL Spatial • 空间数据类型 – GEOMETRY – POINT – LINESTRING – POLYGON – MULTIPOINT – MULTILINESTRING – MULTIPOLYGON – GEOMETRYCOLLECTION MySQL Spatial • 创建空间数据 • xxxFromWKT – GeomFromText(wkt,srid) – PointFromText(wkt,srid) • xxxFromWKB – LineStringFromWKB(wkt,srid) – PolyFromWKB(wkt,srid) • GeomFromText – GeomFromText('LineString(1 1,2 2,3 3)') MySQL Spatial – 创建空间数据 • 创建&插入空间数据 CREATE TABLE lakes (shape GEOMETRY); ALTER TABLE roads ADD shape LINESTRING; INSERT INTO geom VALUES (LineStringFromText('LINESTRING(0 0,1 1,2 2)')) INSERT INTO geom VALUES (GeomFromWKB (0x0101000000000000000000F03F000000000000F03F)); MySQL Spatial – 查找空间数据 • 查找空间数据 mysql> select AsText(location) as Location > from gas_station; +-------------------------+ | Location | +-------------------------+ | POINT(1 1) | | POINT(1000, 1000) | +-------------------------+ MySQL Spatial – 空间索引 • 空间索引 – MySQL采用使用 R-tree 作为空间索引 – MySQL 的 MyISAM , InnoDB, NDB以及ARCHIVE 存储引擎支持空间数据的生成、存储与分析 – MyISAM 存储引擎支持 R-tree 索引 MySQL Spatial – 空间索引 • Quadratic R-tree – rt_index, rt_key, rt_mbr, rt_split select * from test.grassland as T1, test.lakes as T2, test.alaska as T3 where Intersects(T1.shape, T2.shape) and Intersects(T1.shape, T3.shape) ; PLAN: '1', 'SIMPLE', 'T2', 'ALL', 'SHAPE', NULL, NULL, NULL, '15', '' '1', 'SIMPLE', 'T1', 'ALL', 'SHAPE', NULL, NULL, NULL, '143', 'Range checked for each record (index map: 0x2)' '1', 'SIMPLE', 'T3', 'ALL', 'SHAPE', NULL, NULL, NULL, '653', 'Using where; Using join buffer' MySQL Spatial • 索引比较 – Oracle Spatial:R-tree,Quadtree – IBM DB2 Spatial Extender:R-tree, Spherical VoronoiTessalation – InfomixSpatial:R-tree – SQL Server Spatial:4级网格索引(B-tree) – MySQLSpatial:R-Tree(MyISAM) – PostGIS/PostgreSQL:R-tree(GiST) MySQL Spatial • ogr2ogr ogr2ogr -f "MySQL" MYSQL:"test,host=localhost, user=root, password=123456, port=3306" -lco engine=MYISAM C:\TEMP\sample\shapefiles\lakes.shp • shp2mysql Transform each geometry in shape file to data load script. MySQL Spatial • Quantum GIS (visualize & analyze spatial data) MySQL Spatial • GeoServer MySQL vs PostGIS • MBR近似查询 – 性能优于 PostGIS • 简单空间谓词查询 – 与 PostGIS 相当 • 复杂查询混合查询 – 不及PostGIS MySQL Spatial • 功能 – NOT null-safe – Only 2D Support – 有限的空间函数 • 分析查询 – 数据加载速度: MySQL > PostGIS (Transaction!) – 空间索引的创建: MySQL < PostGIS (diff split algo) – 查询: MySQL ? PostGIS • 存储 – ISAM 数据更新和空间索引(ACID & Transaction) – 存储格式 WKB • 优化器 – 支持空间索引的选择 • 执行引擎 – 没有特殊的空间算子 例子 • 空间数据库的实践( Ingres DBMS ) • 需要考虑的问题 – 空间数据类型 – 空间运算函数(Geos) – 存储 – 空间索引 – 优化器 – 执行算子 例子 • 抽象的扩展接口 • 空间数据类型 • 空间运算函数 static IIADD_FI_DFN function_instances[] = {{ II_O_FUNCTION_INSTANCE, FI_NOTEQUAL, FI_EQUAL,II_NE_OP, II_COMPARISON, II_FID_F0_NOFLAGS, 0, 2, comp_parms, II_BOOLEAN, II_RES_FIXED, sizeof(int), II_PSVALID, usop_compare , 0 }, …… …} IIudadt_register(IIADD_DEFINITION **ui_block_ptr , II_CALLBACKS *callback_block ) { register_block.add_count = register_block.add_dt_cnt +register_block.add_fo_cnt +register_block.add_fi_cnt; *ui_block_ptr = ®ister_block; if (callback_block && callback_block->ii_cb_version >= II_CB_V1){ Ingres_trace_function = callback_block->ii_cb_trace; if(callback_block->ii_cb_version >= II_CB_V2){ usc_lo_handler = callback_block->ii_lo_handler_fcn; usc_lo_filter = callback_block->ii_filter_fcn; usc_setup_workspace = callback_block->ii_init_filter_fcn; usc_error = callback_block->ii_error_fcn; } } else {Ingres_trace_function = 0; } return(II_OK); } 例子 • 数据的存储(基表+扩展表,行内/行外) – 小数据量采用行内存储 例子 • Hilbert R-tree – 空间对象在页面的聚集度 → R-tree 索引性能 – Hilbert R-tree 使用Hilbert 填充 曲线产生线性序 – Searching – Insertion – Overflow handling – Deletion • Recovery & Concurrency –B-link locking – Hilbert R-link locking – puts and deletes: logical log – page splits: physical log 例子 • 深度优先R-tree Join – 执行索引同步连接, 加速过滤 • 执行引擎 – 支持更多的空间算子 改进? • 数据密集 – MPP下数据分布 – Oracle Spatial支持分区R-tree索引 • 计算密集 + 现代硬件 – 优化器 – 执行引擎 – 存储引擎 Vectorwise • Ingres DBMS 基于MoentDB的存储与执行引 擎 • 目标:改进 OLAP 处理能力 • 方法: – 列存储 & 压缩 – 批量执行,指令优化 Vectorwise • 共享Parser 与 Optimizer • 独立的执行引擎与Column-Store存储引擎 Vectorwise • Storage Model (DSM) – NSM vs DSM vs PAX Vectorwise • Data Processing Flow Vectorwise • Iterator-Model • 优点: – 整个查询计划在一个单独的程序中执行 – 运算符以此生成一个数据项 – 模型采用需求驱动的方式 – 生成的数据项不需要物化(!?) – 内存的开销少 – 运算符不受计划复杂性的影响 • 缺点 – 难以使用 SIMD (single instruction, multiple data) – 不适合并行 Vectorwise • Execution a=b+c; d=b*c √ a=b+c; d=a*c ? Vectorwise SELECT id, name, (age-30)*50 as bonus FROM people WHERE age > 30 /* Returns vector of oid’s satisfying comparison ** and count of entries in vector. */ int select_gt_float( oid* res, float* column, float val, int n) { for(int j=0,i=0; ival) res[j++] = i; return j; } Compiles into loop that performs many (10, 100, 1000) comparisons in parallel Vectorwise • 测试 • Intel® Core™ i5-520M Processor (3M Cache, 2.40 GHz), RAM:4G,硬盘:40G,Ubuntu 10.04 64bit, • TPCC:BenchmarkSQL工具 • TPCH:基于dbt3-1.9(数据生成) Vectorwise • TPC-C – CUST-HIST: 30000行,CUSTOMER: 30000行,DISTRICT: 10 行,ITEM: 100000行,NEW-ORDER: 9000行, WAREHOUSE: 1行,STOCK: 100000行,ORDER-LINE: 299690行,ORDER: 300000行 • TPC-H – 生成标准2G数据,8个标准测试表数据为: – PART: 400000行,SUPPLIER: 20000行,PARTSUPP: 1600000行,CUSTOMER: 300000行,ORDERS: 3000000 行,LINEITEM: 11997996行,NATION: 25行,REGION: 5 行 Vectorwise • TPCC Vectorwise • TPCH More • Kickfire( Netezza , XtremeData ) • 基于FPGA, 硬件实现执行算子 – 流水线并行 – 数据分片并行 – 独立运算符并行 – 查询间并行
还剩42页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 11 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

libingbing

贡献于2012-09-04

下载需要 11 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf