City_images表(T1表) (存储了T2的表名和T2的主键)
|
|
| IMG.City_images_Rdt | IMG.RASTERID |
|
|
| T2表名称 | 1 |
|
|
| T2表名称 | 2 |
|
|
|
|
|
|
|
| 。。。。。。。 | 。。。。。。。 |
|
|
| T2表名称 | 100 |
City_image_Rdt 表(T2表)
RASTERID |
|
|
| BLOB |
1 |
|
|
| 存储的图像数据 |
1 |
|
|
|
|
1 |
|
|
|
|
1 |
|
|
|
|
1有6000多行 |
|
|
|
|
2 |
|
|
|
|
2有6000多行 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
。。。。。。。。。 |
|
|
|
|
100 |
|
|
|
|
100有6000多行 |
|
|
|
|
问题:检索速度是个问题.
表的SQL语句:
CREATE TABLE city_images
(
image_id NUMBER,
CITY VARCHAR2(10),
IMG_NAME VARCHAR2(30) PRIMARY KEY,
RESOLUTION NUMBER(4,4),
SCALE NUMBER(4) NULL,
IMG SDO_GEORASTER,--后面有说明
OWNER VARCHAR2(30) NULL,
PRODUCT_DATA DATE NULL
)
CREATE TABLE city_images_rdt OF SDO_RASTER
(PRIMARY KEY (rasterID, pyramidLevel, bandBlockNumber,
rowBlockNumber, columnBlockNumber))tablespace tbs_bf
NOLOGGING
LOB(rasterBlock) STORE AS lobseg
(
CHUNK 8192
CACHE READS
NOLOGGING
PCTVERSION 0
STORAGE (PCTINCREASE 0)
);
--说明如下
CREATE TYPE sdo_georaster AS OBJECT (
rasterType NUMBER,
spatialExtent SDO_GEOMETRY,--检索范围
rasterDataTable VARCHAR2(32),
rasterID NUMBER,
metadata XMLType);
CREATE TYPE sdo_raster AS OBJECT (
rasterID NUMBER,
pyramidLevel NUMBER,
bandBlockNumber NUMBER,
rowBlockNumber NUMBER,
columnBlockNumber NUMBER,
blockMBR SDO_GEOMETRY,
rasterBlock BLOB);
---通过检索范围SDO_GEOMETRY,获取rasterDataTable(T2的表名)和rasterID,然后通过getRasterSubset获取到BLOB数据。
检索太慢了(按范围检索出100M,花费2左右分钟)~我已经存了20幅了。
MDSYS.SDO_GEOR.getRasterSubset()从数据库提取100多M的影像,执行到OCIStmtExecute函数时,停下来,等了好久。也就是在使用OCI函数提取大数据速度慢,OCI执行函数对于数据量大小的限制是多少?谢谢。附带提问下:做影像库,一般一个线程一次提取的数据量的大小,在用户可以忍受的时间之内(5秒以内)。其实,关键不在于语言,关键在于如何设计表并且设计读取的方式。