ArcSDE在没有源码的情况下支持国产数据库的可能性分析

1 ArcSDE与数据库结合的技术本质与原理

ArcSDE是ESRI公司的空间数据库引擎,现在工支持5中数据库,分别是Oracle,SQLServer,DB2,Informix,PostgreSQL,ArcSDE在技术层次上一共包括两部分的内容,分别是:

1.1 ArcSDE Program

这部分的内容在操作系统上表现出来就是ArcSDE的动态库,ArcSDE每个版本的针对不同的操作系统动态库的数量都是不相同的,在windows操作系统上每个版本的数量都在25个左右,在linux操作系统上大约有10个左右。下图分别是在windows上ArcSDE10 for Oracle10G和linux上的ArcSDE9for Oracle10G的动态库。

Windows:

 

image

 

Linux:

 

-rwxr-xr-x 1 sde oinstall 391103 2009-02-27 libedgemt.so

-rwxr-xr-x 1 sde oinstall 1123698 11-02 07:37 libgsrvrora10g93.so

lrwxrwxrwx 1 sde oinstall 18 10-13 16:58 libicudata.so -> libicudata.so.22.0

lrwxrwxrwx 1 sde oinstall 18 10-13 16:58 libicui18n.so -> libicui18n.so.22.0

lrwxrwxrwx 1 sde oinstall 16 10-13 16:58 libicuuc.so -> libicuuc.so.22.0

-rwxr-xr-x 1 sde oinstall 230908 2009-02-27 libloceng.so

-rwxr-xr-x 1 sde oinstall 110230 2008-12-19 liblocssa.so

-rwxr-xr-x 1 sde oinstall 723578 2009-02-27 libmtchloc.so

-rwxr-xr-x 1 sde oinstall 335447 2009-02-27 libmtchmt.so

-rwxr-xr-x 1 sde oinstall 2254988 2010-05-11 libpe.so

-rwxr-xr-x 1 sde oinstall 17655840 11-02 07:37 libsdeora10gsrvr93.so

-rwxr-xr-x 1 sde oinstall 300307 2009-02-27 libsdesetup.so

-rwxr-xr-x 1 sde oinstall 4529552 11-02 07:34 libsde.so

-rwxr-xr-x 1 sde oinstall 389909 2010-05-11 libsg.so

-rwxr-xr-x 1 sde oinstall 135913 11-02 07:38 libst_shapelib.so

-rwxr-xr-x 1 sde oinstall 330238 2008-12-19 libtiff.so

lrwxrwxrwx 1 sde oinstall 17 10-13 16:58 libxerces-c.so -> libxerces-c.so.27

 

以上的动态库在安装完ArcSDE的程序部分和ArcGIS client后就存在了,另外最重要的是这些ArcSDE的动态库调用了数据库的动态库,如在linux操作系统下

192.168.100.228 [sde lib]$ ldd libgsrvrora10g93.so

libclntsh.so.10.1 => /opt/oracle/lib/libclntsh.so.10.1 (0x00002b5f944bc000)

libsdeora10gsrvr93.so (0x00002b5f959ab000)

libsde.so (0x00002b5f96b4b000)

libsg.so (0x00002b5f97025000)

libpe.so (0x00002b5f9717b000)

libicuuc.so.22 (0x00002b5f97488000)

libxerces-c.so.27 (0x00002b5f97643000)

libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002b5f97b68000)

libm.so.6 => /lib64/libm.so.6 (0x00002b5f97e68000)

libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b5f980ec000)

libc.so.6 => /lib64/libc.so.6 (0x00002b5f982fa000)

libnnz10.so => /opt/oracle/lib/libnnz10.so (0x00002b5f98651000)

libdl.so.2 => /lib64/libdl.so.2 (0x00002b5f98af2000)

libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b5f98cf6000)

libnsl.so.1 => /lib64/libnsl.so.1 (0x00002b5f98f11000)

libicudata.so.22 (0x00002b5f9912a000)

/lib64/ld-linux-x86-64.so.2 (0x00000035b1000000)

ArcSDE for Oracle的动态库libgsrvrora10g93.so调用了Oracle的libclntsh.so.10.1和处理xml的ORAXML10的动态库,在windows下:

 

image

 

1.2 动态库的存在位置和作用
1.2.1 位置

一共有两个地方包含这些动态库:

1. $SDEHOME/lib(安装SDE程序部分后)

2.%ArcGIS/%ArcGISClient%/bin中(其中%ArcGISClient%为ArcGIS的前端访问软件)。

如:安装Desktop和ArcGIS Server后,分别在Desktop的bin目录中和Server的目录中存在这些动态库。

 

1.2.2作用

供客户端软件或者ArcSDE的服务进程调用使用。

1.2.2.1 应用服务连接

image

在这种模式下,一共包括两层网络通讯协议,第一层是ArcGIS Client与ArcSDE的服务进行进行通讯,使用的通讯协议是ESRI自己定义的应用程序协议,第二层是ArcSDE的服务进程与数据库通讯,这个通讯协议是使用数据库所公开的协议。ArcSDE的动态库是被ArcSDE的服务进程加载使用的,加载的动态库是1.2.1节的第一部分。

1.2.2.1 直连

ArcGIS Client直接和数据库进行连接,只存在一层网络结构,使用的网络协议是数据库所公开的协议。其结构图如下:

 

image

 

此时ArcSDE的动态库是由客户端软件所加载的。

1.3ArcSDE在数据库的Schema

这部分的内容表现在数据库层次上就是数据库中对象,主要的对象包括:

主要用来存储数据。

存储过程

用来操作数据的程序。

序列对象

用来维护OBJECTID对象。

这部分的内容是在SDE的post过程创建的。

 

1.4两者之间的关系

ArcSDE的程序和数据库中的Schema是紧密的结合在一起的,结合的流程主要分为以下两个部分。

1. 程序部分直接提交SQL语句来操作数据

2. 程序部分调用数据库的存储过程来操作数据。

下图为他们之间的关系:

image

 

如果需要实现ArcSDE支持其它数据库的主要难点

 

现在的难点主要在ArcSDE的程序部分,ArcSDE数据库部分都有源码,可以看到。

1. 无法实现应用服务连接方式,只可能实现直连方式。因为应用程序连接的第一层网络通讯协议是ESRI自己定义的,属于核心技术,没有公开,只有在有源码的情况下才能解决。

实现直连方式的难点包括以下两点。

1. ArcSDE的动态库无法加载其他数据库的动态库。

2.ArcSDE的程序在直接操作数据的时候会用到数据库特有的存储过程,现在数据库厂商还都没有实现这些存储过程。

要让ArcSDE支持其他数据库厂商必须解决以上两个问题,

解决方法:

1. 数据库厂商必须让ArcSDE的动态库能够加载它们的动态库。

如:

达梦的数据库结构比较接近于Oracle,由于ArcSDE的动态库调用的是Oracle的OCI的动态库,达梦的动态库必须实现Oracle的几乎所有的OCI接口,OCI的接口大约有700多个函数,这个工作量是非常巨大的。

人大金仓的数据库是基于PostGreSQL做的,因此人大金仓必须实现ArcSDE所调用的PostGreSQL的动态库。

这部分的工作量视数据库与现有ArcSDE所支持的数据库的相似程度而定,如果数据库本身是厂商自己构架的,没有参考任何开源数据库的源码,那工作量是巨大的,如果数据库本身是厂商在开源数据库源码的基础上修改的,如参考PostGreSQL实现的,可能容易一些。

2. 对于数据库自己的存储过程,数据库厂商也必须实现,但是这部分的内容通过努力是可实现的。

 

3. 俺的最终结论

在没有源码的情况下,让ArcSDE来支持其它的数据库可能性并不大。所以想让ArcSDE支持其它的数据库,最好有美国ESRI在ArcSDE源码的基础上进行支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值