Существуют ли системы баз данных, более подходящие для социальных сетей?
Этот вопрос вдохновлен статьей " Почему Facebook, Digg и Twitter так трудно масштабировать?" На сайте highscalability.com
Итак, какие существуют системы баз данных (хотя и неясные), которые могли бы лучше обрабатывать данные этого типа?
3 ответа
Наличие системы баз данных, в которой модель данных адаптирована для структуры данных, которую вы пытаетесь представить, часто выгодно. Социальные сети очень хорошо подходят для баз данных Graph, таких как Allegro Graph, Neo4j и т. Д.
В блоге Neo4j есть хорошая статья о том, как представлять социальные сети в графовой базе данных, с примерами использования Neo4j.
Преимущество графовых баз данных заключается в том, что данные хранятся таким образом, что обход соединений между сущностями является очень быстрой операцией, позволяющей быстро обходить сложные сети. Эти операции обычно (в лучшем случае) являются дорогостоящими операциями соединения в текущих реализациях реляционных баз данных. Как и в случае реляционных баз данных, графовые базы данных по-прежнему имеют небольшую проблему с масштабированием на несколько аппаратных узлов. Однако в случае графической базы данных потребность в нескольких аппаратных узлах должна быть намного меньше, чем в реляционной базе данных для данных социальных сетей. Несколько миллиардов узлов на одной машине - это не проблема. Масштабирование до нескольких аппаратных узлов - это место, где хранятся значения ключа, поскольку объекты в хранилище значения ключа полностью изолированы друг от друга. Вместо этого проблема заключается в том, что в социальной сети ничего не изолировано, а это означает, что для эмуляции соединений требуется несколько запросов к базе данных, по одному для каждой сущности. Это будет медленно, особенно для запросов типа "друг друга", где вы обнаруживаете только один уровень друзей с каждым запросом.
Отказ от ответственности: я являюсь членом команды Neo4j.
Посмотрите отчет NOSQL, он содержит интересные ресурсы по нескольким распределенным нереляционным базам данных:
Презентационные слайды и видео
Вступительная сессия - Тодд Липкон, Cloudera (слайды, видео1, видео2)
Волдеморт - Джей Крепс, Линкедин (слайды pdf ppt, video1, video2)
Кассандра - Авинаш Лакшман, Facebook (слайды в формате ppt, видео)
Dynomite - Cliff Moon, Powerset (слайды, видео)
HBase - Райан Роусон, Stumbleupon (слайды, видео)
Hypertable - Дуг Джадд, Звенц (слайды в формате ppt, ppt, video1, video2)
CouchDB - Крис Андерсон, couch.io (слайды, видео1, видео2)VPork - Джон Трэвис, Springsource (слайды, видео)
MongoDb - Дуайт Мерриман, 10gen (слайды, видео)
Бесконечная масштабируемость - Джонас С. Карлссон, Google (слайды, видео)Некоторые видео от Digg's John Quinn, остальные от Martin Dittus с Last.fm. Фотографии Расса Гарретта с Last.fm.
Для ссылок на слайды и видео, проверьте исходную страницу, их слишком много для вставки.
Возможно, вы захотите прочитать NoSQL: "Если бы это было так просто" (и даже запись Nosql в Википедии).
Статья косвенно говорит вам ответ, когда упоминается memcached. Это хранилище значений ключей, которое хранит все свои данные в оперативной памяти. Очевидно, у вас должны быть дополнительные хранилища данных, которые хранят данные на жестких дисках, но они, вероятно, также являются хранилищами ключей. Есть много таких как Hadoop, CouchDB, Tokyo Cabinet и Redis.
Вы также можете использовать хранилище столбцов, такое как MonetDB, где вам нужно только получить интересующие вас поля, а не целые строки таблицы.
Я предлагаю вам попробовать базы данных графов. Это, пожалуй, одно из лучших решений для социальных сетей из-за производительности, когда речь идет о большом количестве отношений между объектами.
Попробуйте прочитать эту статью и посмотреть, подойдет ли вам база данных графов: https://www.guidearea.com/social-media-database-design-using-graph-database-neo4j/