powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / File Streem в PostgreSQL
13 сообщений из 13, страница 1 из 1
File Streem в PostgreSQL
    #39969600
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знатоки PostgreSQL подскажите есть ли возможность в PostgreSQL создавать хранилище файлов, аналогичное filestreem в sqlserver?
Я вроде читал что есть механизм, а сейчас не могу найти.
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39969609
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

Это?
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39969693
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не то.
есть именно файл стрим специально для файлов?
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39969695
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя там файлы можно хранить...
но больще ничего нет?
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39969702
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр
хотя там файлы можно хранить...
но больще ничего нет?

Хранение файлов средствами реляционной СУБД - то еще извращение.
Если у вас возникают такие задачи - повод серьезно задуматься над архитектурой.

Почему это распространено в решениях основанных на проприетарных БД (Oracle, MSSQL)?
Потому, что там уже уплачено за дорогущий комбайн и его стараются выжимать по-максимуму.

При работе с opensource решениями вы не ограничены одним инструментом. Для хранения больших объектов вполне можно выбрать средство которое будет работать только с ними, и будет работать хорошо.
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39969714
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mefman
Петр
хотя там файлы можно хранить...
но больще ничего нет?

Хранение файлов средствами реляционной СУБД - то еще извращение.
Если у вас возникают такие задачи - повод серьезно задуматься над архитектурой.

Почему это распространено в решениях основанных на проприетарных БД (Oracle, MSSQL)?
Потому, что там уже уплачено за дорогущий комбайн и его стараются выжимать по-максимуму.

При работе с opensource решениями вы не ограничены одним инструментом. Для хранения больших объектов вполне можно выбрать средство которое будет работать только с ними, и будет работать хорошо.


не буду тут дискутировать о извращениях, само по себе хранение файлов в СУБД имеет главный недостаток, что тот же sql server просто загружает все эти 100-ни ГГб-тов в память - хотя там им совершенно не место. И бесплатные версии (express) не подходят для этих целей в виду ограничения по объему. Одновременно есть куча преимуществ хранения файлов а БД - например репликация - позволяющая синхронизировать базы данных.

Но хочется услышать советы про практической реализации хранения файлов. Какие именно средство вы можете посоветовать?
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39969745
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр
это не то.
есть именно файл стрим специально для файлов?


И что не так? Large object это и есть отдельный файл.

Принципиальной разницы не вижу
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE Records
(
    [Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE, 
    [SerialNumber] INTEGER UNIQUE,
    [Chart] VARBINARY(MAX) FILESTREAM NULL
)
GO


Код: sql
1.
2.
3.
4.
5.
CREATE TABLE records (
    id uuid not null primary key,
    serialnumber integer,
    chart_id oid
)



вместо поля chart типа blob , используем ссылку на large object chart_id , в прочем если размер файлов < 1Гб, можно и так: chart bytea, правда если Вы хотите именно репликацию, то large object не реплицируются...

ЗЫ: varbinary(max) это скока?
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39969759
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fte
если Вы хотите именно репликацию, то large object не реплицируются...

Мммм, в смысле?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
psql (14devel)
Type "help" for help.

postgres=# select pg_is_in_recovery(), pg_last_xact_replay_timestamp ();
 pg_is_in_recovery | pg_last_xact_replay_timestamp 
-------------------+-------------------------------
 t                 | 2020-06-16 14:10:23.433314+03
(1 row)

postgres=# select lo_get(16386,0,100);
ERROR:  large object 16386 does not exist
-- select lo_from_bytea(16386, '\xffffff00'); on primary
postgres=# select lo_get(16386,0,100);
   lo_get   
------------
 \xffffff00
(1 row)

postgres=# select pg_is_in_recovery(), pg_last_xact_replay_timestamp ();
 pg_is_in_recovery | pg_last_xact_replay_timestamp 
-------------------+-------------------------------
 t                 | 2020-06-16 14:11:15.757937+03
(1 row)
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39969763
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,

Извиняюсь за неточность, читать: то large object не реплицируются, при использовании логической репликации...
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39969792
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fte

Принципиальной разницы не вижу


разница вот в чем:
Код: html
1.
Для кэширования данных файлов в хранилище FILESTREAM используется системный кэш NT. Это позволяет снизить возможное влияние данных FILESTREAM на производительность компонента Компонент Database Engine . Буферный пул SQL Server не используется, поэтому эта память доступна для обработки запросов.



Если хранить файлы в просто в БД они кешируются в оперативной памяти, съедая ее полностью, что очень плохо сказывается на производительности. А хранить нужно сканы размер которых достигать несколько Мб. Соответственно уже при нескольких тысячах файлов они забивают всю оперативку.

Вот и нужно решение - файлового хранилища. Даже репликацией я могу пожертвовать - реализовав ее через саму БД.
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39971351
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петр
fte

Принципиальной разницы не вижу


разница вот в чем:


Если хранить файлы в просто в БД они кешируются в оперативной памяти, съедая ее полностью, что очень плохо сказывается на производительности. А хранить нужно сканы размер которых достигать несколько Мб. Соответственно уже при нескольких тысячах файлов они забивают всю оперативку.

Вот и нужно решение - файлового хранилища. Даже репликацией я могу пожертвовать - реализовав ее через саму БД.


Нет.
PG блобы умеет стримить
там другие проблемы
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39972553
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80,

я так понял у вы так же столкнулись с выбором способа хранения файлов (pdf документов). На чем остановились?
...
Рейтинг: 0 / 0
File Streem в PostgreSQL
    #39972692
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петр
dimonz80,

я так понял у вы так же столкнулись с выбором способа хранения файлов (pdf документов). На чем остановились?


Я уже сделал выбор когда-то давно: хранить в базе. В процессе эксплуатации выяснилось, что решение не очень удачное из-за частых удалений. Если бы файлы не удалялись или были бы сравнимы с размеров кортежа в pg_largeobject (2Кб), то все было бы хорошо.

Для себя сделал выводы:

1) Если нет удалений (или их мало) или файлы не очень большие, то можно хранить в базе. В виде профита имеем согласованные бэкапы и потоковую репликацию.
2) Если есть постоянные удаления и объемы большие (т/е время на отдачу файла существенно, например стриминг видео), то лучше в хранить файлами

Кроме того, в случае миллионов файлов в одной папке файловой системе тоже может быть не очень хорошо, в отличие от БД с миллионами записей в таблице.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / File Streem в PostgreSQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]