2015-06-06 2 views
3

Я ищу, чтобы использовать Cassandra для ближайшего запроса типа поиска. основанный на моих координатах lon/lat, я хочу получить самые близкие точки. Мне не нужна 100-процентная точность, поэтому мне удобно использовать ограничительную рамку вместо круга (более высокая производительность), но я не могу найти конкретные инструкции (надеюсь, что пример), как реализовать ограничительную рамку.Cassandra Ограничительная коробка поиск

+0

Вы уже разработали datamodel? – pinkpanther

+0

Нет У меня пока нет модели. – user2924127

ответ

4

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

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

    • хорошо работает, если у вас есть равномерно распределенный набор данных, например, точки сетки в NWP симиляции, которые у меня были.
    • работает очень плохо на таких наборах данных, как «рестораны в США», где большинство точек пасут вокруг крупных городов. У вас будет несбалансированная высокая нагрузка на различные элементы сетки, такие как район Нью-Йорка, и получить абсолютно пустые ведра индексов, расположенные где-то в Атлантическом океане.
  • Внешние показатели, как ElasticSearch/Solr/Sphinx/др.

    • Все они имеют поддержку геопространственного индексирования из коробки, не нужно разрабатывать свои собственные в своем прикладном уровне.
    • Вам необходимо настроить отдельную службу индексирования и сохранить данные cassandra/index в синхронизации. Есть некоторые cassandra/search интеграции, такие как DSE (коммерческий), stargate-core (я никогда не слышал о том, чтобы кто-либо использовал это в процессе производства), или вы можете сворачивать свои собственные, но для этого требуется время и силы.
1

Этот вопрос был затронут в Cassandra саммите Евро в 2014 году

RedHat: Scalable Geospatial Indexing with Cassandra

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

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