Как можно загрузить большое количество пространственных данных в Postgis? - PullRequest
2 голосов
/ 12 июня 2011

У меня есть большое количество пространственных данных, которые мне нужно проанализировать и использовать в приложении.Исходные данные представлены в формате WKT, и я обертываю их в операторы INSERT SQL для загрузки данных.

INSERT INTO sp_table ( ID_Info, "shape") VALUES ('California', , ST_GeomFromText('POLYGON((49153 4168, 49154 4168, 49155 4168, 49155 4167, 49153 4168))'));

Однако этот подход занимает слишком много времени и объем данных (10 миллионов строк).Итак, есть ли другой способ загрузки большого количества пространственных данных?

Любые ускоренные хаки и хитрости приветствуются.

Ответы [ 2 ]

1 голос
/ 12 июня 2011

Вставьте ваш текстовый файл в таблицу (с соответствующими столбцами), используя COPY

Добавьте СЕРИЙНЫЙ ПЕРВИЧНЫЙ КЛЮЧ в эту таблицу, если у него нет одного

ВАКУУМ

Создайте один процесс на каждый процессор, который делает это:

INSERT INTO sp_table ( ID_Info, "shape")
SELECT state_name, ST_GeomFromText( geom_as_text )
FROM temp_table
WHERE id % numbre_of_cpus = x

Используйте разные значения "x" для каждого процесса, чтобы обрабатывать всю таблицу.Это позволит каждому ядру работать с медленной функцией ST_GeomFromText.

Создать индекс GIST после вставки.

1 голос
/ 12 июня 2011

Здесь вы можете найти некоторые общие советы по производительности. Возможно, у вас включено свойство fsync , и каждая команда INSERT физически записывается на жесткий диск, поэтому это занимает так много времени.

Не рекомендуется отключать fsync (особенно в производственных средах), поскольку он позволяет безопасно восстанавливать данные после неожиданного сбоя ОС. Согласно документу:

Таким образом, рекомендуется только выключить fsync, если вы можете легко воссоздать вся база данных из внешних данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...