Join Now

Juletip #8: Eventyret om SPDE.

by SAS Employee HenrikDorf on ‎12-08-2014 02:42 AM (302 Views)

Her er så et eventyr der handler om computere og indeholder det der skal til – nemlig et ældste barn (ikke nødvendigvis en bror - for dette er nemlig et moderne eventyr) med mange spørgsmål og en yngste barn med – vil det vise sig - tilsvarende mange svar.

For den største undrede sig en dag over hvorledes man kunne gemme store mængder data og den yngste fandt ud af at hvis man skrev 

LIBNAME SPDEDATA SPDE "D:\SASSPDE";

Kunne man gemme data på en anden måde end normale SAS tabeller og dermed få fordele når man skulle finde og læse data i disse tabeller. Den yngste læste op fra en bog og fortalte at nu blev data delt op i partitioner der hver især kan læses parallelt og derfor kan det vigtige data findes hurtigere end normalt.

Men, sagde den største – ”jeg vil gerne have mulighed for at bruge indeks på mine data så jeg hurtigt kan finde vej til de rette informationer”.

Den yngste studerede sin bog lidt mere og fortalte så at der sandelig var fuld adgang til indeksering af data i disse SPDE tabeller og at der ydermere var mulighed for at anvende flere indekser på en gang og endog samtidig – hvilket er helt ukendt nå man arbejder med SAS tabeller. Og det var ikke sværere end hvad man ellers gjorde ved indeksering af tabeller – man kunne anvende datasæt option, PROC Datasets eller PROC SQL til at danne de indekser man ville have lov til at bruge.

Men, sagde den største: ”Hvis jeg gerne vil skille data og indekser fra hinanden – hvad gør jeg så”?

Det kunne den yngste nu godt forklare: ”Det er nemt – du fortæller bare hvor de enkelte dele af tabellerne skal ligge i LIBNAME statement”:

LIBNAME SPDEDATA SPDE "D:\SASSPDE"

DATAPATH=("D:\SPDEDATA")

INDEXPATH=("D:\SPDEINDX");

Ja-ja, det ser simpelt ud – men når alle data og indekser nu ligger på same disk – så løber den vel nemt tør for plads – bemærkede den største tørt – thi det hændte ofte at der ikke var plads på disken.

Næh, sagde den yngre, som af og til rydde op på sine diske, og derfor var bedre vant – det klarer man nemt ved at angive, at der skal anvendes flere diske – så mange som man vil og har til rådighed;

LIBNAME SPDEDATA SPDE "D:\SASSPDE"

DATAPATH=("D:\SPDEDATA1" "E:\SPDEDATA2" "F:\SPDEDATA3")

INDEXPATH=("D:\SPDEINDX1" "E:\SPDEINDX2" "F:\SPDEINDX3");

For herved fordeles datapartitioner og indekspartitioner på de angivne diske.

Men den største søskende var ikke nem at gøre tilfreds og sagde at det var da alt for besværligt at huske på den lange definition – men heller ikke det argument fik den yngste til at tie.

Det var jo netop det smarte sagde den mindste – at det eneste man behøvede at skrive for at læse disse store mængder data var dette:

LIBNAME SPDEDATA SPDE "D:\SASSPDE";

for i Metadata for denne tabel var netop gemt navnet på alle de foldere der indeholder date og indeks, så derfor behøvede kun den, der skulle konstruere tabellen at angive disse – mens alle der skulle læse de pågældende data kunne nøjes med at pege på den grundlæggende tabel-folder. 

Og det er jo så det rette sted at ende - hvor ringen er sluttet og vi atter befinder os hvor vi startede - men alligevel forhåbentlig lidt klogere.

Og det viser sig at denne person - som i øvrigt er enebarn - er et driftigt væsen som har lært sig at gøre sig dygtigere ved hele tiden at stille sig spørgsmål og finde de tilhørende svar i dialog med sig selv. Det er rart at have tålmodighed og nysgerrighed samlet så tæt i familien.

Og bogen det hele kommer fra er hedder

SAS® 9.x Scalable Performance Data Engine Reference

 

med ønsket om en glædelig jul til alle

Henrik Dorf

Comments
by Super Contributor
on ‎12-08-2014 08:54 AM

Tak for et godt og spændende juleeventyr.

Kan du også forklare om dette SPDE er mere smart end fx en raid 5 disk-system, hvor hardwaren automatisk tager sig af at få parallelliseret læse-skrive processen?

by SAS Employee HenrikDorf
on ‎12-08-2014 10:31 AM

Det bliver lidt mindre eventyrligt og mere teknisk med forklaringer – men vil gerne prøve:

Alle typer data kan gemmes på RAID5 – både SAStabeller , SPDE tabeller og andre data.

RAID5  er et teknisk konstruktion der er beregnet til at give forøget sikkerhed. Det fungerer i korthed ved at data deles op i ”stripes” der placeres på forskellige diske og samtidig dannes en paritets-stripe som gemmes for sig. Matematisk kan hver del gendannes på basis af de andre stripes og paritetsstripe. Det betyder at såfremt en disk fejler kan den erstattes med en ny disk uden at det betyder tab af data fordi alle data kan gendannes.

Det er rigtigt at data læses i parallel på de tre diske – men de 3 stripes skal sættes sammen til en data-del.

Normalt siger man at RAID5 giver større sikkerhed for data og lidt længere I/O tider ved skrivning.

Så SPDE tabeller kan ikke erstattes af RAID5 fordi RAID5 hører til på disk-niveau og ikke ved noget om hvad data indeholder.

SPDE ved hvad data indeholder og kan derfor intelligent benytte denne viden til at vælge hvilke dele der skal læses ind og dermed kan læse den mindste mængde data der er nødvendig for en given forespørgsel.


Gav det mening ?

Henrik

by Super Contributor
on ‎12-08-2014 10:59 AM

jo, det giver fin mening. Tak for godt og præcis svar.

Men jeg er da godt nok lidt forvirret over hvilket system man skal vælge, når der både skal tages hensyn til hastighed og sikkerhed, og også at der skal tillades andre typer data end SAS-tabeller. Jeg gad nu godt lave en praktisk sammenligning mellem de to systemer (RAID5 vs SPDE), men mig bekendt kan man ikke sådan lige lave opsætning om.