Muszę przechowywać pliki danych binarnych w bazie danych PostgreSQL, która działa na serwerze Ubuntu. Początkowo będzie kilkadziesiąt plików o wielkości około 250 KB każdy. Z czasem liczba plików wzrośnie. Czasami może być konieczne wyodrębnienie danych z plików w celu przeprowadzenia dalszych analiz.
Przeprowadziłem badania dotyczące odwiecznego problemu przechowywania danych binarnych jako BLOBów lub referencji. Oba oczywiście mają swoje zalety i wady. Czy są jakieś szczególne problemy związane z PostgreSQL, o których powinienem wiedzieć? Czy jedna metoda jest lepsza, jeśli chcę wyodrębnić dane z plików, albo za pomocą funkcji PostgreSQL, albo zewnętrznego programu Python?
Gdybym miał przechowywać pliki danych bezpośrednio w bazie danych, czy lepiej byłoby przechowywać je w osobnej tabeli z kluczem obcym odwołującym się do tabeli „głównej”, niż w tabeli zawierającej wszystkie pozostałe pola?
Muszę przeczytać pytanie tutaj ; komentarz sugeruje, że przechowywanie plików binarnych przez odniesienie (w systemie plików) w systemie Linux jest lepsze. Moje pytania dotyczą konkretnie PostgreSQL i ekstrakcji danych z plików do różnych analiz.
Aktualizacja: podobne pytanie .
źródło
Odpowiedzi:
Myślę, że powinieneś przechowywać dane w bazie danych jako normalną
bytea
kolumnę. W ten sposób zyskujesz wszystkie zalety bazy danych i możesz przetwarzać dane za pomocą funkcji bazy danych (a nawet PL / Python, jeśli chcesz). Większe elementy danych będą automatycznie przechowywane poza linią, więc nie byłoby powodu, aby wprowadzać inną pośrednią referencję.Głównymi przyczynami przechowywania dużych obiektów binarnych poza bazą danych jest to, że są one zbyt duże, aby można je było przechowywać i odzyskiwać w zadowalającym czasie, jeśli nadmuchują one bazę danych poza praktyczność lub jeśli potrzebujesz dostępu do plików jako plików z osobna aplikacja. O ile mi wiadomo, nic z tego nie ma zastosowania.
źródło