o co chodzi z filestream?
TRANSCRIPT
O co chodzi z FILESTREAM?
87. spotkanie PLSSUG Warszawa, 07.05.2015.
O czym będzie?
Trzymać pliki w bazie, czy w systemie plików?Czym jest FILESTREAM?Jak go skonfigurować i używać?Jak on wygląda w środku?Jak używać z poziomu .NETGdzie łyżka dziegciu w tej beczce miodu?I czym jest FILETABLE?
O mnieBartosz Ratajczyk
programista baz danych(i aplikacji)
czasem też administrator
T-SQL, ETL, C#, PHP, JS, SAS 4GL
http://bartekr.net | [email protected]
MCTS SQL Server 2008, MCSA SQL Server 2012
Pliki w bazie czy w systemie?Dane w bazie Dane w systemie plików
Zalety: Spójność transakcyjna Wszystkie dane w jednym miejscu Jedno środowisko przechowywania i
odpytywania danych
Zalety: Oszczędność miejsca w bazie Rozmiar pliku ograniczony tylko przez
system operacyjny i miejsce na dysku Wydajne pobieranie danych
Wady: Duże obiekty potrzebują dużo pamięci Varbinary(max) przechowa najwyżej
2GB danych Aktualizacja może spowodować dużą
fragmentację bazy danych Duże pliki bazy danych
Wady: Separacja logiczna i fizyczna danych Baza danych nie wie o zmianach w
systemie plików Operacje ręczne na poziomie systemu
plików wpływają na spójność danych Wymagana dedykowana obsługa
plików
To może FILESTREAM?ZALETY
Spójność transakcyjna Wszystkie dane w jednym miejscu Jedno środowisko przechowywania i odpytywania danych Oszczędność miejsca w bazie Rozmiar pliku ograniczony tylko przez system operacyjny i
miejsce na dysku Wydajne pobieranie danych Zmniejsza rozmiar logu transakcyjnego
(o wadach będzie później)
Włączanie (1) - WINDOWS
Włączanie (2) - INSTANCJA
EXEC sp_configure 'filestream access level', <level>
T-SQL
FILEGROUP:CONTAINS FILESTREAM
TABELA:VARBINARY(MAX) FILESTREAMUNIQUEIDENTIFIER [UNIQUE] NOT
NULL ROWGUIDCOL
Czy T-SQL jest wydajny?
Read performance of various BLOB sizes, źródło: FILESTREAM Storage in SQL Server 2008, https://msdn.microsoft.com/en-us/library/hh461480.aspx
.NET
SqlConnection(„Integrated Security=true”)PathName()GET_FILESTREAM_TRANSACTION_CONTEXT()Zawsze wymaga transakcji, nawet przy samym
odczycieZamknij strumień przed zatwierdzeniem
transakcji
FILETABLE
Bazuje na FILESTREAMUproszczona interakcja z systemem plikówPredefiniowana struktura tabeliDostęp z poziomu zasobu po włączeniu
NON_TRANSACTED_ACCESS
Kilka zaleceń
Stosuj FILESTREAM dla plików > 1MBNie nadużywaj T-SQL, raczej korzystaj z APIUżyj kolumny wyliczanej do przechowywania
rozmiaru danychPrzechowuj pliki FILESTREAM na oddzielnych
dyskachWyłącz generowanie nazw plików 8.3
No a te wady?
Database SNAPSHOT nie obsługuje grup FILESTREAM
Database Mirroring nie obsługuje FILESTREAMTDE nie obsługuje szyfrowania plików w
grupach FILESTREAMKompresja SQL Server nie dotyczy plików w
grupach FILESTREAM
Linki i źródła
Kalen Delaney „Microsoft SQL Server 2012 Internals”
Jacob Sebastian & Sven Aelterman „The Art of SQL Server FILESTREAM”
https://technet.microsoft.com/en-us/library/hh393573%28v=sql.110%29.aspx - FILESTREAM (OLTP)---a Technical Reference Guide for Designing Mission-Critical OLTP Solutions
Co zapamiętać
• FILESTREAM włącza przechowywanie danych w systemie plików, ale dostępnych z poziomu bazy
• Ułatwia zarządzanie i obsługę plików z poziomu T-SQL, ale zaleca korzystanie z API
• FILETABLE upraszcza obsługę plików w bazie przez udostępnienie zasobu sieciowego