学习mysql4.1的空间数据库特性(2)

Chat2DB:自然语言生成 SQL 的时代来临,数据库管理更简单 提到数据库管理工具,Navicat 曾经是大家的首选,但随着人工智能技术的崛起,新的工具也开始悄然改变这一局面。Chat2DB 就是其中一个代表... 阅读详情

学习mysql4.1的空间数据库特性(2)

 PS:由于一边上班一边记录测试数据,所以可能乱糟糟的,如果有朋友看了,看见错误留个言给我,谢了。

在mysql4.1的空间数据库特性(1)里已经把几个基本的问题解决了:

如何存储空间数据。

如何读取空间数据。

需要用到哪些的mysql的空间数据特性和函数。

(要到到1 用于在各种格式间转换几何值的函数。3 描述两种几何值之间关系的函数。)

 

 

现在要处理的问题是:

问题一:原有数据如何合适地转换成新的数据格式。

问题二:空间数据比原有数据在操作方面效率到底提高多少,有无转换的必要。

解决问题时出现的其他问题:

问题三:无法在原有表基础上增加空间数据列?(跟问题一有关联)

 

06年11月3日

MySQL提供了一组在空间数据上执行各种操作的函数。根据它们所执行的操作类型,可以将这些函数分为四种主要类别:

·         1 用于在各种格式间转换几何值的函数。

·         2 用于访问几何值定性或定量属性的函数。

·         3 描述两种几何值之间关系的函数。

·         4 从已有Geometry创建新Geometry的函数

(来自mysql5.1的官方文档)

 

 

问题一

1 如何把原有的大部分数据(非空间形式数据)转换成空间数据比较恰当?

对于原有的数据,有两种方式处理:

第一种可以创建一个新表然后把有来的两列longitude,latitude合并到一列中gps_point(空间数据列)中。删除原来的两列。这样做的话势必要在公司原来的接口中改动大量的代码。

另一个种方法就是在旧表添加一列gps_point(空间数据列),然后写一个小程序,把两列的经纬度数据写入这个gps_point列。

这样的好处是增加了存储空间,但不需要在原有的接口中改动大量的代码。

相对而言:空间储存的浪费似乎不是那么重要,所以第二种方法就比较合适了。

 

简明的操作步骤:

假设这是原有的表gps_example,里面有上百万条数据。

 

现在在上面加一空间数据列(在这个过程中可能出现问题3,见下面问题3)

 

这样的话只要写个小程序把longitude,latidtude的值写到gps_point列的话,原有的接口不需改动,新的接口可以直接使用

gps_point列的空间数据特性,真是方便!(PS:我转换了一个表,大概50万条数据,用了大概6分钟,可能在转换的方法实现上面比较粗糙,应该可以再快一点)

 

现在光光把数据转移成空间数据形式的话,速度就提高了?

no~

 

查询提高的主要原因在于在空间数据列上建立了空间索引,而我们现在的gps_example表上面还没有建立空间索引,那下面就来

建个空间索引。

 

这样的话,整个表结构修改成功。就可以在新表上面测试下空间数据形式带来的性能上的提高了。

 

 

为什么要使用空间索引?

优化空间分析

19.6.1. 创建空间索引

19.6.2. 使用空间索引

可以使用索引对2个非空间数据库中的搜索操作进行优化。对于空间数据库,这同样成立。有了以前设计的大量多维索引功能的帮助,能够对空间搜索进行优化。最典型的情况如下:

·         搜索包含给定点的所有对象的Point查询。

·         搜索与给定地区交迭的所有对象的地区查询。

MySQL采用了具有2次分裂特性的R-Trees来为空间列编制索引。使用几何对象的MBR来创建空间索引。对于大多数几何对象,MBR是包围几何对象的最小矩形。对于水平或垂直linestring,MBR退化为linestring的矩形。对于点,MBR是退化为点的矩形。

此外,还能在空间列上创建正常索引。需要为除POINT列之外的空间列上的任何索引(非空间)声明前缀。

                                                         (来自mysql5.1的官方文档)

(PS:在mysql5.1的官方文档中[第19章:MySQL中的空间扩展]中有详细的说明使用和不使用空间索引进行查询的结果,有兴趣的话可以直接看下官方文档。)

 

 

如何使用空间数据确定空间物体之间的关系?

测试几何对象间空间关系的函数

这些节中所介绍的函数以2个几何对象作为输入参数,并返回它们之间的定量或定性关系。

19.5.5. 关于几何最小边界矩形(MBR)的关系

MySQL提供了一些可测试两个几何对象g1和g2最小边界矩形之间关系的函数。它们包括:

·         MBRContains(g1,g2)

返回1或0以指明g1的最小边界矩形是否包含g2的最小边界矩形。

mysql> SET @g1 = GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
mysql> SET @g2 = GeomFromText('Point(1 1)');
mysql> SELECT MBRContains(@g1,@g2), MBRContains(@g2,@g1);
----------------------+----------------------+
| MBRContains(@g1,@g2) | MBRContains(@g2,@g1) |
+----------------------+----------------------+
|                    1 |                    0 |
+----------------------+----------------------+

·         MBRDisjoint(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否不相交。

·         MBREqual(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否相同。

·         MBRIntersects(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否相交。

·         MBROverlaps(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否交迭。

·         MBRTouches(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否接触。

·         MBRWithin(g1,g2)

返回1或0以指明g1的最小边界矩形是否位于g2的最小边界矩形内。

mysql> SET @g1 = GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
mysql> SET @g2 = GeomFromText('Polygon((0 0,0 5,5 5,5 0,0 0))');
mysql> SELECT MBRWithin(@g1,@g2), MBRWithin(@g2,@g1);
+--------------------+--------------------+
| MBRWithin(@g1,@g2) | MBRWithin(@g2,@g1) |
+--------------------+--------------------+
|                  1 |                  0 |
+--------------------+--------------------+

19.5.6. 测试几何类之间空间关系的函数

OpenGIS规范定义了下述函数。目前在MySQL尚未按照规范实施它们。对于那些已实施的函数,它们返回的结果与对应的基于MBR的函数返回的相同。包括下面列出的函数,但Distance()和Related()除外。

在未来的版本中,可能会实施这些函数,为空间分析提供全部支持,而不仅仅是基于MBR的支持。

这些函数作用在2个几何值g1和g2上。

·         Contains(g1,g2)

返回1或0以指明g1是否完全包含g2。

·         Crosses(g1,g2)

如果g1在空间上与g2相交,返回1。如果g1为Polygon或MultiPolygon,返回NULL,或如果g2为Point或MultiPoint返回NULL。否则,返回0。

术语“空间上交叉”指的是2个给定几何对象之间的空间关系,它具有下述属性:

o        2个结合对象交叉。

o        其交叉结果将导致其维数小于两个给定几何对象最大维数的几何对象。

o        其交叉不等于两个几何对象中的任何1个。

·         Disjoint(g1,g2)

返回1或0以指明g1是否与g2从空间上不相交。

·         Distance(g1,g2)

以双精度数值形式返回2个几何对象中2点间的最短距离。

·         Equals(g1,g2)

返回1或0以指明g1是否从空间上等同于g2。

·         Intersects(g1,g2)

返回1或0以指明g1是否从空间上与g2相交。

·         Overlaps(g1,g2)

返回1或0以指明g1是否从空间上与g2交迭。如果2个几何对象交叉而且其交叉将导致具有相同维数但并不等同于任一几何对象的几何对象,将使用术语“空间交迭”。

·         Related(g1,g2,pattern_matrix)

返回1或0以指明由pattern_matrix指定的空间关系是否在g1和g2间存在。如果参量为NULL返回-1。模式矩形为字符串。如果实施了该函数,其规范将在此给出。

·         Touches(g1,g2)

返回1或0以指明g1是否从空间上与g2接触。如果几何对象的内部不交叉,但1个几何对象的边界与另一个的边界或内部交叉,这两个几何对象是从空间上接触的。

·         Within(g1,g2)

返回1或0以指明g1是否从空间上位于g2内。

                                                        (来自mysql5.1的官方文档)

 

(PS:虽然mysql5.1还未实现[ 测试几何类之间空间关系的函数],见上文,但是提供了[关于几何最小边界矩形(MBR)的关系],做简单的应用应该足够了,这次公司需要的功能用[关于几何最小边界矩形(MBR)的关系]这里面的方法可以实现。

 

 

 

问题二

空间数据比原有数据在操作方面效率到底提高多少?有转换的必要吗?

当500000多万条数据为查count()函数记录22886时候空间数据查询跟比空间形式查询的快了3秒。

 

当500000多万条数据count()函数求出4条记录时候空间数据查询跟非空间形式查询的差别!

PS:速度啊!体现出来了!

 

 

PS:不过后来发现上面的对抗是不公平对抗,非空间数据的表我没有给longitude,latitude建索引,

不然速度其实也差不了多少~~~~

但转换成空间数据形式

至少还有这么下面这么多函数可以用:)也

·         MBRContains(g1,g2)

返回1或0以指明g1的最小边界矩形是否包含g2的最小边界矩形。

mysql> SET @g1 = GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
mysql> SET @g2 = GeomFromText('Point(1 1)');
mysql> SELECT MBRContains(@g1,@g2), MBRContains(@g2,@g1);
----------------------+----------------------+
| MBRContains(@g1,@g2) | MBRContains(@g2,@g1) |
+----------------------+----------------------+
|                    1 |                    0 |
+----------------------+----------------------+

·         MBRDisjoint(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否不相交。

·         MBREqual(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否相同。

·         MBRIntersects(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否相交。

·         MBROverlaps(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否交迭。

·         MBRTouches(g1,g2)

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否接触。

·         MBRWithin(g1,g2)

返回1或0以指明g1的最小边界矩形是否位于g2的最小边界矩形内。

 

 

 

 

 

问题三

无法使用空间增加空间数据列?

问题如下:

解决办法:

当MySQL被用MySQL配置向导安装在Windows平台上,InnoDB存储引擎替代MyISAM存储引擎作为替代,请参阅2.3.5.1节,“介绍”。

要把一个表从一个类型转到另一个类型,可使用ALTER TABLE语句,这个语句指明新的类型:

ALTER TABLE t ENGINE = MYISAM;
ALTER TABLE t TYPE = BDB;

 

 

MYSQL-创建数据库 CREATE DATABASE (十一) MYSQL创建数据库语法 CREATE DATABASE 阅读详情

相关推荐

MYSQL-修改数据库 ALTER DATABASE (一)

MYSQL修改数据库 ALTER DATABASE

口袋里的小龙的专栏 972

5、MySQL修改数据库:ALTER DATABASE用法简介

在 MySQL 数据库中只能对数据库使用的字符集和校对规则进行修改,数据库的这些特性都储存在 db.opt 文件中。下面我们来介绍一下修改数据库的基本操作。 在 MySQL 中,可以使用 ALTER DATABASE 来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为: ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> | [ DEFAULT ] COLLATE <校对规则名>} 语法说明如下: A

you can you up up up的博客 2710

OceanBase V4.2特性解析:MySQL模式下GIS空间表达式的场景及能力解析

随着客户使用空间数据的需求日益增长,OceanBase正在快速地补齐空间数据存储和计算分析的能力,V4.2中补充了部分ob mysql特有的gis空间表达式;同时补齐了部分兼容mysql gis的空间表达式。

OceanBase分布式数据库的博客 2072

MySQL之修改数据库(ALTER DATABASE用法简介)

语法 数据库建立以后我们也是可以进行修改的,我们可以使用ALTER DATABASE或 ALTER SCHEMA 语句来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为: ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> | [ DEFAULT ] COLLATE <校对规则名>} ALTE...

qq_38523616的博客 3226

MySQL中ALTER DATABASE语句的使用

ALTER DATABASE 是一个数据库管理命令,主要用于修改或更改已存在数据库的各种属性和配置。

u011565038的博客 2833

数据仓库中Hive、Mysql、Hadoop之间的关联

1. Hive 与 HDFS 之间的联系 (1)hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。 (...

qq_32572085的博客 3097

mysql alter database_MySQL修改数据库:ALTER DATABASE用法简介

在MySQL数据库中只能对数据库使用的字符集和校对规则进行修改,数据库的这些特性都储存在 db.opt 文件中。下面我们来介绍一下修改数据库的基本操作。在 MySQL 中,可以使用ALTER DATABASE来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为:ALTER DATABASE [数据库名] {[ DEFAULT ] CHARACTER SET |[ DEFAULT ]...

weixin_35084134的博客 2393

xhs私信协议分析

之前分析过xhs的shield算法,今天再聊聊xhs的私信,文章仅供学习参考研究交流,如有侵权请联系删帖。经过抓包分析发现私信接口并不是走的http协议,而是socket协议。而要获取socket包则需要使用wireshark软件1、protobuf的包体中的序号7,多次验证后发现文字信息的需要需要固定成12、protobuf的包体中的序号12,多次验证后发现文字信息的需要需要固定成1后续有时间的话,再研究一下视频和图片格式的私信协议,这次就分析到这里吧。

佛系更新... 3485

MySQL修改数据库:ALTER DATABASE用法简介

数据库创建好后也是可以修改的,下面我们来介绍一下修改数据库的基本操作 基本语法 在 MySQL 中,可以使用 ALTER DATABASE 或 ALTER SCHEMA 语句来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为: ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> | [ D...

MYSQL安装教程 2077

MATLABGUI读取文件并将路径显示在文本框中

MATLABGUI读取文件并将路径显示在文本框中

m0_50305149的博客 2649

YOLOv8n行人检测实战:从数据集准备到模型训练

本文详细介绍了使用YOLOv8n进行行人检测的完整流程。首先阐述了YOLOv8的优势:高速推理(300+FPS)、更高精度、易用性和轻量化(仅6MB)。接着通过Docker搭建GPU训练环境,配置32GB共享内存避免数据加载问题,并安装必要的框架和OpenCV组件。数据集采用COCO2017标注格式,包含归一化坐标的YOLO标签文件。通过可视化脚本验证标注准确性后,提出多数据集融合训练策略以增强模型泛化能力。最后使用Ultralytics框架启动训练,展现了从环境搭建到模型训练的完整技术路径。该方案兼顾检测

Hi20240217的博客 1090

数据仓库和数据库的区别

本文主要介绍数据仓库和数据库的区别,首先描述下数据仓库是什么: 数据仓库的本质还是一个数据库,它将各个异构的数据源数据库的数据给统一管理起来,并且完成了质量较差的数据的剔除、格式转换,最终按照一种合理的建模方式来完成源数据组织形式的转变,以更好的支持到前端的可视化分析。 数据仓库中主要存储的是结构化的数据,但是它的来源可以是多种类型的数据来源(结构化、半结构化、非结构化),中间需要一个ETL过程。 一、用途 数据库:主要用于事务处理,即OLTP(Transaction),也就是我们常用的面向业务的增删改查操

啥也不是 2万+

因时机器人-灵巧手配置方案(Ubuntu18.04)

因时机器人-灵巧手配置方案(Ubuntu18.04)

CH_monsy的博客 3848

MySQL9.1.0 新特性

--- 以下信息转自 微信公众号“MySQL数据库联盟”MySQL 创新版9.1.0 于2024年10月15日正式发布。详细的信息请查看 https://dev.mysql.com/doc/refman/9.1/en/atomic-ddl.html审计日志将名称不以字母数字字符(如“$foo”)开头的用户视为无效用户,尽管 MySQL 服务器允许创建此类用户。当同时使用 DISTINCT 时,在某些情况下,对于相同的值,SUM() 会产生不同的结果。

bayaim的博客 2万+

Globus数据下载全攻略:从零配置到批量下载大文件(附常见问题解决)

本文详细介绍了Globus数据下载的全流程,从零配置到批量下载大文件的实用技巧,包括环境准备、高级传输策略、性能优化及常见问题解决方案。Globus作为科研数据的高效传输工具,通过并行流传输和自动校验技术,显著提升大规模数据传输的效率和可靠性。

u9v0w的博客 662

OpenClaw与大语言模型(Claude/GPT/MiniMax)的集成架构与最优配置策略

摘要 本文探讨了OpenClaw框架与大语言模型(Claude/GPT/MiniMax)的集成架构与优化策略。大语言模型具有强大的自然语言处理能力,但集成面临API成本、响应延迟、上下文管理等挑战。OpenClaw采用分层架构设计,包括用户界面层、对话管理层、提示工程层、模型适配层和API调用层,支持多模型切换、智能对话管理和成本控制。系统通过模型适配层实现不同API的统一调用,并提供缓存、监控等优化机制。该集成方案能够充分发挥大语言模型的优势,为本地AI助理提供更智能的服务。

一键难忘的博客 1693

学习mysql4.1的空间数据库特性(1)

06年10月16日需求:公司现在gis系统有大量的经纬度坐标,都是车辆行驶几个月采集过来的坐标。现在在做区域搜索功能(就是在上个月某个时间内车辆在哪里行驶)。因为现在数据库单个车辆的经纬度坐标太多,所以搜索起来非常慢(让人忍受不了的速度),随着时间的推移,可能搜索起来会越来越慢,所以公司决定考虑使用mysql的空间数据库特性。把经纬度坐标都转移到成空间数据库坐标. 公司使用mysql4

飞羽飞の猪の博客 9461

MySQL数据库操作-修改数据库 (ALTER DATABASE)

在 MySQL数据库中只能对数据库使用的字符集和校对规则进行修改,数据库的这些特性都储存在 db.opt 文件中。下面来介绍一下修改数据库的基本操作。 修改数据库 在 MySQL 中,可以使用 ALTER DATABASE 来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为: ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> |[ DEFAULT ] COLLATE <校对规则名>} 语法说明如下:

Johnny's Lab 6970

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java 读取db3 数据库_db4o(db3文件是什么数据库)

您好,db4o 几乎无法对应于现有的 Oracle、SQLServer 或 DB2!完全正确。相比之下,db4o 更适合于 MySQL 或 HSQL,这使其对于大量项目来说已经足够。更为重要的.一、Access 数据类型有些另类,而且密码太容易被攻破,性能不高,只能用在. 八、DB4O 面向对象的数据库,使用DB4O无需ORM工具就可以直接进行对象存储。支持.以下是代码片段:Book book =...

weixin_33393017的博客 1367

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Chat2DB插件开发指南:扩展数据库支持

Chat2DB插件开发指南:扩展数据库支持 【免费下载链接】Chat2DB chat2db/Chat2DB: 这是一个用于将聊天消息存储到数据库的API。适合用于需要将聊天消息存储到数据库的场景。特点:易于使用,支持多种数据库,提供RESTful API。 ...

gitblog_01154的博客 1193

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: two articles about MySQL - LEFT JOIN and RIGHT JOIN, INNER JOIN and OUTER JOIN
下一篇: 面向对象设计的11原则--你称得上OO专家么?
飞羽飞之猪
博客等级 码龄21年 127粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值