Uwaga, blog przeniesiony

Posty na tym blogu już nie będą się pojawiać. Zapraszam gorąco pod nowy adres: blog.grzegorzpawlik.com



Subskrybuj ten blog...

poniedziałek, 6 października 2008

Co się dzieje, gdy dane są nie tylko w bazie?

Z tym problemem często spotykam się w pracy.

Standardowe zagadnienie - klient chce wrzucać obrazki na stronę, a my ze względu na bazę zapisujemy je jako pliki, a w bazie co najwyżej ścieżkę do niego.
No i niestety przeniesienie systemu na inny serwer (np. produkcyjny) to, oprócz kopiowania kodu i bazy, przenoszenie multimediów, które nie zawsze jest miłe i przyjemne.

Dlatego od jakiegoś czasu chodzi mi po głowie pewna koncepcja, która ten problem mogłaby rozwiązać.
Otóż pliki binarne, podczas uploadu należało by jednak zapisać w bazie. Do tego należałoby opracować komponent, który w przypadku żądania obrazka o id = 1 sprawdziłby odpowiedni katalog i po znalezieniu go - zwrócił jako odpowiedź. Z kolei przy jego braku w systemie plików - utworzył takowy na podstawie danych w bazie i w standardowy sposób zwrócił plik jako odpowiedź.

Świetnie by się do tego nadawały cake'owe behaviors. Do tego można by go sprząc z jeszcze jedną funkcjonalnością- plik mógłby być w bazie zapisywany (w razie podmiany zawartości) za każdym razem pod inną nazwą (np. id_kolejny_numer_wersji). Dzięki temu możnaby tym plikom ustawić nagłówki Expire z odległą przyszłością i korzystać z dobrodziejstw bufora przeglądarek...

2 komentarze:

Pawel Debski pisze...

A chciałby Pan jes zapisywać w bazie jako BLOB czy jakoś inaczej?

Grześ pisze...

Mysql nie pozostawia zbyt wielkiego wyboru, zatem tak - BLOB, lub jakaś jego dłuższa wersja w razie gdyby 64 kilo okazało się zbyt krótkie ;)
Kiedyś na KGD.NET była świetna prelekcja o MSSQL (2007, albo 8), niestety nie pamiętam czyja. Usłyszałem tam o ciekawym rozwiązaniu - silnik bazy może zapisywać BLOBy jako pliki. Z tym, że odbywa się to niejawnie. Plusy tego są takie, że dostęp jest szybki jak w przypadku zapisywania BLOBów w plikach, ale nie zajmujemy się tym osobiście. Robi to za nas DBMS. Dlatego robiąc eksport nie ma obawy, że coś zgubimy. Ciekawe czy w mySQL można czegoś takiego oczekiwać?

Uwaga! blog przeniesiony

Posty na tym blogu już nie będą się pojawiać. Zapraszam gorąco pod nowy adres: blog.grzegorzpawlik.com
Komentowanie artykułów możliwe jest pod nowym adresem.