海量影像数据集入库策略.docx
《海量影像数据集入库策略.docx》由会员分享,可在线阅读,更多相关《海量影像数据集入库策略.docx(16页珍藏版)》请在冰豆网上搜索。
海量影像数据集入库策略
海量影像数据入库策略(oracle为例)
栅格数据量越来越大,尤其是影像数据量激增。
虽然随着影像数据量的激增,不建议影像数据本身存储到空间数据库(ArcSDE)中,但仍有用户为了解决多用户并发、数据安全性、便于备份与恢复等问题,要将海量的影像或栅格数据存储到空间数据库中。
那么,如何更快、更高效的把海量的影像数据入到空间数据库中呢?
需要考虑哪些因素?
提前做哪些准备工作?
海量影像数据入库主要做好以下三步工作。
第一步:
数据库和ArcSDE准备
配置DBMS参数
配置ArcSDE参数
估算DBMS存储空间大小
分配DBMS存储空间
第二步:
数据入库
准备原始数据
创建栅格数据存储对象
创建DBMS统计值
第三步:
数据查看
下面分别对上述内容进行详细介绍。
第一步:
数据库和ArcSDE准备
配置DBMS参数
1)设置checkpoint间隔:
通过DBA设置初始化参数LOG_CHECKPOINT_INTERVAL和LOG_CHECKPOINT_TIMEOUT为0,实现在线redo日志组切换时,强制出现checkpoint。
2)增加redo日志文件单个文件大小至少为1GB。
3)增加数据块缓冲区大小DB_BUFFER_CACHE。
4)创建数据块大小为8KB的Oracle数据库。
8KB是存储blob数据最佳的块大小设置,已经成为ArcGIS二进制数据存储的默认存储类型。
16KB或者32KB可能会导致blob存储空间的浪费。
配置ArcSDE参数
在ArcSDE客户端和服务器之间,ArcSDE使用“传输缓冲区”进行数据传输。
在向空间数据库中写入数据时,当ArcSDE客户端数据缓冲区达到阈值,数据将被提交到ArcSDE服务器。
当ArcSDE服务器处理数据时,客户端再将更多数据写入到缓冲区,达到阈值时,提交到ArcSDE服务器。
依次循环往复。
对于栅格数据,“传输缓冲区”的大小是被ArcSDE服务器参数RASTERBUFSIZE控制的。
默认情况下,该参数大小为200KB。
对于大多数栅格数据入库而言是足够的。
在默认参数设置情况下,ArcSDE
会为客户端和服务器端分配RASTERBUFSIZE两倍大小的内存,即如果默认参数设置为200KB,那么ArcSDE客户端将会被分配400KB大小的内存,服务器端同样会分配400KB大小的内存。
除该参数外,ArcSDE在服务器端还提供了三个缓存区参数,用于从DBMS中读写数据。
通过这三个参数,可将服务器端的内存分配增加到1000KB。
如果使用直连directconnection方式(如下图所示),ArcSDE客户端和服务器端的操作都在客户机上执行,因此通过直连方式分配的内存是RASTERBUFSIZE参数指定大小的7倍。
直连方式下,如果RASTERBUFSIZE参数指定的大小无法满足未压缩栅格块的大小,仅需修改RASTERBUFSIZE参数默认值的大小,与其他三个缓冲区参数无关。
未压缩块大小计算方式:
块高×块高×像素深度因子(pixeldepth)。
1)例如:
128*128块,像素深度为32位,那么未压缩块大小=128*128*4(像素深度因子)=65536byte<200KB。
2)再如:
256*256分块,像素深度为32位,那么未压缩块大小=256*256*4=262144byte>200KB。
像素深度与像素深度因子对照表:
序号
像素深度
像素深度因子
1
1bit
0.125
2
4bit
0.25
3
8bit
1
4
16bit
2
5
32bit
4
6
64bit
8
RASTERBUFSIZE参数大小设置:
如果未压缩块大小大于默认RASTERBUFSIZE参数,那么必须要对RASTERBUFSIZE参数值进行修改,否则将会导致错误-SE_RASTER_BUFFER_TOO_SMALL(-294)。
RASTERBUFSIZE参数修改方法:
使用sdeconfig管理工具进行修改,修改后的结果写入SDE.SERVER_CONFIG表,具体命令参数如下Sdeconfig–oalter–vRASTERBUFSIZE=10240000–usde–psde。
提醒:
如块的大小未超出默认RASTERBUFSIZE参数大小,请尽量不要修改RASTERBUFSIZE参数值。
因为RASTERBUFSIZE参数值过大将会影响整个系统的栅格数据流。
估算DBMS存储空间大小
为了在海量栅格入库之前,科学的分配和组织存储空间,优化ArcSDEDBTUNE参数(参见分配DBMS存储空间),需提前对栅格入库后的数据量进行评估。
栅格数据主要存储在以下四个表:
SDE_Aux_#/SDE_BLK_#/SDE_BND_#/SDE_RAS_#。
其中SDE_BLK_#主要用于存储栅格数据,其数据量大小是其他表的近150倍。
因此其他表忽略不计。
估算DBMS存储空间大小主要有两种方法。
1)方法一:
加载小部分示例数据入库,基于示例数据推算整个数据入库后所占存储空间的大小。
2)方法二:
基于公式计算所需空间的大小。
两种方法比较,方法一比方法二更加精确。
但当数据尚未准备好,需要提前预估存储空间时,方法二更为适用。
为了更准确的预估DBMS存储空间的大小,还需要考虑一下属性对存储空间的影响:
压缩方式/金字塔/波段数目/像素位深。
基于示例数据推算所需存储空间
基于示例数据推算所需存储空间步骤如下:
1.查询sde.raster_columns表,获取rastercolumn_id的值。
SQL语句如下:
selectrastercolumn_idfromsde.raster_columnswheretable_name=’(Rasterdataset/catalog名称)’;
例如:
selectrastercolumn_idfromsde.raster_columnswheretable_name=’TESTRC’;
2.获取SDE_BLK_(ratercolumn_id)表的大小。
SQL语句如下:
selectsum(length(rasterband_id))+sum(length(rrd_factor))+sum(length(row_nbr))+sum(length(col_nbr))+sum(length(block_data))"totalsize"fromsde_blk_(rastercolumn_id);
例如:
selectsum(length(rasterband_id))+sum(length(rrd_factor))+sum(length(row_nbr))+sum(length(col_nbr))+sum(length(block_data))"totalsize"fromsde_blk_1;
返回结果为:
683689656byte=652M,如下图所示。
3.推算总数据量所需存储空间。
假设总数据量为3TB,示例数据量为120MB。
那么3TB所需的存储空间大小推算:
原始数据大小为:
3TB*1024*1024=3145728MB
所需的DBMS存储空间为:
3145728MB/120MB=26214.4
26214.4*652MB=16.3TB。
基于公式计算所需存储空间
基于公式计算所需存储空间准确度比上述方法要低,如果数据条件允许,建议采用方法一进行栅格数据量计算。
1.获取数据范围,利用影像的分辨率,计算覆盖该区域的像素总数。
2.计算影像的像素范围:
(Extentofrasterinpixelunits)/(pixelresolution)=Numberofpixels
例如:
450平方公里,15m分辨率影像,像素范围约为:
(km2tom2conversionfactor)/(thepixelresolutioninm2)=pixels
(450km2*1,000,000)/(15x15)=2,000,000pixels
3.考虑影像的波段数目,计算像素总数。
例如:
15m分辨率影像的波段数目为3,那么总像素数等于:
2,000,000pixels*3Bands=6,000,000pixels
4.基于像素深度因子计算像素所占的字节数。
像素深度与像素深度因子对照表:
序号
像素深度
像素深度因子
1
1bit
0.125
2
4bit
0.25
3
8bit
1
4
16bit
2
5
32bit
4
6
64bit
8
例如:
16bit数据所占的字节为:
6,000,000pixels*2=12,000,000Bytes/10242=11.4MB
5.考虑影像金字塔。
金字塔的数据量约为原始影像数据量的1/3。
例如:
考虑影像金字塔构建,总数据量为:
11.4*1.33=15.162MB
6.考虑影像/栅格压缩。
压缩类型与压缩因子对照表。
序号
压缩类型
压缩因子
1
LZ77
0.5
2
JPEG75
0.15
3
JPEG50
0.1
4
JPEG200080/100
0.36
5
JPEG200060/100
0.15
6
JPEG200055/100
0.11
7
JPEG200050/100
0.07
8
JPEG200045/100
0.06
例如,采用JPEG50压缩方式,压缩后的数据量大小为:
15.162MB*0.1=1.5162MB
7.计算数据库存储空间:
增加10%左右用于DBMS空间数据管理。
故推算所需的存储空间为:
1.5162MB*1.1=1.66782MB。
分配DBMS存储空间
为了提高栅格数据库存储和访问的性能,建议栅格块及索引和其他的栅格表及索引分开存储到不同的表空间中。
创建非栅格块表空间(SDE_AUX_#,SDE_BND_#,SDE_RAS_#):
createtablespaceearthdatafile'd:
\oradata\earth.dbf'
size500Mextentmanagementlocaluniformsize1M;
创建栅格块表空间(SDE_BLK_)
createtablespaceearth_blocksdatafile'e:
\oradata\earth_blocks.dbf'
size50000Mextentmanagementlocal
segmentspacemanagementmanualuniformsize100M;
配置DBTUNE关键字(SDE.DBTUNE)
SDE.DBTUNE存储ArcSDE使用的用于创建表和索引的参数。
SDE.DBTUNE参数修改方式:
1)找到dbtune.sde文件,位于ArcSDE安装目录SDEHOME/etc/dbtune.sde下。
2)修改dbtune.sde参数。
3)利用sdedbtune命令行,导入更新SDE.DBTUNE表。
sdedbtune-oimport-fc:
\GISfiles\ArcSDE\dbtune3.sde-usde–psde
具体配置的DBTUNE关键字如下(示例如下图):
1)业务表:
B_STORAGE"PCTFREE0INITRANS4TABLESPACEEARTH"
B_INDEX_ROWID"PCTFREE0INITRANS4TABLESPACEEARTH"
2)栅格表(SDE_RAS_)
RAS_STORAGE"PCTFREE0INITRANS4TABLESPACEEARTH"
RAS_INDEX_ID"PCTFREE0INITRANS4TABLESPACEEARTH"
3)波段表(SDE_BND_)
BND_STORAGE"PCTFREE0INITRANS4TABLESPACEEARTH"
BND_INDEX_COMPOSITE"PCTFREE0INITRANS4TABLESPACEEARTH"
BND_INDEX_ID"PCTFREE0INITRANS4TABLESPACEEARTH"
4)辅助表(SDE_AUX_)
AUX_STORAGE"PCTFREE0INITRANS4TABLESPACEEARTH"
AUX_INDEX_COMPOSITE"PCTFREE0INITRANS4TABLESPACEEARTH"
5)块存储表(SDE_BLK_)
BLK_STORAGE"PCTFREE0INITRANS4TABLESPACEEARTH_BLOCKSSTORAGE
(INITIAL500MMINEXTENTS10)LOB(BLOCK_DATA)STOREAS(ENABLESTORAGE
INROWCHUNK8KRETENTIONCACHE)"
BLK_INDEX_COMPOSITE"PCTFREE0INITRANS4TABLESPACE
EARTH_BLOCKS"
例如:
OracleDBTUNE配置示例
##EARTH_15M
RAS_STORAGE"PCTFREE0INITRANS4TABLESPACEEARTH"
RAS_INDEX_ID"PCTFREE0INITRANS4TABLESPACEEARTH"
BND_STORAGE"PCTFREE0INITRANS4TABLESPACEEARTH"
BND_INDEX_COMPOSITE"PCTFREE0INITRANS4TABLESPACEEARTH"
BND_INDEX_ID"PCTFREE0INITRANS4TABLESPACEEARTH"
AUX_STORAGE"PCTFREE0INITRANS4TABLESPACEEARTH"
AUX_INDEX_COMPOSITE"PCTFREE0INITRANS4TABLESPACEEARTH"
BLK_STORAGE"PCTFREE0INITRANS4TABLESPACEEARTH_BLOCKSSTORAGE
(INITIAL500MMINEXTENTS10)LOB(BLOCK_DATA)STOREAS(ENABLE
STORAGEINROWCHUNK8KRETENTIONCACHE)"
BLK_INDEX_COMPOSITE"PCTFREE0INITRANS4TABLESPACEEARTH_BLOCKS"
END
第二步:
数据入库
准备原始数据
1)CD或DVD数据
从CD或DVD中读取数据比从硬盘上读取要慢很多,因此不建议从CD或DVD上直接读取。
如有存储于CD或DVD上的数据,建议拷贝到硬盘上进行入库。
2)磁带库tapesilo
磁带库中的数据入库,需将数据迁移到在线缓存中。
3)原始数据组织
为了入库更加方便,影像文件需要分组组织到独立的文件夹中。
创建栅格数据存储对象
选择合适的栅格数据存储模型,包括Rasterdataset,Rastercatalog和
MosaicDataset(ArcGIS10).如何选择合适的栅格数据存储模型,将在后续的博文中进行详细解释,敬请关注。
设置栅格属性,主要包括四个重要属性:
金字塔pyramid,统计值rasterstatistics,压缩方式compression,和分块大小tilesize。
为了提高入库效率,可在入库时,不进行金字塔和统计值创建。
入库完成后,统一构建金字塔和统计值。
相应的GP工具如下所示。
创建统计值
基于RDBMS和栅格创建统计值,提升栅格显示性能和显示效果。
基于ArcCatalog创建DBMS统计值的方法:
1)在栅格对象上右键,单击Analyze。
2)弹出Analyzecomponent窗口,选中Rastertable。
3)单击OK.
基于ArcSDE命令行更新统计值sdetable
Oracle格式:
sdetable-oupdate_dbms_stats-t
[-K][-n<{ALL|}>][-i||][-s]-u[-p][-N][-q]
例如:
c:
\>sdetable-oupdate_dbms_stats-tearth-umark-pmark
第三步:
数据查看
利用ArcMap,ArcCatalog,ArcGlobe,或者ArcScene查看栅格数据。
金字塔和统计值可有效提高栅格/影像数据显示的效率。
关于海量影像入库方法,请关注后续博文。
.
展开阅读全文
相关搜索