Neo4j vs mongodb для пространственного поиска

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

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

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

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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