数据库中的坐标数据存储实践(数据库表存放大量坐标)

随着信息技术的快速发展,各行各业都需要使用大量的坐标数据。这些数据包括位置、经纬度、高程等坐标信息。这些数据需要被存储在数据库中,以便于查询、分析和可视化展示。本文将介绍常用的坐标数据存储方法以及在实践中的一些技巧和注意事项。

在雨山等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、成都做网站 网站设计制作按需制作,公司网站建设,企业网站建设,品牌网站制作,成都全网营销推广,外贸营销网站建设,雨山网站建设费用合理。

常用的坐标数据存储格式

在数据库中存储坐标数据时,最常见的格式是经纬度和高程。其中,经度和纬度用十进制度表示,高程用米或英尺表示。以下介绍几种常用的坐标数据存储格式。

1. WKT格式

WKT(Well Known Text)是一种通用的坐标数据存储格式,它能够表示点、线、面等各种空间对象。例如,一个点的WKT表示为:“POINT (经度 纬度)” 。在MySQL中,Point类型可以存储一个点的经纬度信息。

2. GeoON格式

GeoON是一种轻量级的ON格式,是用于存储地理数据的一种格式。与WKT格式类似,它也可以表示点、线、面等各种空间对象。在MySQL中,可以使用ON类型存储GeoON数据。

3. WKB格式

WKB(Well Known Binary)是一种二进制格式,能够更快地进行数据传输和存储。与WKT格式类似,它也能够表示点、线、面等各种空间对象。在MySQL中,可以使用Geometry类型存储WKB数据。

在选择存储格式时,需要根据具体的业务需求和数据库平台的支持情况进行选择。

坐标数据的索引

在数据库中,索引是一种用于快速查找数据的结构。为了提高查询效率,必须对坐标数据进行索引。以下介绍三种常用的坐标数据索引。

1. B-树索引

B-树索引是一种多路搜索树结构,它能够快速地查找指定值。在MySQL中,Point类型会被自动转换成B-树索引。

2. R 树索引

R 树索引是一种空间索引结构,能够快速地查找空间数据。在MySQL中,GIS类型支持R树索引。

3. 四叉树索引

四叉树索引是一种基于二维平面划分的索引结构,在空间数据查询和分析中使用较多。在MySQL中,可以通过自定义存储引擎实现四叉树索引。

在选择索引方式时,需要结合实际的业务需求和数据库平台的支持情况进行选择。

坐标数据存储的注意事项

在实践中,有一些需要注意的事项,可以提高坐标数据存储的效率和准确性。

1. 坐标数据缺失值的处理

在实际业务中,坐标数据可能存在缺失值,这时需要对缺失值进行处理。常见的处理方法包括使用默认值、使用平均值填充等。

2. 数据精度问题

在存储坐标数据时,需要特别注意数据精度的问题。如果数据精度不足,则可能导致查询结果不准确。

3. 数据范围问题

在存储坐标数据时,需要确定数据的范围和空间关系。对于不同的空间关系,需要采用不同的存储方式和索引方式。

4. 数据导入和导出问题

在实际业务中,坐标数据可能需要进行导入和导出。在导入和导出时,需要注意文件格式、数据范围、数据精度等问题,以免数据丢失或出现错误。

坐标数据是各行各业中非常重要的数据类型。在数据库中存储坐标数据,需要注意数据存储格式、索引方式、缺失值处理、数据精度问题、数据范围问题、数据导入和导出问题等问题。只有综合考虑这些问题,才能够高效地管理坐标数据,并为实际业务带来实际的价值。

相关问题拓展阅读:

  • 数据库设计过程中,对于大批量的数据如何进行数据库优化?
  • 矿产资源储量数据库管理系统的坐标怎么填上去啊,每次他都提示说“数据最末行必须以”*“字段开头

数据库设计过程中,对于大批量的数据如何进行数据库优化?

实例讲解MYSQL数据库的查询优化技术

作者:佚名 文章来源:未知 点击数:更新时间:

数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、等部门最为重要的计算机应用之一。从大多数系统的应用实例来看,查如世桥询操作在各种数据库操作中所占据的比重更大,而查询操作所基于的SELECT语句在SQL语句中又是代价更大的语句。举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见查询优化技术的重要性。

笔者在应用项目的实施中发现,许多程序员在利用一些前端数据库开发工具(如PowerBuilder、Delphi等)开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重。因此,如何设计高效合理的查询语句就显得非常重要。本文以应用实例为基础,结合数据库理论,介绍查询优化技术在现实系统中的运用。

分析问题

许多程序员认为查询优化是DBMS(数据库管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的。一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的,查询规划是经过优化处理之后所产生的语句。DBMS处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径的优化之后,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。在实际的数据库产品(如Oracle、Sybase等)的高版本中都是采用基于代价的优化方法,这种优化能根据从系统字典表所得到的信息来估计不同的查询规划的代价,然后选择一个较优的规划。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。系统所做查询优化我们暂不讨论,下面重点说明改善用户查询计划的解决方案。

解决问题

下面以关系数据库系统Informix为例,介绍改善用户查询计划的方法。

1.合理使用索引

索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM更先提出的ISAM索引结构。索引的使用要恰到好处,其使用原则如下:

●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。

●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。

●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。

●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。

●使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以渣猛试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量数据后,删除返拆并重建索引可以提高查询速度。

2.避免或简化排序

应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素:

●索引中不包括一个或几个待排序的列;

●group by或order by子句中列的次序与索引的次序不一样;

●排序的列来自不同的表。

为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。

3.消除对大型表行数据的顺序存取

在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。

还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。下面的查询将强迫对orders表执行顺序操作:

SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008

虽然在customer_num和order_num上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的,所以应该改为如下语句:

SELECT * FROM orders WHERE customer_num=104 AND order_num>1001

UNION

SELECT * FROM orders WHERE order_num=1008

这样就能利用索引路径处理查询。

4.避免相关子查询

一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。

5.避免困难的正规表达式

MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”

即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT * FROM customer WHERE zipcode >“98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。

另外,还要避免非开始的子串。例如语句:SELECT * FROM customer WHERE zipcode>“80”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。

6.使用临时表加速查询

把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。例如:

SELECT cust.name,rcvbles.balance,……other columns

FROM cust,rcvbles

WHERE cust.customer_id = rcvlbes.customer_id

AND rcvblls.balance>0

AND cust.postcode>“98000”

ORDER BY cust.name

如果这个查询要被执行多次而不止一次,可以把所有未付款的客户找出来放在一个临时文件中,并按客户的名字进行排序:

SELECT cust.name,rcvbles.balance,……other columns

FROM cust,rcvbles

WHERE cust.customer_id = rcvlbes.customer_id

AND rcvblls.balance>0

ORDER BY cust.name

INTO TEMP cust_with_balance

然后以下面的方式在临时表中查询:

SELECT * FROM cust_with_balance

WHERE postcode>“98000”

临时表中的行要比主表中的行少,而且物理顺序就是所要求的顺序,减少了磁盘I/O,所以查询工作量可以得到大幅减少。

注意:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。

7.用排序来取代非顺序存取

非顺序磁盘存取是最慢的操作,表现在磁盘存取臂的来回移动。SQL语句隐藏了这一情况,使得我们在写应用程序时很容易写出要求存取大量非顺序页的查询。

有些时候,用数据库的排序能力来替代非顺序的存取能改进查询。

实例分析

下面我们举一个制造公司的例子来说明如何进行查询优化。制造公司数据库中包括3个表,模式如下所示:

1.part表

零件号     零件描述其他列

(part_num) (part_desc)      (other column)

102,032   Seageat 30G disk     ……

500,049   Novel 10M network card  ……

……

2.vendor表

厂商号      厂商名      其他列

(vendor _num) (vendor_name) (other column)

910,Seageat Corp   ……

523,IBM Corp     ……

……

3.parven表

零件号     厂商号     零件数量

(part_num) (vendor_num) (part_amount)

102,,,450,000

234,,,000,000

……

下面的查询将在这些表上定期运行,并产生关于所有零件数量的报表:

SELECT part_desc,vendor_name,part_amount

FROM part,vendor,parven

WHERE part.part_num=parven.part_num

AND parven.vendor_num = vendor.vendor_num

ORDER BY part.part_num

如果不建立索引,上述查询代码的开销将十分巨大。为此,我们在零件号和厂商号上建立索引。索引的建立避免了在嵌套中反复扫描。关于表与索引的统计信息如下:

表     行尺寸   行数量     每页行数量   数据页数量

(table) (row size) (Row count) (Rows/Pages) (Data Pages)

part,  400

Vendor,   40

Parven,   50

索引     键尺寸   每页键数量   页面数量

(Indexes) (Key Size) (Keys/Page)   (Leaf Pages)

part

Vendor

Parven

看起来是个相对简单的3表连接,但是其查询开销是很大的。通过查看系统表可以看到,在part_num上和vendor_num上有簇索引,因此索引是按照物理顺序存放的。parven表没有特定的存放次序。这些表的大小说明从缓冲页中非顺序存取的成功率很小。此语句的优化查询规划是:首先从part中顺序读取400页,然后再对parven表非顺序存取1万次,每次2页(一个索引页、一个数据页),总计2万个磁盘页,最后对vendor表非顺序存取1.5万次,合3万个磁盘页。可以看出在这个索引好的连接上花费的磁盘存取为5.04万次。

实际上,我们可以通过使用临时表分3个步骤来提高查询效率:

1.从parven表中按vendor_num的次序读数据:

SELECT part_num,vendor_num,price

FROM parven

ORDER BY vendor_num

INTO temp pv_by_vn

这个语句顺序读parven(50页),写一个临时表(50页),并排序。假定排序的开销为200页,总共是300页。

2.把临时表和vendor表连接,把结果输出到一个临时表,并按part_num排序:

SELECT pv_by_vn,* vendor.vendor_num

FROM pv_by_vn,vendor

WHERE pv_by_vn.vendor_num=vendor.vendor_num

ORDER BY pv_by_vn.part_num

INTO TMP pvvn_by_pn

DROP TABLE pv_by_vn

这个查询读取pv_by_vn(50页),它通过索引存取vendor表1.5万次,但由于按vendor_num次序排列,实际上只是通过索引顺序地读vendor表(40+2=42页),输出的表每页约95行,共160页。写并存取这些页引发5*160=800次的读写,索引共读写892页。

3.把输出和part连接得到最后的结果:

SELECT pvvn_by_pn.*,part.part_desc

FROM pvvn_by_pn,part

WHERE pvvn_by_pn.part_num=part.part_num

DROP TABLE pvvn_by_pn

这样,查询顺序地读pvvn_by_pn(160页),通过索引读part表1.5万次,由于建有索引,所以实际上进行1772次磁盘读写,优化比例为30∶1。笔者在Informix Dynamic

Sever上做同样的实验,发现在时间耗费上的优化比例为5∶1(如果增加数据量,比例可能会更大)。

小结

矿产资源储量数据库管理系统的坐标怎么填上去啊,每次他都提示说“数据最末行必须以”*“字段开头

我所知道的”*”字键在矿产资源数据库管理中是指高程,要填入标高。

6.1 坐标数据填写基本规则

1.使用相同的坐标体系

在登记书中可以使用经纬度坐标,或直角坐标(6°带)、直角坐标(3°带)。

2.坐标数据格式

经纬度坐标输入格式:XXX.XXXX 和XX.XXXX;

例如:118.3424 和34.2624 分别表示经度为118°34′24″,纬度34°26′24″。

直角坐标(6°或3°带)输入格式:XXXXXXX.XX 和YYYYYYYY.YY;

其中:X 坐标7 位;Y 坐标8 位(Y 坐标前2 位为带号);

6.2 坐标数据输入规则

1.指定坐标类型

在开始输入坐标之前,首先确认输入坐标的类型。坐标为经纬度坐标时,在“□

经纬度坐标”框内打√;否则为空;

2.坐标结束行

当一个多边形区域输入完成后,须输入一个结束行。结束行的第1 列输入星号(*),

以后的列依次输入该区域的起始标高、终止标高、区域标识、面积标识。

3.多组坐标的输入规则

系做余统允许输入多个多边形坐标。当输入多个多边形坐标数据时,各组数据之间使

用“坐标结束行”进行分隔。

4.逐行输入原则

按行输入坐标。

6.3 坐标编辑操作

光标点击某单元格进入输入编辑状态,由用户键入相应数据。系统支持以下编辑操作:

回车(Enter)键:确认当前输入,并跳转到下一单元格,等待输入。

Esc 键:放弃单元格所输入的数据。

选定行:光标在之一列(序号列)指定位置为起始位置,并按住鼠标左键,拖动光标

到之一列指定位置为终止位置。

Ctrl_Y、Del:删除行操作。删除当前选定行的所有数据。有如下限定:编辑状态不能执行删除操作;当前选定行包含待输入行(最后一行)时不能执行删除操作。

Ctrl_N:插入行操作。在光标所在行前插入一空行。有如下限定:编辑状态不能执行插入操作;当前行是待输入行(最后一行)伏察时不能执行插入操作;不能选定多行进行插入操作。

Ctrl_A:追加行操作。光标停在待输入行(最后一行)之一列的位置,等待用户输入。

块操作:对窗口记录进行整块的拷贝和粘贴。该功能可方便的对相同字段的重复内容进行复制输入或从剪切板中直接读入指定格式的数据。

块定义:区域块定义–用鼠标键拖动或用Shif 键+方向键在编辑窗口中定义一个块。所选的单元格背景变为兰色。整行块定义–光标在之一列(序号列)指定位置为起始位置,并按住鼠标左键,拖动光标到之一列指定位置为终止位置。

矿产资源储量登记数据管理系统

26块拷贝:按功能键Ctrl_Ins 或Ctrl_C 完成将选定块拷贝到剪切板中。也可使用鼠标右键,弹出编辑框,进行拷贝、粘贴操作。(见有缺胡茄关Windows 的基本操作)块粘贴:移动光标到欲粘贴区域的左上角,按功能键Shift_Ins 或Ctrl_V 完成对选定块的粘贴。当拷贝块为区域块时,光标必须位于相同起始列;当拷贝块为整行块时光标可位于任意位置。当执行整行块粘贴操作时,如果当前窗口有定义块,将执行替换操作(先删除定义块,再将剪切板中数据粘贴到光标所在位置之后)。

数据库表存放大量坐标的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于数据库表存放大量坐标,数据库中的坐标数据存储实践,数据库设计过程中,对于大批量的数据如何进行数据库优化?,矿产资源储量数据库管理系统的坐标怎么填上去啊,每次他都提示说“数据最末行必须以”*“字段开头的信息别忘了在本站进行查找喔。

创新互联服务器托管拥有成都T3+级标准机房资源,具备完善的安防设施、三线及BGP网络接入带宽达10T,机柜接入千兆交换机,能够有效保证服务器托管业务安全、可靠、稳定、高效运行;创新互联专注于成都服务器托管租用十余年,得到成都等地区行业客户的一致认可。

当前题目:数据库中的坐标数据存储实践(数据库表存放大量坐标)
网页路径:http://www.shufengxianlan.com/qtweb/news24/48124.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联