2013-03-19 5 views
2

Я нахожусь в середине прототипирования социальной сети (используя ROR 3) и решил проверить Neo4j, и пока он выглядит великолепно, у меня есть вопрос о масштабировании и производительность с точки зрения дизайна.neoj4 vs «традиционный» RDBMS & Memcache/Messaging/Redis solutions

Я исследовал, как Etsy объединяет и подает фид активности (см. http://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture), и понимайте, как очереди сообщений могут отключать действия (например, совместное использование изображения и предоставление этой активности вашим 500 или около того друзьям в ленте новостей). Я также понимаю, как можно кэшировать новостные каналы (memcache) и как можно выполнять поиск с помощью Redis.

В целом, кажется, что для создания высокопроизводительной фид активности, которая хорошо масштабируется (и в социальной сети в целом) общая схема заключается в использовании sharding, горизонтального масштабирования, memcache, rabbitmq, redis, Mongodb, innodb (mysql) и т. д. - все это в попытке компенсировать большие объемы, читать диски и т. д. Но это довольно немного накладных расходов Условия разработки ..

Может ли Neo4J устранить необходимость, по крайней мере, на раннем этапе, для такого устройства? Я имею в виду, что это так быстро, что мне не нужно устанавливать очередь сообщений для фанатов и обмена сообщениями, не нужно настраивать кеш активности для каждого действия, которое выполняет пользователь, и может использовать его для обработки как заказов, так и хранения сообщений? Можно ли создать такую ​​новостную ленту, как Facebook, с такой системой, или это фид высокой производительности, ограниченный базовыми обновлениями статуса?

Если эти вопросы слишком широкие, позвольте мне задать вопрос по-другому: могу ли я написать facebook или twitter с помощью neo4j и устранить необходимость очереди сообщений для обновления обновлений (вместо этого я хочу получить прямой поток обновлений на муха), memcache для новостных лент и кэшированных объектов фида активности? Или я смогу сделать то же самое или даже больше, чтобы обрабатывать сотни запросов в секунду?

Я прошу, потому что это сэкономит немало времени, чтобы использовать Neo4J, если он действительно может обрабатывать большие объемы без использования трюков Etsy, Twitter и Facebook для поддержания высокой производительности.

+0

Вначале, короткий ответ на этот вопрос утвердительный. Помните, что нет смысла решать проблему, которой у вас нет. Проблема в том, что у вас нет прототипа. Добавление пула оптимизации к прототипу, которого нет, не имеет большого смысла, если вы правильно используете Neo4J (I.E., используйте сервер, а не встроенную версию), тогда вы можете легко оптимизировать с течением времени * по мере необходимости *. – philosodad

+0

Спасибо за ответ. Я могу оценить не кодирование проблемы до тех пор, пока она не появится, но, с другой стороны, зачем ждать, когда хорошо известно, какие проблемы обычно возникают? У меня есть прототип с использованием Active Record, просто не фид активности (обмен сообщениями уже сделан, загрузка фотографий и т. Д.), А не лента новостей и т. Д.). Последнее, что нужно для запуска, - это икота, которую можно было бы избежать с немного больше работы .. Мне бы хотелось просто заставить систему работать и беспокоиться об оптимизации позже - но не облагаться средствами - у вас нет времени или времени, чтобы нанять дополнительную помощь для решения проблем позже. –

+0

Спасибо за tip на сервере vs embedded .. –

ответ

2

Да. На самом деле это уже сделал Рене Пикхардт.

http://www.rene-pickhardt.de/graphity-an-efficient-graph-model-for-retrieving-the-top-k-news-feeds-for-users-in-social-networks/

+0

Отличный ответ .. Я видел это ... надеялся на что-то более простое читать/переваривать, прежде чем решиться сделать прыжок с mysql на neo4j .. –

+0

Max..maybe это вас заинтересует: http : //stackoverflow.com/questions/15645938/neo4j-linked-list-multiple-nodes –