Построение геопространственных запросов REST API - PullRequest
1 голос
/ 26 мая 2011

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

  • Django - поршень с геоджанго. Возможно размещение на webfaction.
  • Google App Engine.

Я более склонен к первому выбору, поскольку Google App Engine, кажется, не так открыт и в начале имеет крутой курс обучения.

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

Может кто-нибудь, пожалуйста, пролить свет на

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

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

Если подобный вопрос задавался ранее, не стесняйтесь указывать на него.

Спасибо заранее. - Самызее!

1 Ответ

2 голосов
/ 06 июня 2011

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

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

Если вы хотите использовать geodjango, используйте базу данных PostGIS и забудьте о нереляционных. Вы будете разрабатывать бэкэнд, и у него есть крутая кривая обучения для программистов, не являющихся веб-приложениями. Начните с учебных пособий по геоджанго и постепенно разрабатывайте технологический стек, с которым вам удобно (с геоджанго услуги REST будут достаточно простыми).

Причиной выбора нереляционной базы данных является либо конкретный случай использования (вы хотите хранить документы, график, или вам не нужна предопределенная схема), либо необходимость в масштабировании (одновременное чтение и запись большого количества данных). много данных, и, следовательно, использовать несколько узлов и т. д.). Если вы не являетесь программистом веб-приложения, наймите его с опытом (который может немного «поработать над архитектурой программного обеспечения»), чтобы помочь вам на этом пути.

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

Попросите кого-нибудь, кто занимался дизайном базы данных, помочь вам. Пока с описанием проблемы вы можете работать с двумя таблицами: таблицей User(id, name) и таблицей UserLocation(id, timestamp, user_id, xCoordinate, yCoordinate). Затем добавьте строку UserLocation для каждого образца, который вы получаете для пользователя. Позже вы можете разработать (и изменить) правила интерпретации таблицы UserLocation, например:

  • Последнее пользовательское местоположение является действительным
  • Если временная метка старше 4 часов, она непригодна для использования
  • и т.д.

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

...