MS SQL 2008: Novi tipovi podataka

Monday, 15.06.2009 – Zidar

 

 

Ovo je skraceni prevod originalnog teksta http://www.simple-talk.com/sql/learn-sql-server/sql-server-2008-the-new-data-types/ koji je napisao Brad McGhee.

MS SQL 2008 donosi nekoliko novih tipova podataka:

  • Date and Time: Cetiri nova pod-tipa, koji bi trebalo da olaksaju rad sa date/time podacima. To su: DATE, TIME, DATETIME2, DATETIMEOFFSET
  • Prostorni tip: Dva nova tipa podataka za modelovanje prostora (Geografski Informacioni Sistemi, GPS podaci i slicno) – GEOMETRY i GEOGRAPHY, koje mozemo upotrebiti da na ‘prirodan’ nacin cuvamo informacije koje opisuju lokaciju
  • Hijerarhijski tip, HIERARCHYID, omogucava modelovanje hijerarhisjkih struktura, kao sto su organizacione sheme firmi, lanci komandovanja, sastavnice materijala.
  • Filestream: nije tip podataka sam po sebi, nego unapredjena varijacija VARBINARY(MAX). Omogucuje da se podaci cuvaju na server, u file sistemu, umesto unutra MS SQL baze. Ovo zahteva dosta posla na strain administracije baze pa ce biti obradjeno manje nego ostali noviteti.

Date and Time

U ranijim verzijama MS SQL imali smo DATETIME i SMALLDATETIME tipove. Koriscenje DATETIME i SMALLDATETIME nije jednostavno i cesto smo imali probleme, kao sto su:

  • Datum i vreme su deo istog tipa, i nije bilo moguce cuvati datumski ili vremenski deo. Razbacivali smo proctor cuvajuci vremenski deo koada sun am trebali samo datumi. To i nije bilo najstrasnije, glavni problem su  nastajali kad smo zeleli da cuvamo recimo samo vreme, bez datuma. Neophodne sui  funkcije za konverziju datuma iz jednog u drugi format, kveriji su bili tezi nego sto je potrebno, zbog komplikovane sintakse. Cesto zbog konverzije nismo mogli da koristimo postojece idnekse, optimizer bi jednostavno zanemario index, sto je dovodilo do sporijeg izvrsavanja kverija.
  • DATETIME i SMALLDATETIME ne uzimaju u obzir vremenske zone, sto zahteva dodatno kodiranje u aplikacijama koje treba da rade globalno
  • Preciznost je samo 0.333 sekunde, sto je cesto nedovoljno za mnogeprimene.
  • Opseg datuma koji pokrivaju DATETIME tipovi cesto nije zadovoljavajuci.

Da bi se ovi problem prevazisli, MS SQL 2008 uvodi nove tipove podataka:

·         DATE: kao sto naslucujete, DATE cuva podatke u obliku YYYY-MM-DD. Opseg vazenja tipa DATE je  0001-01-01 do 9999-12-31, sto bi trebalo d abude dovoljno za vecinu poslovnih i tehnickih aplikacija. Preciznost je  1 dan, i jedan DATE podatak zahteva 3 bajta prostora na disku.

·         TIME se cuva kao hh:mm:ss.nnnnnnn, opseg je od 00:00:00.0000000 do 23:59:59:9999999, tacnost ide do 100 nanoseconds. Zavisno od zahtevane tacnosti, potrebno je 3 do 5 bajta za cuvanje TIME podataka.

·         DATETIME2 je slican DATETIME< ali jepovecan opseg i preciznost. Format je YYYY-MM-DD hh:mm:ss:nnnnnnnm u opsegu od 0001-01-01 00:00:00.0000000 do 9999-12-31 23:59:59.9999999, uz preciznost do 100 nanoseconds. Zavisno od preciznosti, potrebno je 6 do 8 bajta za cuvanje DATETIME2 podataka

·         DATETIMEOFFSET jer slicasn DATETIME2 ali ukljucuje i dodatnu informaciju za pracenje vremenskih zona. Format je YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm u opsegu od 0001-01-01 00:00:00.0000000 do 9999-12-31 23:59:59.9999999 (sa koriscenjem UTC), preciznosdo 100 nanoseconds. Zavisno od preciznosti, potrebno je 8 do 10 bajta za cuvanje DATETIMEOFFSET podataka.

Sve postojece funkcije za rad sa datumima i vremenima su preradjene tako da rade sa novim tipovima podataka. Dodate sui  neke nove funkcije, io cemu cemo pisati nekom drugom prilikom.

Modelovanje Prostora – Spatial Data Type

Spatial data Type u sustini zanci cuvanje koordinata tacaka u bazi podataka. To smo mogli i ranije da radimo sa kalsicnim numerickim tipovima podataka. Primedba prevodioca: Cemu onda novi tip? Navodno, uz novi tip podataka olaksane su neke radnje koje sun am potrebne ako se bavimo GIS/GPS sistemima. Vreme ce pokazati da li je ovo stvarni napredak ili nam Microsoft prodaje toplu vodu kao novo epohalno otkrice.

GEOMETRY tip se korsiti za cuvanje XY koordinata u planarnom, dakle dvodimenzionom koordinatnom sistemu

GEOGRAPHY se koristi za cuvanje podataka o tackama na Zemljinoj kugli.

GEOMETRY i GEOGRAPHY tipovi podataka se koriste u sprezi sa .NET CLR tipovima podataka, sto znaci da .NET i CLR funkcije mogu da primenjuu ugradjene funkcije i metode za ovakav tip podataka. Na primer, moze se pozvati metod koji izracunava daljinu izmedju dve zadate tacke. Drugi primer je metod koji kazuje da li se dve linije seku. Metode je definisao Open Geospatial Consortium standard uz koji s emogu koristiti Microsoftove ekstenxije (ako neko razume, neka nam objasni J) Kako sve to radi, izlazi iz planiranog opsega ovog napisa.

Jos jedna osobion spatial data tipova je da mogu da koriste prostorne indekse (spatial indexes). Prostorni indeksi su mrezne structure i omogucavaju ubrzano pretrazivanje prostora –tacaka na koordinatnoj mrezi.

Vecini DB administratora, a i ostalim,  je ovo sve novo i zahteva dosta matematickog znanja, inace se covek lako izgubi u svemu. Videcemo sta se nam ovo doneti.

Hijerehije

Iako su hijerarhijske structure veoma ceste u praksi, SQL uospte, MS QL posebno ne pruzaju mnogo u toj oblasti. Skrivene tabele, kursori, proceduralno procesiranje tabela u zdatom redosledu, sve to nam je trebalo da bismo se nekako iscupali u specificnoj situiaciji. Malo toga je bilo prenosivo na neku drugiu situaciju. SQL Server 2008 uvodi HIERARCHYID tip podataka da bi se neki od problema prevazisli. Predvidjeno je da HIERARCHYID cuva podatke o poziciji cvora u hijerarhijskom stablu. Sledeci odgovori mogu se dobiti i bez uvodjejnja parent-child kolona i slozenih kverija:

  • Organizacione structure
  • Skup zadataka koji cine veci projekat, kao Gantt dijagrami
  • File sistemi (direktorijumi i poddirektorijumi)
  • Recnici
  • Sastavnice i recapture, specifikacije materijala
  • Graficka reprezentacija linkova zimedju web starnica

FILESTREAM

SQL Server odlicno cuva lepo strukturirane podatke u normalizovanim bazama. Medjutim, sve vise se trazi cuvanje i manipulisanje nestrukturiranih podata (video fajlovi graficki fajlovi, Word i Excel dokumenti i slicno), gde MS QKL nije tako dobar. Pre verzije NS SQL 2008, ako ste zeleli da upotrebite MS SQL za manipulisanje takvim podacima,  imali ste dve opcije. Mogli ste da cuvate kompletne fajlove kao  VARBINARY(MAX) unutar same SQL baze, kao kolone VARBINARY(MAX) tipa; ii ste cuvali fajlove negde na fajs sitemu (server) a u bazi ste cuvali adrese tih fajlova, pokazivace na lokacije gde su fajlovi bili smesteni. Aplikacija bi onda procitala adresu iz abze in a toj adresi otvorila fajl (ukoliko ga neko u medjuvremenu nije sklonio ili preimenovao).

Nijedno od dva resenja nije savrseno. Cuvanje fajlova unutar  VARBINARY(MAX) kolona daje ne bas idealne performance, imamo  2 GB ogranicenje velicinevfajla , i sve skupa dramaticno mzioe povecati velicinu same baze podataka.

S druge strane, ako cuvamo fajlove naNTFS  serveru, kao minimum treba nam nacin imenovanja fajlova tako das u imena jedinstvena, treba nam pametan system za upravljanje folderima; bezbednost podataka je problem, jer su podaci van SQ, pa treba koristiti NTFS; treba nam poseban back-up; i uvek ce se neko vec naci sa dovoljno privilegija da obrise, pomeri ili preimenuje fajlove tako da ih SQL ne moze naci. Sve u svemu, mrka kapa.

Da bi se bar neki problem prevazisli, SQL Server 2008 uvodi nesto sto se zove  FILESTREAM storage, sto je u sutini hibridni pristup, sa namerok da se dobre strane oba resenja kombinuju.

FILESTREAM storage se ostvaruje tako sto  SQL Server 2008 cuva VARBINARY(MAX) objekte (BLOBs) izvan baze, u  NTFS fajl sistemu. Deluje slicno opisnom metodu, ali samo na prvi pogled. Umosto jednostavnih pokazivaca, SQL Server Database Engine je  integrisan sa NTFS fajl sistemom tako da se dobije optimalna kombinacija performansi i kompleksnosti administracije. Na primer, FILESTREAM korist Windows OS sistemski cache umestop SQL Server buffe. Ovo solbadja SQL manipulacije Windows fajlovima, tako da server manipulise samo strukturiranim podacima, dok Windows radio no sto Widows ume da uradi – upravlja velikim fajlovima.

FILESTREAM nudi i ova poboljsanja:

  • Transact-SQL se moze koristiti ( SELECT, INSERT, UPDATE, DELETE ) nad FILESTREAM podacima.
  • Po defaultu, FILESTREAM podaci idu u back-up zajedno sa bazom podataka, iako sede izvan baze. Ako hocete, mozete da razdvojite back-up za bazu i  FILESTREAM podatke.
  • Velicina fajlova i njihov broj ogranicen je samo is prostorom na NTFS, za razliku od standardnih 2 GB za  VARBINARY(MAX.

Ipak, ni FILESTREAM nije resenja za ma a bas svaku situaciju. Veruje se da je najbolje primeniti FILESTREAM kada:

  • Radimo sa  BLOB fajlovima  1MB ili vecim.
  • Treba nam veoma brz pristup z acitanje (read access).
  • Aplikacije imaju ugradjenu logiku u middle-tier.
  • Kada se ne zahteva kriptovanje podatka, posto FILESTREAM ne podrzava enkripciju.

Ako vasa primena ne zadovoljava navedene uslove, verovatno je pristup sa  VARBINARY(MAX) najbolja opcija. Posto je sve ovo novo i neisprobano, dajte sebi dosta vremena za testiranje probanje ove ili one opcije.

Clanak se dalje nastavlja uputama za adminsitratora kako da setuje FILESTREAM i taj deo ostavljam zaintersovanim da sami pogledaju.

 

J

  1. One Response to “MS SQL 2008: Novi tipovi podataka”

  2. I ja sam skinuo tu knjigu u PDF formatu, al’ nikako da se nakanem da ju procitam… 🙁
    Nesto se dvoumim, da se aktivnije pozabavim MS SQL serverom, pa ce mi ova knjiga valjda dobro doci. 🙂
    Zanimljivo je vidjeti kako i MS SQL poput Oraclea prosiruje svoj RDBMS raznim ekstenzijama, koje nisu bas po SQL standardu (ANSI SQL, SQL 99, SQL 2003).

    Daj jos ovakvih zanimljivih informacija!

    PS: Napatio sam se, dok sam desifrovao citav tekst. 😀 Imas u svakoj recenici barem jednu gresku hehe

    By Dejan on Jun 15, 2009

Post a Comment