当前位置:文档之家› Sybase_Top_10_Features_In_SQL_Anywhere_12-cn_new

Sybase_Top_10_Features_In_SQL_Anywhere_12-cn_new

白皮书

SQL Anywhere12的10大炫酷新特性https://www.doczj.com/doc/5f17239491.html,

目录

目录 (1)

特性一:每个应用程序都获得了地图的支持 (2)

别,咱们这样 (2)

空间例程步骤一:安装空间支持 (2)

空间例程步骤二:获取一个Shapefile (3)

空间例程步骤三:描述SRID (3)

空间例程步骤四:创建Shapefile表 (5)

空间例程步骤五:加载Shapefile表 (6)

空间例程步骤七:创建SVG文件 (8)

空间例程步骤八:加载更多Shapefile (9)

空间例程步骤九:在ISQL中合并并显示Shapefile表 (10)

空间例程步骤10:在Firefox中通过Web Service展现 (12)

特性2:查询隔离 (14)

查询步骤1:创建根数据库 (14)

查询隔离步骤2:创建拷贝 (15)

查询隔离步骤3:启动拷贝 (16)

查询隔离步骤4:更新根数据库 (17)

查询隔离步骤5:查询拷贝 (18)

特性3:SELECT FROM INSERT UPDATE (20)

特性4:不在需要考虑-GN (23)

特性5:通过GMAIL发送电子邮件 (25)

特性6:代理表速度变快了! (28)

特性7:改进对DAFFYSQL语法的支持 (29)

特性8:用DEFAULT进行声明 (31)

特性9:主机名和端口不再只是摆设 (32)

特性10:更高的吞吐量 (33)

总结 (37)

关于作者 (38)

2

空间例程步骤二:获取一个Shapefile

什么是Shapefile?当你真正开始去开发空间应用程序时,你了解的shapefile将比你想象中的更多,

但是对于此刻来说,让我们就说它是一张地图。你可以创建一个,也可以从网上弄一个…看看怎么样

更方便。

对于本例程来说,我们随便从https://www.doczj.com/doc/5f17239491.html,的页面上选择了florida.shapefiles.zip文件,网址如下:https://www.doczj.com/doc/5f17239491.html,/north_america/united_states/florida

以下内容摘录自readme:

This archive includes5filesets that contain data in ESRI shapefile format.

ESRI shapefile is a digital vector storage format for storing geometric location and associated

attribute information.

*.shp-shape format;the feature geometry itself

*.shx-shape index format;a positional index of the feature geometry to allow seeking forwards

and backwards quickly

*.dbf-attribute format;columnar attributes for each shape,in dBase III format

See https://www.doczj.com/doc/5f17239491.html,/wiki/Shapefile for more information about ESRI shapefiles.

在readme中并未提及,但是在每个文件集中都包括了的*.prj文件用于鉴别所使用的空间地理的种

类。

Readme中提到了5个文件集,本例程中使用了其中的三个:“coastline”文件包含了佛罗里达海

岸,以及奥克契比湖和一些河流;“highway”文件包含了关于道路和街道的信息;“poi”文件包含

了一些“有兴趣的点(point of interest)”的位置。以下是完整的列表:

florida_coastline.dbf

florida_coastline.prj

florida_coastline.shp

florida_coastline.shx

florida_highway.dbf

florida_highway.prj

florida_highway.shp

florida_highway.shx

florida_poi.dbf

florida_poi.prj

florida_poi.shp

florida_poi.shx

空间例程步骤三:描述SRID

“描述SRID”意思就是“从数以千计的空间参照系统(Spatial Reference System)中决定哪一个将被用来

处理shapefile”…所以,你也许已经猜到了,SRID的意思就是空间参照描述符(Spatial Reference

SQL Anywhere12的10大炫酷新特性

3

4

参照系统的不一致可能造成的后果

管他呢,我们又不是要在这里建大桥,我们只是做一个例程而已,继续吧。

空间例程步骤四:创建Shapefile表

在我们能将shapefile中的数据加载至SQL Anywhere之前,我们需要创建一张表,而在创建表之前,

我们需要了解shapefile中的数据是什么样的。

内置的sa_describe_shapefile过程将告诉我们答案:它从.shp和.dbf文件中读取信息并创建一个结果

集,其中包含了.shp文件中每列的名字和数据类型。

可以调用sa_describe_shapefile()来查看数据的情况,然后编写CREATE TABLE代码,或可使用图2当

中的代码来让SQL Anywhere为你生成全部的CREATE TABLE语句并存储到文件中。

图2:为shapefile表生成CREATE语句

1UNLOAD

2SELECT STRING(

3‘CREATE TABLE Florida_Coastline(\x0d\x0a’,

4LIST(STRING(

5‘“’,

https://www.doczj.com/doc/5f17239491.html,,

7‘”‘,

8describe.domain_name_with_size,

9‘,\x0d\x0a’),

10‘’ORDER BY describe.column_number),

SQL Anywhere12的10大炫酷新特性

5

6

7149row(s)affected

Execution time:7.547seconds

空间例程步骤六:在ISQL中显示Shapefile表

现在奇迹发生了:在ISQL工具–空间查看器对话框中运行一个简单的查询

SELECT geometry

FROM Florida_Coastline;

将会看到如图5所显示的Florida海岸线。

图5:空间查看器中的Florida Coastline

SQL Anywhere12的10大炫酷新特性

7

8

在HTTP的语境中,SVG文件的“Content-Type”是“image/svg+xml”,Firefox之类的浏览器就将直

接展现SVG文件;如图8。

文件

图8:Firefox中的Florida Coastline SVG

空间例程步骤八:加载更多Shapefile

当从多个源中混合并匹配数据时,空间数据变得真正有趣。图9展示了如何将佛罗里达高速公路和兴

趣点的数据加载至各自的表中。

图9:加载Highway和POI表

CREATE TABLE Florida_Highway(

“record_number”int,

“geometry”ST_Geometry(SRID=4326),

SQL Anywhere12的10大炫酷新特性

9

10

图10:通过UNION来合并Shapefile表

SELECT geometry FROM Florida_Coastline

UNION ALL

SELECT geometry FROM Florida_Highway WHERE TYPE=‘motorway’

UNION ALL

SELECT geometry FROM Florida_POI WHERE CATEGORY=‘Health care’;

图10中的UNION运算是完全针对性能而进行优化的:三个结果集都非常大,且都不相同,所以最好

要取消由DISTINCT(缺省值)带来的排序和去重处理。

图10回答了“在佛罗里达州所有的医疗保健机构都在高速公路的哪儿?”的问题。小黑点展现了感

兴趣的医疗保健点的位置,线则展现了高速公路和海岸线。

空间查看器支持滚动和缩放。图11就是通过放大而显示的75号州际公路(也被称为“鳄鱼胡同”)东

西部,,对于刚才问题的答案就是“你不可能在那段路上找到医疗保健机构。”

图11:空间查看器中合并的shapefile

SQL Anywhere12的10大炫酷新特性

11

12

SQL Anywhere 12的10大炫酷新特性13

图12中的第1至第3行定义了一个web service ,它将响应浏览器请求并调用存储过程p()来返回一个响应。特殊的服务名“root ”代表了缺省的“无需名字”的设定;例如,无需再url 中指定服务的名称,只需键入http://localhost 。“RAW ”类型代表任意类型;它由存储过程来完成构建响应的所有操作,SQL Anywhere 并不进行任何的格式化。

第8行的调用指定了HTTP Content-Type 。

第10行开始的SELECT 执行RAW web service 需要所调用的存储过程完成的任务:它返回一个单一的行(由一个单独的LONG VARCHAR 列组成)结果集。

第14行至23行的SELECT 语句与先前在图10中展示的SELECT 语句执行了相同的查询,在此将代码编写为派生表,以便能通过外部SELECT 进行后续处理。

第10行至13行的REPLACE 调用执行了两个功能。首先,它调用了首次在图6中出现的聚合函数ST_Geometry::ST_AsSVGAggr 。然后,它在XML 文字结果中进行了一次字符串替换,扩大了医疗保健的点的尺寸,并将颜色变为红色。这样一来,输出的结果就显示的更加美观。好吧,这是勉强拼凑出来的。好吧,它也工作了。在本例程中,此刻它确实有效果了。

图13显示了启动带有HTTP 服务器的SQL Anywhere 数据库,后面跟着在浏览器中使用的url 。图13:启动并连接至SQL Anywhere HTTP 服务器

%SQLANY12%\bin32\dbeng12.exe”-xs http(port=80)ddd12.db

http://localhost

图14展示了Firefox 中的结果:更大的医疗保健点,显著的红色显示。

图14:在Firefox 中展示合并了的shapefile

14

18

19“%SQLANY12%\bin32\https://www.doczj.com/doc/5f17239491.html,”^

20-c“SERVER=root_server;DBN=root;UID=dba;PWD=sql”

图15中的第一行和第二行在C:\data文件夹下创建了一个新的SQL Anywhere数据库。

第4行至第7行的dbping命令满足了特殊的需求,即在该数据库被启动为只读横向扩展主数据库之

前,事务日志必须存在。SERVER和DBF选项,与-d选项一道,强制dbping启动该数据库以便能被

ping通…启动一个数据库会有需要创建其事务日志的负面影响。

第9行至第17行将数据库启动为主数据库。便利的dbspawn工具能在服务器启动后让控制权回到批

处理文件中,而不需要等待服务器停止。

第12行指定了该服务器会使用的一个服务器名称,第16行隐式指定数据库名为“root”。小贴士:

在配置根数据库和拷贝数据库时,不要试图去指定不同的数据库名字,这将有可能会引起错误消息。

在本例中,root和所有的拷贝数据库将运行在同一台计算机上,所以将使用不同的端口。本代码中的

第15行将50000端口作为主数据库的端口。

第17行的-xp选项告诉SQL Anywhere正在使用只读横向扩展,这正是为何在启动服务器之前就一定

需要事务日志存在的原因。

第19行和第20行开启了本例中后续使用的四个ISQL会话中的第一个;本会话直接通过

“root_server”名称连接至可更新的主数据库。

查询隔离步骤2:创建拷贝

图16展示了如何定义用以实现只读横向扩展的SQL Anywhere的“镜像服务器”对象,如何设置“MIRROR OPTION”值然后使用BACKUP语句来闯将主数据库的物理拷贝。

图16:创建根数据库的只读拷贝

1CREATE MIRROR SERVER“primary_server”

2AS PRIMARY

3connection_string=‘SERVER=primary_server;HOST=localhost:50000’;

4

5CREATE MIRROR SERVER“root_server”

6AS PARTNER

7connection_string=‘SERVER=root_server;HOST=localhost:50000’;

8

9SET MIRROR OPTION auto_add_server=‘root_server’;

10SET MIRROR OPTION child_creation=‘automatic’;

11SET MIRROR OPTION authentication_string=‘abc’;

12SET MIRROR OPTION auto_add_fan_out=‘10’;

13

SQL Anywhere12的10大炫酷新特性

15

16

19-xp on

20

21“%SQLANY12%\bin32\dbspawn.exe”^

22-f^

23“%SQLANY12%\bin32\dbsrv12.exe”^

24-n copy3_server^

25-o c:\data\copy3\copy3_console_log.txt^

26-su sql^

27-x TCPIP(port=50003)^

28c:\data\copy3\root.db^

29-xp on

图17中的三个dbspawn-dbsrv12命令和图15中的启动主服务器的命令完全相同,除了以下的部分:?不同的服务器名字:copy1_server、copy2_server、copy3_server

?不同的端口:50001、50002、50003

?不同的子目录:c:\data\copy1、c:\data\copy2、c:\data\copy3

这些不同对于启动备份服务器的过程是重要的,但是他们不需要进行连接。事实上,在图17中显示

的这些不同的名字和值在别的地方均不会出现。真是神奇呀。

查询隔离步骤4:更新根数据库

图18显示了在三个拷贝都被创建并启动了之后对根数据库进行改变。

图18:更新根数据库

1CREATE TABLE Hello(MessageText VARCHAR(100));

2INSERT Hello VALUES(‘Hello,world!’);

3COMMIT;

4

5SELECT MessageText,

6DB_PROPERTY(‘File’)

7FROM Hello;

第1行到第3行将一行新数据插入了一张新的表中,SELECT将显示该行所处的数据库的物理文件的

位置。

因为在本例中所有的数据库都位于相同的电脑中,所以由DB_PROPERTY(‘File’)返回的值将能回答

“我正在查看哪个数据库?”的问题。

SQL Anywhere12的10大炫酷新特性

17

18

相关主题
文本预览
相关文档 最新文档