Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Magazyn binarny MySQL przy użyciu systemu plików BLOB VS OS:duże pliki, duże ilości, duże problemy

Pracuję na dużym systemie oprogramowania, który wykonał zarówno mechanizmy przechowywania załączników, jak i innych treści. Pierwsza iteracja systemu przechowywała wszystkie dane w blokach BLOB w DB. Przekląłem to wtedy. Jako programista mogłem pisać skrypty poboczne, które natychmiast operowały na danych i zmieniały je, kiedy tylko chciałem.

Przeszedłem około 10 lat i nadal zarządzam tym samym oprogramowaniem, ale architektura się zmieniła i zostało napisane ze wskaźnikami do systemu plików. Przeklinam go teraz i żałuję, że nie ma go z powrotem w DB. Mam dodatkową korzyść z kilku lat i pracując nad tą aplikacją w znacznie większej ilości i wielu większych sytuacjach, czuję, że moja opinia jest teraz lepiej wykształcona. Promocja lub migracja systemu aplikacji wymaga rozbudowanego skryptowania i kopiowania milionów plików. Pewnego razu zmieniliśmy system operacyjny i wszystkie wskaźniki plików miały zły separator katalogów lub zmieniła się nazwa serwera w miejscu, w którym znajdował się plik, i musieliśmy napisać i zaplanować proste instrukcje aktualizacji SQL z DBA w weekend, aby to naprawić. Innym jest to, że system plików i rekordy bazy danych nie są zsynchronizowane, dlaczego jest niepewne, ale po tysiącach dni działania czasami systemy nietransakcyjne (system plików i baza danych nie współdzielą kontekstów transakcyjnych) po prostu tracą synchronizację. Czasami pliki w tajemniczy sposób znikają.

Kiedy to wszystko znajdowało się w DB, migracja lub promocja środowiska była kwestią zrzutu i importu DB. Zmiany w wierszach mogą być odpowiednio kontrolowane, wszystko zsynchronizowane, a logi mogą być w razie potrzeby odtwarzane do punktu w czasie. Jasne, że baza danych jest duża, ale jest rok 2011 i to po prostu nie jest wyzwaniem dla baz danych.

Co jest warte, mieliśmy podobne problemy z dużymi buforami danych podczas przesyłania strumieniowego niektórych danych, ale A) mogliśmy pompować dane w buforach bajtowych za pomocą Input|OutputStreams w JDBC i B) podczas korzystania z innych narzędzi, napisaliśmy procedurę składowaną który podzieliłby BLOB na tabelę tymczasową i iteracyjnie serwowałby porcje z tabeli tymczasowej. Działa świetnie.

Nie obchodzi mnie, jaki jest techniczny powód nie umieszczanie tych rzeczy w bazie danych, ale jest to o wiele łatwiejsze aby zarządzać w skonsolidowanej lokalizacji, mogłem w krótkim czasie podwoić i potroić sprzęt lub utworzyć sieć DB za czas zmarnowany przez konsultantów i klientów na zarządzanie różnymi plikami.

Aktualizacja:nie przejmuj się komentatorami, po prostu wyrażają swoją opinię w tej sprawie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Codeigniter/PHP sprawdza, czy można połączyć się z bazą danych

  2. Jak parsować w PHP i przechowywać w bazie danych?

  3. Liczba puli połączeń MySQL

  4. MySQL:Bardzo powolna aktualizacja/wstawianie/usuwanie zapytań zawieszonych na końcowym etapie zapytania

  5. Jak profilować MySQL