2013-03-12 15 views
5

Tło problemu.Czy przechowywanie skompresowanego pliku w bazie danych jest korzystne?

  • Baza danych jest PostgreSQL 9.1
  • Dane są duże ilości tekstu (web page Mark-up Language)
  • Kolumnę bytea

Więc można przechowywać kompresji tekstu za pomocą PHP gzcompress i ewentualnie zmniejszyć rozmiar pliku do 70%, a następnie zapisać go w kolumnie bytea. Ale czy operacja naprawdę jest tego warta? Czy nie jest już skompresowany bytea w PostgrSQL przy użyciu TOAST i dodanie kolejnej warstwy kompresji nie będzie miało znaczącego wpływu na rozmiar danych?

+0

czy próbujesz zaoszczędzić miejsce na dysku? ponieważ konieczność dekompresji po przeczytaniu na pewno będzie droższa. Większy plik nie wpłynie na czasy zapytań, o ile pole nie zostanie wybrane, a zapytanie przez klucz podstawowy w każdym razie. –

+0

Warto w jaki sposób? Czy cierpisz na miejsce na swoim serwerze? –

+0

Próba zaoszczędzenia miejsca na dysku. Kolumna, w której przechowywane są dane, jest rzeczywiście przeznaczona do archiwizacji, więc rzadko jest wywoływana (jak raz na 3 miesiące). –

Odpowiedz

3

Tak i nie, to zależy od aplikacji.

RE: TOAST, according to PostgreSQL's documentation kompresja (przy użyciu LZ), powodują one kompresję tylko wtedy, gdy tekst jest większy niż wartość progowa 2KiB.

Więc jeśli przechowywany HTML jest mniejszy niż 2 KB, może warto wykonać własną kompresję, choć w tym przypadku nie będę się tym przejmował, ponieważ większość dokumentów HTML ma tendencję do pisania co najmniej 10 KB, a implementacja kompresji w twojej warstwie aplikacji wygląda na kłopot i sprawia, że ​​twoje dane są mniej przenośne. Istnieje również bardzo realne uderzenie wydajności z robienia tego z poziomu PHP.

Jeśli jednak przechowujesz archiwum na bardzo dużym forum internetowym, na przykład, gdzie HTML będzie średnio wynosił mniej niż 2 KB, ale jest go dużo (niektóre fora zawierają liczby postów na dziesiątki -billions), to bardzo dobry przypadek kompresji danych niezależnie.

Więc jeśli masz dużo (jak w,> 10 GB lub mniej) małych kawałków danych, może warto skompresować dane samodzielnie, , ale zawsze najpierw profiluj i testuj!, w przeciwnym razie nie przejmuj się i niech PostgreSQL go rozwiąże.

Powiązane problemy