2012-03-07 1 views
11

Я собираюсь начать проект, где я буду строить механизм рекомендаций для ресторанов. Я waffling между neo4j (график db) и mongodb (document db). мои узлы/документы будут такими, как ресторан и человек. Я знаю, что мне нужны какие-то края, что-то вроде персоны-> нравится-> ресторан или человек-> ate_at-> ресторан. мой основной запрос, однако, будет заключаться в том, чтобы найти рестораны в пределах X миль от местоположения Y.neo4j vs mongodb для пространственного поиска

если у меня есть 20 ресторанов в пределах X миль от Y, но не связаны никакими краями, как neo4j сможет обрабатывать пространственный запрос ? я знаю с mongodb, я могу индексировать на lat/long и запрашивать все типы ресторанов. делает neo4j той же функциональностью в отключенном графике?

, когда дело доходит до ответа на такие вопросы, как «какие рестораны делают мои друзья чаще всего?», Это neo4j (graph db), как идти? или будет mongodb (document db) предоставить мне аналогичную функциональность?

ответ

7

Я не знаком с Neo4J Spatial, но, похоже, MongoDB по крайней мере хорошо подходит, так как это база данных Foursquare использует именно то, что вы описываете. Геоиндексирование MongoDB чрезвычайно быстро и хорошо масштабируется.

+0

Согласен, не смотрите дальше. MongoDB идеально подходит для ваших потребностей. Теперь просто смешайте его с Node.JS, и у вас есть сверхбыстрое и масштабируемое решение – psousa

+0

спасибо, ребята, - теперь я планирую реализовать mongodb для этого решения, чего я изначально хотел сделать из-за пространственной индексации и множества API. – drizkol

10

Neo4j Spatial вводит индекс пространственных значений (или других средств), который является частью самого графика. Это означает, что даже отключенные объекты домена будут найдены через пространственный поиск, если вы проиндексируете их (то есть отношения свяжут Пространственный индекс с Ресторанами). Кроме того, это достаточно гибко, что вы можете комбинировать поиск Raw BBox в RTree с другими вещами, такими как проверка категорий ресторанов в одном и том же режиме, так как вы можете прыгать и в разных частях графика.

Таким образом, Neo4j Spatial поддерживает полный спектр возможностей поиска, которые вы ожидали бы сформировать полную топологию, как комбинированных поисков и поисков на полигоны с отверстиями и т.д.

Имейте в виду, что Neo4j Spatial находится в 0,7, так что будьте нежны и спросите на http://groups.google.com/group/neo4j/about :)

1

Другим возможным решением является использование CouchBase. Он также использует модель документа - хотя вам нужно быть намного более удобным с MapReduce для запросов. В настоящее время он обладает лучшими пространственными возможностями благодаря MongoDB, но со временем может измениться.

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

0

Neo4j геопространственный не наращивает это хорошо. Я создал геопространственный слой в neo4j и добавил узлы к этому слою. Помимо 10 000 узлов добавление узлов к слою становится очень медленным даже при использовании neo4j2.0

С другой стороны, геолокация mongodb работает значительно быстрее и более масштабируема.