| Termin | Definicja |
|---|---|
| Ograniczenia VARBINARY | VARBINARY(MAX) przechowuje do 2 GB danych — dla większych obiektów właściwszy jest FILESTREAM. Ograniczenia VARBINARY w przechowywaniu danych binarnychTyp VARBINARY służy do zapisywania danych, których nie interpretuje się jako tekstu. Mogą to być fragmenty plików, zawartość dokumentów, obrazy, elementy archiwów, dane zaszyfrowane albo inne sekwencje bajtów. W odróżnieniu od pól tekstowych nie zakłada się określonego kodowania znaków, dlatego każdy bajt jest traktowany jako część wartości binarnej. Taka właściwość bywa przydatna w aplikacjach, w których przechowywany obiekt ma pozostać niezmieniony podczas zapisu i odczytu. Najważniejsze ograniczenie wynika z rozmiaru pola. VARBINARY bez odpowiednio dobranego parametru nie jest pojemnikiem o dowolnej wielkości. Wariant z parametrem określa maksymalną liczbę bajtów dopuszczanych w pojedynczej wartości, a przekroczenie tej granicy może zakończyć operację błędem, obcięciem danych albo odrzuceniem rekordu, zależnie od ustawień i używanego systemu bazodanowego. Wariant MAX pozwala przechowywać bardzo duże wartości, do około 2 GB w pojedynczym obiekcie. Nie oznacza to jednak, że każda aplikacja powinna umieszczać w tabelach pliki o takim rozmiarze. Ograniczenia typu binarnego VARBINARY a inne sposoby zapisuVARBINARY różni się od typu BINARY tym, że nieużywana część pola nie jest dopełniana do z góry ustalonej długości. BINARY sprawdza się przy danych zawsze mających ten sam rozmiar, na przykład przy określonych identyfikatorach technicznych lub stałych strukturach bajtowych. VARBINARY jest bardziej elastyczny, ponieważ długość wartości może zmieniać się między rekordami. Elastyczność nie usuwa jednak limitu zadeklarowanego dla kolumny. Zbyt mały parametr będzie ograniczeniem niezależnie od tego, jak dużo wolnego miejsca pozostaje w całej bazie. Dla większych danych często rozważa się typy przeznaczone do obsługi dużych obiektów albo przechowywanie samego pliku poza tabelą i zapisanie w bazie jego identyfikatora, metadanych oraz kontroli integralności. Podejście z odwołaniem do pliku może zmniejszyć rozmiar tabeli, ale wymaga pilnowania uprawnień, kopii zapasowych, spójności ścieżek i usuwania nieużywanych obiektów. Z kolei umieszczenie zawartości bezpośrednio w VARBINARY upraszcza powiązanie pliku z rekordem, lecz może zwiększać rozmiar kopii zapasowych, czas odczytu oraz obciążenie operacji aktualizacji. W przypadku Microsoft SQL Server dla bardzo dużych obiektów rozważany bywa FILESTREAM, ponieważ oddziela sposób przechowywania zawartości od klasycznych danych wiersza, zachowując powiązanie z rekordem. Nie jest to automatycznie rozwiązanie lepsze w każdej aplikacji. Przy małych ikonach, miniaturach, podpisach cyfrowych czy krótkich fragmentach danych zwykłe VARBINARY może być prostsze w utrzymaniu. Decyzję powinno się oprzeć na rozmiarze obiektów, częstotliwości odczytu, sposobie tworzenia kopii zapasowych oraz wymaganiach dotyczących transakcyjności. Typowe problemy wynikające z ograniczeń VARBINARYCzęstym problemem jest niedopasowanie deklaracji kolumny do rzeczywistego rozmiaru danych. Początkowo w tabeli przechowuje się niewielkie pliki, a po rozszerzeniu funkcji aplikacji zaczynają pojawiać się dokumenty o większej objętości. Próba zapisu może wtedy kończyć się komunikatem o przekroczeniu rozmiaru, a diagnostykę utrudnia fakt, że błąd występuje dopiero dla wybranych rekordów. Należy sprawdzić definicję kolumny, typ parametru w zapytaniu, sposób mapowania w kodzie oraz ewentualne konwersje wykonywane po drodze. Drugim problemem jest pomylenie liczby znaków z liczbą bajtów. VARBINARY przechowuje bajty, więc długość danych powinna być analizowana w jednostce właściwej dla typu binarnego. Plik zawierający znaki zakodowane tekstowo może zajmować więcej miejsca niż sugeruje liczba widocznych znaków, a dane skompresowane lub zaszyfrowane mogą mieć inną długość niż materiał wejściowy. Weryfikacji wymaga także to, czy aplikacja nie przekształca wartości binarnej na tekst szesnastkowy lub kod Base64. Takie reprezentacje zwiększają objętość danych i mogą sprawić, że limit zostanie osiągnięty szybciej. Problemy pojawiają się również przy kopiowaniu danych między systemami. Jeden system może dopuszczać duży obiekt, podczas gdy tabela docelowa ma krótszą kolumnę albo sterownik ustawia parametr zapytania jako zwykły ciąg znaków. Ryzyko stanowi także niejawne obcinanie wartości podczas importu. Dlatego po migracji warto porównać długość źródłowej i zapisanej sekwencji bajtów, a dla istotnych plików dodatkowo sprawdzić sumę kontrolną. Sama obecność rekordu nie potwierdza, że zawartość została zachowana w całości. Praktyczne wskazówki dotyczące ograniczeń VARBINARY
Przydatny jest test obejmujący wartości puste, bardzo małe, zbliżone do limitu oraz większe od limitu. Należy zweryfikować nie tylko sam zapis, lecz także odczyt, aktualizację, eksport, odtworzenie kopii i przeniesienie danych do środowiska testowego. Warto również ustalić, czy aplikacja rozróżnia brak wartości od pustej tablicy bajtów. W niektórych rozwiązaniach NULL oznacza brak danych, natomiast pusta wartość oznacza świadomie zapisany obiekt o długości równej zero. Takie rozróżnienie może mieć znaczenie dla walidacji i raportowania. Kiedy sprawdzić ograniczenia VARBINARY w serwisieDo analizy warto zgłosić się wtedy, gdy zapisywanie załączników działa tylko dla mniejszych plików, import kończy się błędem, po migracji dokumenty nie otwierają się prawidłowo albo rozmiar bazy rośnie szybciej, niż wynikałoby to z liczby rekordów. Sprawdzenia wymaga także sytuacja, w której aplikacja zaczyna zwalniać podczas pobierania dużych wartości, kopie zapasowe wydłużają się lub występują rozbieżności między długością pliku źródłowego a danymi w tabeli. W takich przypadkach Warszawskie Pogotowie Komputerowe 24/7 może pomóc przeanalizować konfigurację stanowiska, sposób zapisu danych, komunikaty błędów oraz poprawność działania aplikacji. Przed rozpoczęciem prac warto przygotować opis problemu, przykładowy rekord, informację o rozmiarze pliku, wersję używanego oprogramowania i wynik dotychczasowych prób. Ułatwia to rozróżnienie, czy przyczyną jest limit VARBINARY, nieprawidłowe mapowanie parametrów, błąd transferu, uszkodzenie pliku czy niewłaściwie zaplanowane przechowywanie dużych obiektów. |