предоставляющая данные.
Данные представляют собой три столбика - uuid, geometry, uuid.
Необходимо собрать «оптимальное» количество данных, создать временную таблицу, создать индексы на все три колонки и засунуть данные в таблицу.
Таблица нужна для одного единственного матчинга в постгисе.
Для загрузки данных использую sqlalchemy.
Сейчас показатели такие:
15000 записей (45 тысяч значений)
Набирается такое количество записей за 1-2 секунды.
Создание таблицы, создание индексов и вставка данных (алхимия за одну транзакцию похваляется вставлять максимум 32767 значений, так что инсерта тут два, 32000 сначала вставляю, потом все оставшиеся) занимает около 3-7 секунд.
Матчинг занимает около 2-х секунд.
Можно ли как-то ускорить хотя бы первый этап (без матчинга)?
https://t.me/pgsql/303899
И да... Один матчинг... В смысле — запросы будут к этим данным одинаковые — или реально один раз один запрос?!?
Создал таблицу, сджоинил и забыл про неё
1) 13 2) Таблицы создаются динамически не могу показать 3) Запросы стандартные CREATE TEMP TABLE "{name}" ( id1 UUID NOT NULL, state geometry(GEOMETRY,-1) NOT NULL, id2 UUID NOT NULL ); INSERT INTO "{name}" VALUES ... CREATE INDEX "{name}-id1_idx" on "{name}" (id1)') CREATE INDEX "{name}-id2_idx" on "{name}" (id2)') CREATE INDEX "{name}-spatial_idx" on "{name}" using gist (state) 4) Вторая таблица для матчинга создается временно, но на всю рабочую сессию (содержит около 300к записей) используется только 2 колонки state и id2 из второй таблицы
3) Сойдёт за половину 2). Если ты не потерял там ещё индэксов. Нет, три секунды на вставку 15к строк с тремя простыми индэксами — это вообще нифига не нормально. Это очень медленно. Выясняй почему. Сними дамп одного экземпляра и попробуй повставлять на девской машыне разными способами.
Впрочем я тут чуть-чуть подумал... Можэт и нормально в зависимости от размера state. Сколько там точек в среднем?
Стэйт это всегда point
Тогда ненормально.
И следующий вопрос: а зачем вас понесло на эти галеры? 300 000 точек, по ним фильтровать поток входящих — какая проблема делать это хоть на си, хоть на любом jit-языке — nodejs, pypy, java ... Зачем вам интэрпретатор postgres в промежутке?
Мне нужно делать это все с помощью постгиса. Есть технология быстрее для матчинга географических областей с геоточками?
Конечно. Сделать тожэ самое, только вручную и без накладных расходов.
Могу я попросить более подробную инструкцию?
Сначала приведите описание (\d или как) той, другой таблицы и запрос, который ужэ работает с ней (с explain (analyze, buffers, timing). ЗЫ Можэте, конечно, попробовать описать вашу задачу как-то ещё. Но, боюсь, у вас это получится гораздо хужэ.
Кстати может кто-нибудь из администраторов составит и закрепит сообщение, что нужно для правильного ответа на большинство вопросов, тут есть ссылка на wiki, но ссылка как оформить «стандартный» вопрос думаю не помешала бы🙃
Обсуждают сегодня