1

Я создаю приложение appEngine в python, которое должно будет выполнять эффективные геопространственные запросы по данным хранилища данных. Например, пример использования - мне нужно найти первые 20 сообщений в радиусе 10 миль от текущего пользователя. Сделав некоторые исследования моих вариантов, я обнаружил, что в настоящее время, что кажется, 2 лучших подходов для достижения такого рода функциональности будет:Geohashing vs SearchAPI для геопространственных запросов с использованием хранилища данных

  • Индексация geoHashed данных GeoPoint с использованием библиотеки Geomodel Питона
  • Создание/удаление документов структурированных данных, используя новую SearchAPI от Google

кажется, с точки зрения высокого уровня, индексация geohashes и выполнения запросов на них напрямую будет дешевле и гораздо быстрее, чем создание и удаление документа для каждого геопространственной запроса, однако я также прочитал, что geohashing c быть очень неточным вдоль экватора или вдоль «разломов», созданных алгоритмом хэширования. Я видел очень мало сообщений контрастные лучшие методы в деталях, и я думаю, что стек является хорошим местом, чтобы этот разговор, так что мои вопросы заключаются в следующем:

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

Заранее спасибо.

ответ

1

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

Если ваш случай использования находит другие объекты в радиусе, как вы предлагаете, я бы определенно рекомендовал использовать API поиска. У них есть функция расстояния, специально предназначенная для этого использования.

Запросы API поиска более дороги, чем запросы Datastore, да, но если вы ведете время вычисления, чтобы выполнить эти вычисления в своем экземпляре и, возможно, итерации через все сущности для каждого geohash, чтобы убедиться, что расстояние фактически меньше желаемого радиус, тогда я бы сказал, что Search API является победителем. И не забывайте о времени выполнения.

+0

Вы говорите, что API поиска не использует какие-либо экземпляры, если вы находитесь в стандартной среде движка приложений Google? – Micro

+1

API поиска - это сервис, предоставляемый платформой Google. Он не запускается внутри вашего экземпляра - вы отправляете вызов и ожидаете ответа от службы. У вас должен быть экземпляр, доступный для доступа к API поиска, но сам поиск не выполняется в вашем экземпляре. Тем не менее, вы будете использовать поток в своем экземпляре, ожидая ответа. Если вам нужно было выполнить вычисления в вашем экземпляре, вы можете использовать несколько потоков и/или более дорогой процессор для своего экземпляра. Если вы просто передаете данные, вместо этого вы можете использовать гораздо более дешевый экземпляр 500 МГц. – marcus

-1

Вы можете взглянуть на это post, это может быть еще одна отличная альтернатива.

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

Смежные вопросы