{"id":1204,"date":"2012-03-28T13:38:06","date_gmt":"2012-03-28T12:38:06","guid":{"rendered":"http:\/\/soci.hu\/blog\/?p=1204"},"modified":"2012-03-28T13:38:06","modified_gmt":"2012-03-28T12:38:06","slug":"sql-server-2012-ujdonsagok-1-file-table","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2012\/03\/28\/sql-server-2012-ujdonsagok-1-file-table\/","title":{"rendered":"SQL Server 2012 \u00fajdons\u00e1gok &#8211; 1. File Table"},"content":{"rendered":"<p>Aki m\u00e9g eml\u00e9kszik r\u00e1, valamikor 2004 t\u00e1j\u00e1n volt egy olyan \u00f6tlet, hogy az NTFS valamif\u00e9le adatb\u00e1zis ir\u00e1nyba megy el, \u00edgy a Vista m\u00f6g\u00f6tt WinFS n\u00e9ven lesz valami hibrid t\u00e1rol\u00f3. M\u00e9g dem\u00f3ztam is annak idej\u00e9n, de azt\u00e1n nem lett bel\u0151le semmi.<br \/>\nMost, 2012-ben az FileTable SQL Server \u00fajdons\u00e1got l\u00e1tva WinFS feelingem t\u00e1madt. L\u00e1ssuk, mi ez?<\/p>\n<p>Nagy f\u00e1jlok \u00e9s a rel\u00e1ci\u00f3s adatok egy\u00fcttes t\u00e1rol\u00e1sa gyakran visszat\u00e9r\u0151 feladat. Pl. egy website f\u00e9nyk\u00e9peket publik\u00e1l, amelyekhez le kell t\u00e1rolni a f\u00e9nyk\u00e9peket mint nagyt\u00f6meg\u0171 bin\u00e1ris adatot, \u00e9s hozz\u00e1 tucatnyi metaadatot a k\u00e9p m\u00e9ret\u00e9r\u0151l, k\u00e9sz\u00edt\u0151j\u00e9r\u0151l, stb. A metaadatok k\u00f6nnyen let\u00e1rolhat\u00f3k rel\u00e1ci\u00f3s s\u00e9m\u00e1ban, de a f\u00e1jl adatok mindig is probl\u00e9m\u00e1t jelentettek, mivel a rel\u00e1ci\u00f3s adatb\u00e1ziskezel\u0151k nem nagym\u00e9ret\u0171 adatok t\u00e1rol\u00e1s\u00e1ra tervezettek, hanem sok kicsire.<br \/>\nAz SQL Server 2008-ban bevezetett FILESTREAM attrib\u00fatum seg\u00edts\u00e9g\u00e9vel m\u00e1r tudtunk nagyt\u00f6meg\u0171 adatokat hat\u00e9konyan t\u00e1rolni, amely l\u00e1tsz\u00f3lag adatb\u00e1zisban t\u00e1rolja az adatokat, val\u00f3j\u00e1ban f\u00e1jlrendszerben, a tranzakcion\u00e1lis \u00e9ps\u00e9g megtart\u00e1sa mellett. Az \u00edgy t\u00e1rolt adatokat el lehet \u00e9rni SQL SELECT paranccsal is, mintha rel\u00e1ci\u00f3s adat lenne, de tranzakcion\u00e1lis f\u00e1jl apin kereszt\u00fcl is, amely hat\u00e9konyabb el\u00e9r\u00e9st biztos\u00edt. Ut\u00f3bbi viszont csak tranzakci\u00f3 megnyit\u00e1sa ut\u00e1n enged\u00e9lyezte a kipublik\u00e1lt f\u00e1jl megoszt\u00e1s el\u00e9r\u00e9s\u00e9t, \u00edgy azt azt az arre fel nem k\u00e9sz\u00edtett alkalmaz\u00e1sok k\u00f6zvetlen\u00fcl nem tudt\u00e1k el\u00e9rni f\u00e1jl apival (CreateFile f\u00fcggv\u00e9ny, .NET FileStream oszt\u00e1ly, stb.).<br \/>\nAz SQL Server 2012-ben bevezetett FileTable a FILESTREAM funkci\u00f3t fejleszti tov\u00e1bb. Bel\u00fcl FILESTREAM alapon l\u00e1tsz\u00f3lag t\u00e1bl\u00e1ban, val\u00f3j\u00e1ban f\u00e1jlokban t\u00e1rolja az adatokat, k\u00edv\u00fclr\u0151l viszont teljesen \u00fagy lehet el\u00e9rni \u0151ket, mintha egy f\u00e1jlmegoszt\u00e1s f\u00e1jljait \u00e9s k\u00f6nyvt\u00e1rait l\u00e1tn\u00e1nk. A FileTable adatok el\u00e9r\u00e9s\u00e9hez nem kell (de lehet) tranzakci\u00f3t nyitni, \u00edgy k\u00f6z\u00f6ns\u00e9ges m\u00f3don, mintha t\u00e9nyleg f\u00e1jlokat l\u00e1tn\u00e1nk el\u00e9rhet\u0151ek az adatok.<br \/>\nK\u00f6zelebbr\u0151l, a FileTable valamely sora egy f\u00e1jlt vagy egy k\u00f6nyvt\u00e1rat k\u00e9pes t\u00e1rolni. Az adatok a f\u00e1jlrendszerhez hasonl\u00f3an hierarchikusan vannak elrendezve. Bel\u00fcl contraintekkel \u00e9s triggerekkel biztos\u00edtj\u00e1k, hogy az igazi f\u00e1jlrendszerhez hasonl\u00f3an m\u0171k\u00f6dj\u00f6n. 10 f\u00e1jl attrib\u00fatumot is t\u00e1rolnak (hidden, readonly, stb.). Tartalmaz egy f\u00e1jl t\u00edpust azonos\u00edt\u00f3 oszlopot is, hogy a FullText keres\u0151 tudja, milyen tartalom van benne (rtf, doc, stb.)<br \/>\nSQL szemsz\u00f6gb\u0151l az adatok el\u00e9rhet\u0151k SQL parancsokkal is, \u00e9s a backup\/restore is kezeli, azaz teljesen integr\u00e1ns r\u00e9sze lett az SQL Servernek, m\u00edg k\u00edv\u00fclr\u0151l teljesen az az \u00e9lm\u00e9ny\u00fcnk, hogy f\u00e1jlrendszert l\u00e1tunk.<br \/>\nN\u00e9zz\u00fcnk egy egyszer\u0171 p\u00e9ld\u00e1t FileTable l\u00e9trehoz\u00e1s\u00e1ra:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nalter database AdventureWorks2012\r\nADD FILEGROUP FsGroup CONTAINS FILESTREAM;\r\n\r\nalter database AdventureWorks2012\r\nADD FILE (NAME = Fs, FILENAME = &#039;c:\\data\\filestream1&#039;)\r\nTO FILEGROUP FsGroup;\r\n\r\nALTER DATABASE AdventureWorks2012\r\nSET FILESTREAM (NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N&#039;gyoker&#039;);\r\n\r\nCREATE TABLE FtStore AS FileTable\r\nWITH (FileTable_Directory = &#039;Ft&#039;,\r\n\tFileTable_Collate_Filename = Latin1_General_100_CI_AS);\r\n<\/pre>\n<p>Int\u00e9z\u0151ben k\u00f6z\u00f6ns\u00e9ges megoszt\u00e1sk\u00e9nt l\u00e1tszik a FileTable, l\u00e9trehozhatunk benne k\u00f6nyvt\u00e1rakat \u00e9s f\u00e1jlokat:<br \/>\n<figure id=\"attachment_1205\" aria-describedby=\"caption-attachment-1205\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/filetableshareinexplorer.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/filetableshareinexplorer-300x153.png\" alt=\"File Table in Windows Explorer\" title=\"File Table in Windows Explorer\" width=\"300\" height=\"153\" class=\"size-medium wp-image-1205\" srcset=\"https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/filetableshareinexplorer-300x153.png 300w, https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/filetableshareinexplorer-600x308.png 600w, https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/filetableshareinexplorer.png 749w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1205\" class=\"wp-caption-text\">File Table in Windows Explorer<\/figcaption><\/figure><\/p>\n<p>\u00cdgy \u00e9rhet\u0151 el a FileTable SQL oldalr\u00f3l:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT * FROM &#x5B;AdventureWorks2012].&#x5B;dbo].&#x5B;FtStore];\r\n<\/pre>\n<p>Az eredm\u00e9nyhalmaz kett\u00e9 van v\u00e1gva a k\u00f6nnyebb olvashat\u00f3s\u00e1g kedv\u00e9\u00e9rt:<br \/>\n<figure id=\"attachment_1207\" aria-describedby=\"caption-attachment-1207\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect1-300x15.png\" alt=\"FileTable from SQL side\" title=\"FileTable from SQL side\" width=\"300\" height=\"15\" class=\"size-medium wp-image-1207\" srcset=\"https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect1-300x15.png 300w, https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect1-600x31.png 600w, https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect1.png 1189w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1207\" class=\"wp-caption-text\">FileTable from SQL side<\/figcaption><\/figure><\/p>\n<figure id=\"attachment_1208\" aria-describedby=\"caption-attachment-1208\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect2-300x15.png\" alt=\"FileTable from SQL side\" title=\"FileTable from SQL side\" width=\"300\" height=\"15\" class=\"size-medium wp-image-1208\" srcset=\"https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect2-300x15.png 300w, https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect2-600x31.png 600w, https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/03\/ftselect2.png 1158w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1208\" class=\"wp-caption-text\">FileTable from SQL side<\/figcaption><\/figure>\n<p>A FILESTREAM vagy FileTable adatokat igaz\u00e1n hat\u00e9konyan a megoszt\u00e1son kereszt\u00fcl, f\u00e1jlkezel\u0151 m\u0171veletekkel lehet j\u00f3l kiakn\u00e1zni, mivel ilyenkor az adatok nem ker\u00fclnek be a Buffer Cache-be, \u00edgy nem tolj\u00e1k ki onnan a m\u00e1r cache-elt kisebb rel\u00e1ci\u00f3s adatokat.<\/p>\n<p>Egyetlen fura pont van csak az eg\u00e9szben, hogy notepadban nem lehet megnyitni \u00e9s elmenteni a FileTableben t\u00e1rolt sz\u00f6vegeket, mert a notepad Memory Mapped File apival nyitja meg a sz\u00f6veget, amit nem t\u00e1mogat a FileTable redirectora&#8230; Csak sima CreateFile api vagy .NET-b\u0151l a FileStream az, amivel meg lehet nyitni a benne lev\u0151 dolgokat. A WordPad p\u00e9ld\u00e1ul nem tr\u00fckk\u00f6zik, nem haszn\u00e1l Memory Mapped File-t.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aki m\u00e9g eml\u00e9kszik r\u00e1, valamikor 2004 t\u00e1j\u00e1n volt egy olyan \u00f6tlet, hogy az NTFS valamif\u00e9le adatb\u00e1zis ir\u00e1nyba megy el, \u00edgy a Vista&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4,30,78],"tags":[],"class_list":["post-1204","post","type-post","status-publish","format-standard","hentry","category-adatbazisok","category-szakmai-elet","category-sql-server","category-sql-server-2012"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=1204"}],"version-history":[{"count":2,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1204\/revisions"}],"predecessor-version":[{"id":1209,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1204\/revisions\/1209"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=1204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=1204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=1204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}