Как выполнять быстрые пространственные запросы в C #

Мне нужно создать код, который с учетом точки местоположения GPS (широта, долгота) найдет 3 самые близкие точки из огромной коллекции точек (узлы OSM).

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

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

Но я не знаю, как создавать индексы в коллекции данных C #. Есть ли какая-либо библиотека .Net или другой подход, который индексирует пространственные данные в памяти, чтобы выполнять быстрые запросы к ним?

РЕДАКТИРОВАТЬ: Хотя этот вопрос похож на тот, который считается дублирующим, он вводит вопрос, имеет ли подход к базе данных или в памяти более высокую производительность.


person jayt.dev    schedule 24.07.2015    source источник
comment
leapinggorilla.com/Blog/Read/1005/spatial-search- in-lucenenet   -  person L.B    schedule 24.07.2015
comment
Для представления ваших данных в памяти вы можете взглянуть на Quadtree.   -  person Corak    schedule 24.07.2015
comment
Да, это хорошая идея, и я сейчас на нее смотрю. Я отредактировал свой вопрос, чтобы отличить его от того, который считается дубликатом.   -  person jayt.dev    schedule 25.07.2015