В итоге мы использовали оба, мы внедрили поисковую систему для транспортной сети.
Попытка реализовать отношения в MongoDB может стать громоздкой, если вы выйдете за 1 или 2 «ссылки». По сути, вы будете хранить объекты в массиве, и если вы хотите реализовать двунаправленные отношения, то вы должны реализовать две отдельные ссылки. В Mongo «указатель» на сущность (или «ссылка») - это просто другое текстовое свойство (которое можно интерпретировать по-разному), это не объект первого класса, как отношение в Neo4j.
Поэтому мы решили использовать Neo4j для хранения отношений и MongoDB для хранения всего остального. Задача состояла в том, чтобы синхронизировать два магазина.
Мы используем 10gen лабораторный проект под названием «MongoConnector», который является механизмом для синхронизации MongoDB с другим хранилищем. Проект в настоящее время не поддерживается, но код доступен:
http://blog.mongodb.org/post/29127828146/introducing-mongo-connector
MongoConnector использует механизм реплики для реализации синхронизации. По сути, вы отслеживаете OpLog MongoDB и реализуете обратные вызовы для любых изменений (обновления или вставки) и удаления. Эта реализация называется «DocumentManager» на языке MongoConnector. Мы закончили реализацию Neo4jDocumentManager.
Что касается запроса, мы обнаружили, что Neo лучше подходит для запросов типа «друг друга», тогда как MongoDB лучше подходит для запросов общего назначения, т.е. по каждому полю или диапазону запросов, связанных с датами.
Я планировал поговорить и написать в блоге, но пока не дошел:
http://www.meetup.com/graphdb-boston/events/91703472/
У этого решения есть недостатки, такие как отсутствие синхронизации в случае остановки процесса или медленная синхронизация (не в реальном времени).