简介:SPD引擎
SPD(Scalable Performance Data )是设计用于高性能数据传送,它之所以能达到快速的数据传送是由于按特定的格式组织数据,以最大限度的利用多CPU实现并行输入/输出功能
SPD引擎使用多线程并行的快速读取数据,但相应的OS必须支持容许线程执行在现有的任意CPU上,虽然该功能是SPDE最重要的功能,但这种功能的是来自于SAS的数据存储的结构组织方面的支持,这种数据组织方式容许多线程、并行处理I/0任务的能力
然它是不能替代缺省的SAS BASE引擎的,SPDE为大数据量的高速处理提供了一种选择,特别是在读写数百万记录的时候,并且还有某些OS是不容许大于2GB的文件存在,其主要表现在以下方面:
支持上GB的数据
在多CPU机器上具有可量测性
并行WHERE处理
并行装载
并行INDEX创建
并行数据传送
固有的排序在BY时
SPDE可运行于UNIX 、WINDOWS、z/oS(只在ZFS文件系统上) 和OpenVMS Alpha(只在 ODS-5文件系统上)上
利用SMP(symmetric multiprocessing)机器
SPDE技术是充分建立在SMP机器上的,一个SMP机器有多个CPU且OS支持线程,一般来说,它具有多个控制器和多个磁盘设备,每个磁盘设备对应一个控制器,当SPDE读数据是,它运行一个或多个线程在每一个CPU上,这些线程并行的从多个磁盘设备上读取数据,这种读取很有可能是通过多CPU操控的
例如:一个完美的系统,其有5个CPU和10个磁盘设备,在进行数据读取时要比单CPU机器会快上5倍以上,除了多线程I/0外,SMP机器还能支持多线程应用,如SORT过程
如何利用SPDE组织SAS数据
因为SPDE是为高性能数据处理,故数据集的物理存储上是跟BASE SAS的的数据存储是不同的,后者是用单一文件存储数据集,其包含了数据和数据的相关描述信息,而SPDE是采用了分开的文件用来存储数据和数据描述信息,另外,如果数据集是被索引,则将会为每一个索引产生2个INDEX文件,这4种文件类型可被称为SPDE组件文件,每一种类型的文件都有它自己的文件扩展名
另外,每一个组件文件可以一个或多个物理文件组成,故它可以跨越多个卷但在引用时是作为一个逻辑文件,例如:SPDE能建立许多物理文件,但引用时可以当作一个单一的文件
描述性数据组件跟实际数据组件是不同的,表现在以下2方面:
1。你能为实际数据组件指定一个固定长度的分区尺寸,用PARTSIZE选项指定,然而,你是不能控制描述性数据组件的分区尺寸的
2。数据组件文件可以建立在不同的路径上,但描述性数据只能建立在一个单一路径下,直到路径的存储空间已满,才会使用下一个路径
元数据组件文件
其扩展名为.MDF,通常一个SPDE数据集只有一个MDF文件
索引组件文件
如果一个文件被索引,SPDE将会产生2个索引组件文件为每一个索引,HBX扩展名的文件包含了全局的索引,而.IDX文件则包含了分段的索引
数据组件文件
一个数据组件文件可被几个或多个文件组成,胜于单一一个文件,每一个文件的是固定长度的,这个长度在建立数据集时指定
特别的,分区尺寸的大小会影响你应用的执行性能,因为每一个文件是被一个线程读的
比较BASE SAS 引擎和SPD引擎
2者有很多相同处,2者都是用SAS 数据库存储数据;SAS库是一个包含多个文件和目录的东西,然而,SPDE库下的东西能存在在不同路径下,你可已在使用LIBNAME句法是指定一些数据存储的细节
一个SPDE库包含数据文件,元数据文件,索引文件,
注意的是SPDE库是不支持目录,视图,MDDB或者其他文件的
SPDE文件操作空间
SPDE文件操作空间是用于SPDE操作时所需要的额外的空间,如没有指定会使用缺省的,但当你操作大数据量的数据时,可能缺省的空间不足够大,因此,你可以用SPDEUTILLOC选项来指定SPDE文件操作空间
临时数据集存储
通过TEMP选项指定,如下
libname user spde '/mydata' temp=yes;
data a; x=1;
run;
proc print data=a;
(注:USER选项的使用使得在引用时只需使用一级名字)
2者的其他异同处
【Feature】 【SPD Engine】 【Base SAS Engine 】
分区数据集 YES NO
并行WHERE优化 YES NO
最低锁定级别 成员级别 记录级别
不同请求同时访问给出的数据集 只读 读写
支持SAS/SHARE NO YES
SAS BY时自动排序 YES NO
目录支持 NO YES
视图支持 NO YES
MDDB支持 NO YES
完整性约束 NO YES
变量数 多于32767
记录数 2的63次方-1 2的32次方-1(32位机器上)
2种引擎下数据集的互用
BSE数据集必须转化为SPDE数据集才能被SPDE访问,你可已很容易的使用COPY、APPEND过程或数据步(PROC MIGRATE除外)
另外,你已存在的SAS程序可以很好的运行在SPDE引擎下,只需做很小的修改,除了LIBNAME句法
共用SPDE文件
SPDE支持成员级的锁定,意思时多个用户可以同时读同一个SPDE数据集,然而当一个数据集在被更新时,其他用户只能访问它,如果你想支持读写,那么你需要SPD 服务器产品