Комментарии 23
Идея состоит в рекурсивном разбиении области на четыре части (квадранта) по отношению к центральной точке.
Как происходит процесс вычисления центральной точки в дереве квадрантов? Медианы по обеим осям? Половина разности максимального и минимального значений x и y? Или какой-то более сложный алгоритм? Как вычисляется центральная точка, если построить индекс по пустой таблице? Может ли получиться, что после заполнения таблицы, в которой уже присутствует sp-gist индекс, все точки будут в одном квадранте верхнего уровня, а 3 других будут пустыми?
Используются средние значения по осям. Забавно, что есть код и для медианы, но чтобы его включить, надо пересобрать Постгрес с #define USE_MEDIAN
. Если интересно, загляните в src/backend/access/spgist/spgistquadtreeproc.c.
Центроид вычисляется, когда в дерево добавляется новый внутренний узел. Так что имеющиеся точки, которых уходят в новый узел, распределяются по квадрантам условно равномерно. Так что такой ситуации возникнуть не должно.
Доброго времени суток, хотел спросить как заменить в запросе IN и NOT IN там проста данные много (около миллиона) и будет расти. Поля индексированное но все равно запросы работают дольше и дольше
Заранее спасибо!
Хм, и какие выводы можно делать, не видя хотя бы EXPLAIN ANALYZE
запроса?
Из самых общих соображений могу сказать, что если данных много, то индексы будут скорее мешать, чем помогать. Возможно, вам надо добиться такого плана, чтобы таблицы соединялись с помощью HASH JOIN.
Но это все лечение по фотографии. Покажите план запроса, тогда и подумаем. Только в личку, потому что SP-GiST тут явно ни при чем.
Ну, общий алгоритм состоит в том, чтобы капать на мозги нашим разработчикам (:
Но я что-то не могу сообразить, как использовать SP-GiST для произвольной хитроизогнутой геометрии. Как эти фигуры непересекающимся образом развести по квадрантам?
В принципе да, на мой взгляд выглядит вполне себе реализуемо. Будем капать.
trac.osgeo.org/postgis/ticket/1847
github.com/pramsey/postgres/tree/spgistcompress
github.com/postgis/postgis/compare/svn-trunk...mohitkharb:spgist
github.com/postgis/postgis/compare/svn-trunk...pramsey:spgist
Это дело начинали на Google Summer of Code в 2014, но задача повисла, так как больше на стороне Postgres, чем на стороне PostGIS.
typedef struct spgLeafConsistentOut
{
Datum leafValue; /* reconstructed original data, if any */
bool recheck; /* set true if operator must be rechecked */
} spgLeafConsistentOut;
Патч о добавлении метода compress был на commitfest, но он как-то заглох. Будем его возобновлять.
www.postgresql.org/message-id/flat/54907069.1030506@sigaev.ru#54907069.1030506@sigaev.ru
Насколько я понял отсюда, пока реализован opclass только для точек. Точки имеют ограниченный размер, поэтому для них compress не так чтобы прямо жизненно необходим. Но, конечно, с compress'ом намного лучше, мы будем им заниматься.
Опкласс для произвольной геометрии, похоже, есть у Пола в github.com/postgis/postgis/compare/svn-trunk...pramsey:spgist.
www.postgresql.org/message-id/CACowWR2LhVi4JHEVV=PYzLSyBfnpMd5+bhr2R8t5vzs0o79Ndw@mail.gmail.com
Скорее стоит смотеть в сторону отображения 2-мерное прямоугольника в 4-мерную точку, по аналогии с acdf2a8b372aec1da09370fca77ff7dccac7646d.
Postgres поддерживает VSS ( API позволяющее получить консистентность / целостность резервных копий)?
Это который микрософтовский Volume Shadow? Нет, его не поддерживает, конечно.
Но, разумеется, есть собственные средства, которые позволяют делать горячие резервные копии. Все это описано в документации в разделе Создание базовой резервной копии через низкоуровневый API.
делаем бэкап VM «целиком»
Если внутри виртуальной машины OS Windows + MS SQL ( или Oracle), то резервная копия гарантирована целостна
(
Для конкретики возьмём Hyper-V, Windows внутри VM для «честного» VSS,
а не для псевдо-VSS сброса буферов файловой системы на диск, как в варианте H-V VM с Linux + СУБД
просьба учитывать, что вопрос не про плюсы/минусы ESX/H-V и(или) *nix/Win и(или) т.п.
)
Если внутри Postgres, то?...
Я не очень представляю себе, как выполняется "бэкап VM целиком". Если для этого используется механизм снимков (snapshot) Hyper-V, то да, резервная копия должна быть годной (файлы данных будут рассогласованны, но в копии будут все необходимые журнальные файлы, чтобы Постгрес при старте автоматически восстановил целостность).
P. S. Казалось бы, при чем тут индексы?
CREATE INDEX idx_companies_btree_text_pattern_ops
ON public.companies
USING btree
(ogrn text_pattern_ops, id);
Вполне отлично работает, поддерживает like/ilike запросы не только с конца, но и с начала, если выборка идёт только по колонкам, включенным в индекс
Подскажите пожалуйста, а почему can_unique не поддерживается для SP-GiST?
Думаю, потому, что дополнительная сложность перевешивает потенциальную пользу. Уникальность поддерживается только B-деревом, и там для этого много наворочено. А кому нужны первичные ключи по точкам?
Но если прям надо, то можно с помощью EXCLUDE сымитировать уникальность. Что-нибудь типа
EXCLUDE USING spgist(p WITH ~=)
Индексы в PostgreSQL — 6