
Lev
15.02.2017
20:54:53
@korotovskii а исходные данные у тебя как лежат?

Dmitrii
15.02.2017
20:55:44
Это к Денису вопрос )

Lev
15.02.2017
20:57:57
Пардон. @den1970 Если данные можно положить в базу в 3857 (очень рекомендую сразу так сделать), и искать в ней. То индекс gist по колонке и <-> в помощь. Если, как в примере запроса 4326, то вызов st_transform всё съест и тогда лучше ::geography <-> ::geography делать.

Denis
15.02.2017
21:01:30
CREATE INDEX "user_point_index_st" ON "user" USING GIST (st_transform(st_setsrid(st_point(point[1], point[0]), 4326), '+proj=hammer'));
CREATE INDEX "task_point_index_st" ON "task" USING GIST (st_transform(st_setsrid(st_point(point[1], point[0]), 4326), '+proj=hammer'));

Google

Denis
15.02.2017
21:02:01
Этого достаточно чтобы работало по индексу.

Lev
15.02.2017
21:09:06
но... зачем?
при запросе тогда будет поиск по индексу, а потом перевычисление значения. st_transform не дешёвая операция с тригономерией
а дистанция в 3857 это корень суммы квадратов координат

Denis
15.02.2017
21:14:46
В таком случае мне вообще достаточно a <-> б
Мне ведь не принципиально в километрах результат
Но оказалось недостаточно

Lev
15.02.2017
21:20:18
нет. Фокус:
[local]=# SELECT st_setsrid(st_point(1, 0), 4326) <-> st_setsrid(st_point(2, 0), 4326);
┌──────────┐
│ ?column? │
├──────────┤
│ 1 │
└──────────┘
(1 row)
Time: 0,512 ms
[local] # SELECT st_setsrid(st_point(1, 0), 4326) <-> st_setsrid(st_point(359, 0), 4326);
┌──────────┐
│ ?column? │
├──────────┤
│ 358 │
└──────────┘

Артур
15.02.2017
21:20:18

Lev
15.02.2017
21:21:06
через lon:0 в лоб переходить не получается. А геойд, сцукко, круглый.

Артур
15.02.2017
21:27:28
Еще вопрос. Насколько правильно хранить фото в БД?
Понимаю что звучит чуть придурковато. Но вот 1c хранит/хранило фото БД.
Этому есть оправдание? Как это применимо в postgres?

Dmitrii
15.02.2017
21:30:16
Нет этому оправданий
Лучше не делать, а то будешь гореть в аду

Google

Fike
15.02.2017
21:30:34
Это снимает боль по менеджменту хранилища (на самом деле переносит его на БД) и удваивает передачу данных при чтении (вместо диск -> сеть получается диск -> приложение -> сеть)
В общем, это от жировых масс, обволакивающих чересчур ленивый мозг

Артур
15.02.2017
21:31:29
Ясно. Запомню

Dmitrii
15.02.2017
21:32:52
Я просто говорю как тот, у кого есть хостинг картинок
И там была такая схема ?
(надеюсь я не буду гореть в аду, т.к. я уже исправил это)
Аминь

Артур
15.02.2017
21:34:36

Dmitrii
15.02.2017
21:35:18
Нет, все в базе лежало

Артур
15.02.2017
21:35:35
Ох....

Dmitrii
15.02.2017
21:35:43
Ну кроме css и js да
Если ты об этом

Артур
15.02.2017
21:36:30
Встречал я какие то расширения для работы с фото для postgres. и это тоже путает.
Получается есть не только неправильные структуры, так еще и для них расширения написаны

Dmitrii
15.02.2017
21:37:17
Очереди тоже есть (mbus) — не поддавайся на провакацию.

Артур
15.02.2017
21:38:33

Fike
15.02.2017
21:38:42

Артур
15.02.2017
21:39:14
а в чём различие? В передаче файла?

Fike
15.02.2017
21:39:23
не могу сходу придумать кейс, где это было бы оправдано и не факт, что такой существует, но это не обязательно плохая практика вообще во всех случаях

Dmitrii
15.02.2017
21:39:44
Хотя Skype вот использует mbus (типа)

Google

Dmitrii
15.02.2017
21:39:59
Или pgq?

Артур
15.02.2017
21:40:06
Ок, раз ты готов отвечать. "WITH COMPRESSION" юзал?

Dmitrii
15.02.2017
21:40:11
Не суть, одного рода поделие короче
Это мне вопрос?

Артур
15.02.2017
21:41:22
ну обоим уж :)
а можно и каждому 821 участнику :)

Dmitrii
15.02.2017
21:42:29
Я хранил картинки в базе кгда был молодой^W^W у меня был MySQL
Так что это был дабл факап.

Артур
15.02.2017
21:43:00
или нет?
ну и логи хранить можно так
Просто если верить oracle (провожу параллель) то эта операция как раз и нужна для того чтобы текстовые данные ужимались
есть ли в этом подводные камни?

Аггей
15.02.2017
22:11:12
Ну у оракла вы имеете ввиду сжатие CLOB в secure file?
Вроде в постгре аналога нет пока (или я о нем не слышал)

Darafei
16.02.2017
06:20:43
неужели никто не сделал fdw для хранения картинок на fs? :)

Vadim
16.02.2017
06:33:09
https://wiki.postgresql.org/wiki/Foreign_data_wrappers

Аггей
16.02.2017
07:12:57
Ну можно nosql для этих целей - они местами лучше фс

VlIvYur
16.02.2017
07:21:09
Про кластерные индексы же ведь речь?первичный ключ не обязан быть кластерным.Более того,это скорее всего от безысходности он такой.Когда данные вставляются хаотично в этом тоже есть плюс:можно не ждать когда закончится предыдущая вставка в голову,если ты добавляешь в середину.Да,в таблице появляется много полупустых страниц и выше накладные расходы,когда нужно разделить страницу.Но зато все нужные тебе данные окажутся на одной странице,ну или на соседних,а не разбросаны по всему базе.Правда не знаю что из этого подходит к postgres.Ну и за var не скажу,по-моему,уж лучше фиксированный размер иметь

Google

Denis
16.02.2017
07:22:06
Доклад был на dump-2015 вродь, там Армин Роначер расказывал, что они хранят сами blob’ы картинок в постгресе как значение это для cdn вродь

Wom
16.02.2017
07:24:34
вот у этого трансляции не будет?
https://www.meetup.com/postgresqlrussia/events/229372553/

Victor
16.02.2017
07:36:51

Fike
16.02.2017
07:37:39

Victor
16.02.2017
07:39:37
нет, так разработчики сделали
большие фото и прочее - на диске, мелкие в базе

Fike
16.02.2017
07:44:58
я думаю, стоит развеять их заблуждения по поводу скорости

Сергей
16.02.2017
07:55:18
Всем доброго дня!
Помогите разобраться. Есть две таблицы: T1 и T2.
Запрос такой:
SELECT T1.f_service,
T1.f_template,
T2.is_inherit,
T2.name
FROM T1
JOIN T2
ON T2.f_template = T1.f_template
AND COALESCE(T2.f_client,3) = 3
AND T2.stat = 0
WHERE T1.f_object = 2
AND T1.stat = 0
И он уходит в Nested Loop:
"Nested Loop (cost=0.00..6.29 rows=1 width=50)"
" Join Filter: (T2.f_template = T1.f_template)"
" -> Seq Scan on T2 (cost=0.00..1.14 rows=1 width=42)"
" Filter: (((stat)::smallint = 0) AND (COALESCE(f_client, '3'::bigint) = 3))"
" -> Seq Scan on T1 (cost=0.00..5.09 rows=5 width=16)"
" Filter: ((f_object = 2) AND ((stat)::smallint = 0))"
При этом причина - в фильтре T1.f_object = 2. Если его убрать - то Hash Join...

Alexey
16.02.2017
08:06:34
ну наверное его статистика говорит, что после фильтрации T1.f_object = 2 будет 5 строк
а после фильтрации T2 будет вообще 1
так что Nested Loop тут как бы неплох, ибо не нужно создавать хэш структуры промежуточные и все такое

Denis
16.02.2017
08:12:57
Поддерживаю, надо смотреть на реальных объемах данных.

Аггей
16.02.2017
08:26:30

Fike
16.02.2017
08:26:57
ну да, распределенных файловых систем не существует

Аггей
16.02.2017
08:29:23

Darafei
16.02.2017
08:29:34
файловая система - это специфичный вид базы данных, с основной фишкой про seek() внутри записи

Аггей
16.02.2017
08:30:11
Опять я холиварище закинул )

Darafei
16.02.2017
08:31:11
я к тому, что часто вместо файловой системы достаточно объектного хранилища

Fike
16.02.2017
08:31:50

Google

Сергей
16.02.2017
08:31:56

Darafei
16.02.2017
08:32:27
listdir на мнoгих ФС не оптимизирован

Аггей
16.02.2017
08:33:44

Darafei
16.02.2017
08:34:01
из-за чего народ городит вложенные каталоги по префиксам

Alex
16.02.2017
08:34:01
так то и по direct i/o можно ходить... фс еще какие-то выдумали ;)

Darafei
16.02.2017
08:34:26
после mmap от ФС мало что остаётся

Fike
16.02.2017
08:34:35

Darafei
16.02.2017
08:35:11
а, из живых примеров

Alexey
16.02.2017
08:35:17

Darafei
16.02.2017
08:35:31
тайлы карт миллионами пакуют в sqlite-базы
и называют это стандартом mbtiles
и оно быстрее, чем фс
и нет страданий с закончившимися инодами или tail packing

Fike
16.02.2017
08:36:54
которые во всех примерах со статикой невозможны без большого геморроя при пропуске этой статики через приложение

Pavel
16.02.2017
11:02:54
Памятка для презентаций:
Никогда не вставляйте в презентацию видео с YouTube. Конференц Wi-Fi упадет именно в тот момент, когда две сотни глаз будут ждать его загрузки

Alexey
16.02.2017
11:03:31
Эм, а локально положить?