Извлечение узлов из базы данных график


Я новичок в Postgres и PostGIS, но не геопространственных приложений.

У меня есть таблица загружается с данными графике в виде связей (ребер). Ссылка база данных насчитывает около 60,000,000 строк. Я пытаюсь извлечь узлов для быстрого поиска. Для некоторых моих доказательств -- принципиальной схемы работы я был в состоянии использовать таблицу ссылок для поисковых запросов, но там будет много дубликатов, и нет никакой гарантии, что либо колонки источника или целевой столбец содержит все узлы.

Это и Postgres & с PostGIS, поэтому я также использую таблицы для кэширования геометрии->преобразование географии. Да мне нужно использовать географию месторождений. Я также копирования информации геометрия "на всякий случай".

Создание таблиц SQL:

-- Recreate table and index
DROP TABLE IF EXISTS nodes;

CREATE TABLE nodes (node integer PRIMARY KEY, geog geography(POINT,4326) );

CREATE INDEX geogIndex ON nodes USING GIST(geog);

SELECT AddGeometryColumn('nodes', 'geom', 4326, 'POINT', 2);

-- Insert all unique nodes from the source column
INSERT INTO nodes (node,geog,geom)
       SELECT DISTINCT ON (source) source,geography( ST_Transform(geom_source,4326)),geom_source 
       FROM view_topo;

-- Insert any nodes in the target column that we don't have already
INSERT INTO nodes (node,geog,geom)
       SELECT DISTINCT ON (target) target,geography( ST_Transform(geom_target,4326)),geom_target 
       FROM view_topo
       WHERE NOT EXISTS( SELECT 1 FROM nodes WHERE nodes.node = view_topo.target);

VACUUM ANALYZE;

Я оставил первый вставлять на всю ночь, и это заняло около 2-3ч бегать. В результате около 40,000,000 уникальные узлы добавляются.

Я просто включил второй вставить и вакуума анализа. Я ожидал, что это займет как минимум до обеда.

К счастью, это только пакетное задание, которое должно выполняться после того, как я загрузил новую таблицу ссылок, но есть лучший способ? Есть ли более быстрый способ?



981
8
задан 20 января 2011 в 01:01 Источник Поделиться
Комментарии