Кассандра вместо MySQL для приложения для социальных сетей

Я нахожусь в середине создания нового приложения, которое будет иметь очень похожие функции для Facebook, и, хотя очевидно, что ему никогда не придется иметь дело с подобными 400 000 000 000 пользователей, он по-прежнему будет использоваться значительной базой пользователей, а большая часть они потребуют от него очень быстро.

У меня большой опыт работы с MySQL, но социальное приложение предлагает сложности, которые MySQL не очень хорошо подходит. Я знаю, что Facebook, Twitter и т.д. Переехали в Кассандру для многих своих данных, но я не уверен, как далеко идти с ним.

Например, вы могли бы хранить такие вещи, как пользовательские данные - имя пользователя, пароли, адреса и т.д. в Кассандре? Будете ли вы хранить электронные письма, комментарии, обновления статуса и т.д. В Кассандре? Я также много читал, что что-то вроде neo4j намного лучше для представления отношений друзей, используемых социальными приложениями, так как это база данных графа. Я только начинаю вниз по маршруту NoSQL, поэтому любое руководство очень ценится.

Может ли кто-нибудь посоветовать мне об этом? Надеюсь, я не слишком генерал!

Ответ 1

Например, вы могли бы хранить такие вещи, как пользовательские данные - имя пользователя, пароли, адреса и т.д. в Кассандре?

Нет, поскольку это не гарантирует согласованности. Кассандра в конечном итоге последовательна. Разумеется, не должно быть concurrency для определенных данных учетной записи пользователя, но я бы не стал делать ставку на него. Возможно, вам не нужна согласованность в полнотекстовом поиске, в вашем почтовом ящике сообщений и т.д., Но вы хотите согласованности во всех связанных с безопасностью.

Я также много читал, что что-то вроде neo4j намного лучше для представления отношений друзей, используемых социальными приложениями, поскольку это база данных графа.

Я большой поклонник правильного инструмента для правильной работы. Я не использовал neo4j, но я использовал db4o (это база данных объектов) и считаю его очень полезным. Это упрощает работу с инструментом, который изначально поддерживает ваши потребности. Поскольку вам нужны графики, а работа с графиками в SQL - это боль, я бы рекомендовал взглянуть на нее и оценить, соответствует ли она вашим конкретным потребностям.

Смешивание баз данных звучит как хорошая идея для меня, пока выбор естественный (т.е. соответствующая база данных полезна для конкретных заданий, графовых баз данных для графиков, таблицы для таблиц, баз данных ACID для всего, что требует безопасности транзакций, и т.д...).

Ответ 2

Я бы предложил провести некоторое тестирование с MySQL и с Cassandra. Когда нам приходилось делать выбор между PostgreSQL и MongoDB на одном из моих заданий, мы сравнивали время запроса на миллионы записей в обоих случаях и выяснили, что с 10 М записей Postgres предоставит нам адекватное время ответа.

Мы знали, что мы не достигнем этого количества записей, по крайней мере, на пару лет, и у нас был опыт работы с Postgres (в то время как MongoDB был не очень зрелым в то время), поэтому мы пошли с Postgres.

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

Что касается микширования реляционных и нереляционных баз данных, это то, что мы рассмотрели, но решило, что это будет слишком много хлопот, поскольку это будет означать поддержание двух видов программного обеспечения и составление довольно небольшого кода клея чтобы получить данные от обоих. Я думаю, что Cassandra будет полностью способна хранить все ваши данные.

Ответ 3

Facebook не переместился в Кассандру, они создали его.:) Насколько мне известно, noSQL DBMS не требуют или даже упоминают (спасибо mnemosyn за исправление, Facebook использует Oracle и Cassandra), работающие бок о бок с реляционной базой данных. Это - один из противоположных примеров (сохранение информации пользователя в базе данных noSQL).

Я бы сказал, что если Cassandra достаточно хороша для Facebook, это, вероятно, будет достаточно хорошим для вашего проекта. Возможно, не помешает попытаться абстрагировать логику персистентности, чтобы у вас была возможность переключиться на что-то другое, если оно абсолютно подходит к этому.

Отказ от ответственности: у меня нет (еще?) опыта работы с базами данных noSQL: я знаю, что я читал об этом.

Ответ 4

Cassandra обеспечивает хорошее распределенное решение и, вероятно, лучше для платформы Facebook, чем MySQL (если она понадобится для масштабирования). Но Cassandra не подходит для отношений данных, где вы столкнетесь с проблемой взаимоотношений "многие-ко-многим". Графическая база данных, привязанная к Cassandra, обеспечит как объемный объем потребностей, так и очень быстрые возможности запросов запросов. Мы работаем над тем, что сочетает в себе две технологии и всегда заинтересованы в типах требований, которые будет представлять ваша платформа. Если у вас есть какие-либо вопросы о том, как обращаться с определенными проблемами, связанными с данными, я бы хотел их услышать, может быть, мы сможем помочь разобраться в этом.