2009-06-16 12 views
7

Niedawno kupiliśmy aplikację "z półki", która jest w stanie przechowywać pliki jako blob w SQL Server. Zauważyliśmy, że baza danych wzrosła ponad dwukrotnie w ciągu ostatnich sześciu miesięcy ze względu na częstsze korzystanie z tego pola blob przez jeden dział. W rezultacie aplikacja stała się boleśnie powolna.Jak rozpoznać typ pliku z blobu/strumienia plików?

Zostałem poproszony o usunięcie pola typu blob z bazy danych i zapisanie pliku w rzeczywistym systemie plików. Niestety, aplikacja nie zapisuje, jaki typ pliku znajduje się w bazie danych. Chociaż mogę odczytać plik, ponieważ istnieje on w bazie danych, nie wiem, jakiego rozszerzenia użyć, aby zapisać plik jako. Dział wsparcia aplikacji nie obsługuje już tej wersji oprogramowania i nie będzie z nami rozmawiać o wyodrębnianiu danych. Niestety nie mamy dostępu do ich kodu źródłowego.

Wszelkie sugestie będą bardzo mile widziane! Z góry dziękuję!

+0

Nie jestem pewien, czy jest to istotne, ale prawdopodobnie 70% z tych plików to dokumenty Office, różne formaty Office 2003 - Office 2007. – proudgeekdad

Odpowiedz

2

Nie zapisać go jako dowolnego typu. Zapisz go jako plik bez rozszerzenia. Jeśli nie wiesz, co to jest, nie udawaj go. Jeśli aplikacja, która je zapisała, żąda tego, zwróć ją z systemu plików w taki sam sposób, w jaki zostanie zwrócona z bazy danych; jako dane binarne. Baza danych nie dba o to, jaki typ danych jest obiektem binarnym; ty też nie powinieneś.

2

Można spróbować użyć TRID http://mark0.net/soft-trid-e.html

Będzie skanowania plików i spróbuj określić rozszerzenie.

+0

Lub użyj portu Windows pliku linx commnad http: //downloads.sourceforge .net/gnuwin32/plik-5.03-setup.exe – jitter

0

Skąd wiesz, że ta informacja jest czytelna dla ludzi?

pliki CELE rozszerzenia są skojarzyć konkretnego programu do otwierania pliku, tak aby po dwukrotnym kliknięciu na pliku .txt, notepad.exe obsługuje go.

Jeśli tylko zapisując je do systemu plików dla dobra rozładunku bazy danych, to nie ma potrzeby jakiegokolwiek konkretnego rozszerzenia. Jeśli chcesz powiązać program z nim, a następnie użyć odpowiednie rozszerzenie

0

Inną opcją jest fizyczna partycja bazy danych. Można przechowywać tabelę zawierającą pole blob w innym pliku bazy danych, który może być przechowywany na innym dysku twardym/wrzecionie. Dysk, który zawiera tabelę blob może być dalej optymalizowane przez co RAID 0 lub RAID 10.

Może to przyspieszyć. Ponadto to podejście eliminuje potrzebę zmiany logiki aplikacji.

0

W twoich słowach „... Mam za zadanie ...” - to na pewno nie jest to problem, który można rozwiązać wykonując jakąś optymalizację w bazie danych? Przechodzenie ścieżką hackowania starszej aplikacji, dla której nie masz kodu źródłowego i na którą nie ma wsparcia, jest czymś, czego chcesz uniknąć w jak największym stopniu.

Spójrz więc na problem - powolność wniosku. Dlaczego jest wolny? Coś, czego indeks bazy danych nie mógłby rozwiązać?

Jeśli musisz wyodrębnić BLOBy do systemu plików, to dlaczego format pliku jest istotny? Z pewnością aplikacja jest zaprojektowana do wykonywania zapytań w bazie danych, aby mimo to uzyskać plik - jak wyodrębnić BLOBy do systemu plików?

Na marginesie - zwykle używam polecenia Unix file do identyfikowania plików za pomocą magicznych liczb.