Нужен ли мне пространственный индекс в моей базе данных? - PullRequest
8 голосов
/ 01 апреля 2010

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

В моем приложении все запросы к базе данных будут иметь ограничивающий прямоугольник в качестве входных данных, а в качестве выходных данных мне нужны все фигуры в этой базе данных. Я знаю, что базы данных с пространственным индексом используются для такого рода приложений. Но в моем приложении , а не будут любые запросы типа "дай мне объекты рядом с х / у" или другие более сложные запросы, которые полезны в приложении ГИС.

Я планирую иметь базу данных без пространственного индекса и иметь запросы, похожие на:

SELECT * FROM shapes WHERE x < max_x AND x > min_x AND y < max_y AND y > min_y

И иметь индекс для столбцов x (double) и y (double). Насколько я понимаю, мне действительно не нужна база данных с пространственным индексом, даже если мое приложение близко к этому виду приложений.

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

Действительно ли мне нужна пространственная база данных? А когда нужен пространственный индекс?

EDIT: Поисковые запросы на самом деле будут немного более продвинутыми, чем тот, который я написал выше, так как я имею дело с геометрическими фигурами, я введу ограничивающий прямоугольник, который будет возвращать несколько фигур (с ограничивающим прямоугольником), которые находятся внутри или мешают прямоугольнику в запрос. Но я все еще думаю, что могу сделать это без пространственного индекса, после прочтения всех хороших ответов.

Ответы [ 4 ]

2 голосов
/ 07 апреля 2010

Чтобы добавить к существующим отличным ответам, производительность может или может не иметь значения здесь.

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

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

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

2 голосов
/ 01 апреля 2010

Мне действительно нужна пространственная база данных?

Похоже, что то, что вы делаете, будет хорошо работать для вашего приложения.

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

Возможно, вы захотите создать индекс для Geohash . Этот метод рекомендуется для индексации геопространственных точек в Google App Engine, например, там, где возможности индексации ограничены. ( Источник )

А когда нужен пространственный индекс?

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

2 голосов
/ 01 апреля 2010

Нет, для этого вам не нужен пространственный индекс.

Пространственные индексы необходимы для расчета расстояния между объектами, определения того, находится ли точка в пределах определенного радиуса другой точки и т. Д., В основном, когда вам необходимо учитывать географические координаты. Южное полушарие, северное полушарие и т. Д. ... все это немного меняет расстояние, когда нужно принять во внимание кривую Земли.

Если вы всегда ищете и x, и y, то вам было бы полезно иметь индекс для обоих элементов одновременно. Итак ... не индекс для столбца x и индекс для столбца y, а индекс для столбца x и y вместе взятых.

1 голос
/ 01 апреля 2010

Если вы не выходите за рамки того, что уже делаете, вам не нужен пространственный индекс или ГИС в этом отношении. Однако я бы внимательно рассмотрел ваши требования и шансы того, что приложению понадобится ГИС-система. Для этого перехода лучше, чем планировать раньше, чем позже.

ГИС дает вам несколько преимуществ. Во-первых, ГИС имеет специальный столбец формы для хранения всего, что нужно о геометрии. Он управляет пространственной привязкой, координатными метаданными и т. Д. ГИС предоставляет мощные методы для запроса данных на основе пространственных отношений и изменения геометрии (объединения, извлечения, буферы и т. Д.). Он обрабатывает точки, линии, многоугольники и т. Д. Вы можете получить новые формы из топологических операций. Кроме того, почти все ГИС-системы предоставляют средства для рендеринга данных (это действительно зависит от того, какую ГИС вы выберете, но когда она присутствует, она экономит ТОННЫ работы).

Вам понадобятся пространственные индексы только в том случае, если у вас настоящая ГИС-среда. Если вы выбираете среду ГИС, да, используйте пространственные индексы - вы просто не хотите работать без них.

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