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

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

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

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

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

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

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

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


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

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


И что не так? 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
16.06.2020, 14:13
    #39969759
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
File Streem в PostgreSQL
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
16.06.2020, 14:18
    #39969763
fte
fte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
File Streem в PostgreSQL
Melkij,

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

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


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



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

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

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


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


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

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


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

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

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


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

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

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

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


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