Как мне управлять данными PostGIS Raster с разными проекциями?

10

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

  • Каждый растр обычно будет иметь выборки с плавающей точкой 20x20 или 30x30, как правило, с интервалом в 1 м.
  • Опрос будет состоять из одного или нескольких из этих изображений в заданном месте.
  • Возможно, что в разных странах или регионах, где используются разные прогнозы, могут проводиться два разных обследования, но в каждом обследовании будет использоваться один и только один прогноз.
  • Они никогда не будут рассматриваться вместе, каждый опрос, как правило, проходит сам по себе.
  • Доступ к данным будет иметь только пользовательский интерфейс, поэтому пользователи не смогут получить прямой контроль над ним psqlили тому подобное.
  • Каждый образец должен быть сохранен в том виде, в котором он был собран, поэтому я не могу перепроектировать его в общий CRS, такой как Web Mercator, потому что один образец может в конечном итоге покрывать большую или меньшую площадь, чем в исходной проекции, и потребуется анализ на данных.

Как лучше всего хранить данные в базе данных PostGIS Raster? Варианты, которые я придумал:

  1. Игнорируйте ограничения SRID и сохраняйте все данные в одной таблице, записывая мой интерфейсный код для согласованного управления данными.
  2. Сохраните все данные в одной таблице и перепишите ограничение SRID в виде соединения SRID и идентификатора опроса.
  3. Посредством наследования таблиц создайте новую таблицу для каждого нового SRID.
  4. Посредством наследования таблиц создайте новую таблицу для каждого опроса.

1 и 2 нарушают некоторые приятные автоматизированные части PostGIS, но в противном случае будут скрыты в коде переднего плана. Но запросы, вероятно, займет немного больше времени.

3 и 4 может привести к взрыву таблиц, что усложнит управление ограничениями FK и так далее.

Практически, количество растров в опросе составляет от 1 до 100 и более, и количество обследований может исчисляться сотнями. Но число отдельных прогнозов, вероятно, останется очень низким, что благоприятствует 3.

MerseyViking
источник

Ответы:

7

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

ПРИМЕЧАНИЕ : под базой данных я подразумеваю базу данных, созданную внутри одного кластера баз данных postgres согласно приведенной здесь терминологии postgres , а не полностью отдельный процесс postgres со своими собственными пользователями, template1 и т. Д.

Хотя это может показаться излишним, на самом деле, предлагает несколько преимуществ:

  • Управляемость: у каждого опроса есть только одна растровая таблица со своим srid, которая позволяет вам в максимально возможной степени придерживаться стандартов управления данными postgis (т. е. не связываться с таблицей raster_columns, FK или ограничениями. Все функции postgis по-прежнему работают должным образом)

  • простота: до тех пор, пока вы принимаете и применяете согласованную стратегию именования, такую ​​как: вызывайте каждый БД как srvy_ name, а затем повторно используйте одно и то же имя (т.е. surveyydata ) для всех растровых таблиц и столбцов. Если вы очень заинтересованы (я знаю, я бы хотел ;-)), вы также можете добавить таблицу метаданных в каждую базу данных, описывающую, какие данные хранятся в этой базе данных, когда они последний раз обновлялись и так далее. Сценарии / запросы к структуре базы данных с такими последовательными именами будут простыми (и приятными).

  • он работает в соответствии с вашими требованиями, если каждый опрос использует свой собственный srid

  • масштабируемость: она масштабируется, потому что вы можете перемещать базы данных (размещая их в разных табличных пространствах ) на разных шпинделях (или дисках, пулах, в зависимости от поставщика хранилища), чтобы можно было распараллелить операции ввода-вывода. Было бы намного сложнее перенести таблицы из одной базы данных на разные диски

  • безопасность: вы можете предоставлять разные разрешения различным опросам, используя защиту базы данных (как дополнительный уровень над приложением)

  • протестировано: были сообщения о том, что postgres обрабатывает тысячи баз данных в одном экземпляре, см. это для справки

  • [это нужно проверить, я знаю, что это работает для геометрий, не знаю для растров] вы все равно можете запрашивать (и преобразовывать) все растры одновременно, создавая представления, подобные следующим:

create or replace view v_all_surveys_as_wgs84 as select ST_Transform(raster, 4326) as raster_wgs84 from srvy_number1.rasterdata union all select ST_Transform(raster, 4326) as raster_wgs84 from srvy_number2.rasterdata [...]

Одним из возможных аргументов против является то, что эта установка сложна, но я бы сказал, что вместо этого очень просто выполнить репликацию после создания первой базы данных, а затем можно полностью управлять сценариями, если установлена ​​правильная политика именования.

unicoletti
источник
Спасибо unicoletti, мне очень нравится эта идея! Я могу сделать так, чтобы каждый опрос проводился в отдельной схеме, а не в базе данных, поскольку в конечном итоге план состоит в том, чтобы разные клиенты хранили свои опросы на центральном сервере, и поэтому я мог бы создать отдельную базу данных для каждого клиента. Но так или иначе, это, конечно, лучше, чем возиться с ограничениями столбцов! Я не был уверен, было ли практическое ограничение на количество баз данных, но оно ограничивалось только ограничениями файловой системы.
MerseyViking
Спасибо! Я имел в виду базу данных = схема, а не база данных = экземпляр. Термины немного двусмысленные, я уточню свой ответ.
unicoletti
Я также добавил подсказку об использовании табличных пространств для разделения данных на разные диски.
unicoletti